From d3b6d0342f666d44a5294053fe6937180542a2bf Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Wed, 18 Dec 2024 21:20:37 -0800 Subject: [PATCH 01/23] Use checkpoint file --- common.config.mk | 3 ++- common.fabric.mk | 40 +++++++++++++++++++++++++++++++++++++--- common.mk | 1 + fabric/Makefile | 1 + 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/common.config.mk b/common.config.mk index de087b4..4364586 100644 --- a/common.config.mk +++ b/common.config.mk @@ -18,8 +18,9 @@ BUILDENV_TAG=v0.0.85 # These variables control the version numbers for parts of the Luther platform # and should be kept up-to-date to leverage the latest platform features. # See release notes: https://docs.luthersystems.com/luther/platform/release-notes -SUBSTRATE_VERSION=v2.205.0 +SUBSTRATE_VERSION=v2.205.6 SHIROCLIENT_VERSION=${SUBSTRATE_VERSION} +CONNECTORHUB_VERSION=v3.0.1-SNAPSHOT.6-47015079 SHIROTESTER_VERSION=${SUBSTRATE_VERSION} NETWORK_BUILDER_VERSION=v0.0.2 MARTIN_VERSION=v0.1.0 diff --git a/common.fabric.mk b/common.fabric.mk index c03ed49..da9dbd6 100644 --- a/common.fabric.mk +++ b/common.fabric.mk @@ -26,7 +26,11 @@ NETWORK_BUILDER_TARGET ?= docker-pull/${NETWORK_BUILDER_IMAGE}\:${NETWORK_BUILDE NETWORK_BUILDER=${NETWORK_BUILDER_IMAGE}:${NETWORK_BUILDER_VERSION} --chown "${DOCKER_CHOWN_USER}" SHIROCLIENT_IMAGE ?= luthersystems/shiroclient +CONNECTORHUB_IMAGE ?= luthersystems/connectorhub + SHIROCLIENT_TARGET ?= docker-pull/${SHIROCLIENT_IMAGE}\:${SHIROCLIENT_VERSION} +CONNECTORHUB_TARGET ?= docker-pull/${CONNECTORHUB_IMAGE}\:${CONNECTORHUB_VERSION} + SHIROCLIENT_FABRIC_CONFIG_BASENAME=shiroclient SHIROCLIENT_FABRIC_CONFIG_FAST_BASENAME=shiroclient_fast # index.gateway_name[.msp_filter]... @@ -35,7 +39,9 @@ CHAINCODE_GO ?= ${PHYLA_GO} PHYLA_CCAAS ?= PHYLA ?= ${PHYLA_GO} ${PHYLA_CCAAS} GATEWAYS ?= 1.shiroclient_gw_a.a +CONNECTORHUBS ?= 1.connectorhub_a.a START_GATEWAYS=$(addprefix start-gw-,${GATEWAYS}) +START_CONNECTORHUBS=$(addprefix start-ch-,${CONNECTORHUBS}) NOTIFY_GATEWAYS=$(addprefix notify-gw-,${GATEWAYS}) FUNCTIONAL_TEST_PHYLA=$(addprefix functional-test-phylum-,${PHYLA}) SHIRO_INIT_PHYLA=$(addprefix shiro-init-phylum-,${PHYLA}) @@ -152,8 +158,7 @@ couchdb-up: DBMODE = couchdb couchdb-up: fnb-up gateway-up .PHONY: up -up: generate-chaincodes .env fnb-up gateway-up - @ +up: generate-chaincodes .env fnb-up gateway-up connectorhub-up .PHONY: fnb-up fnb-up: ${NETWORK_BUILDER_TARGET} ${FABRIC_IMAGE_TARGETS} @@ -222,6 +227,26 @@ start-gw-%: ${SHIROCLIENT_TARGET} build/volume/msp build/volume/enroll_user --chaincode.version ${CC_VERSION}_${ccname} \ gateway ${filter_args} +.PHONY: connectorhub-up +connectorhub-up: ${START_CONNECTORHUBS} + +start-ch-%: parts=$(subst ., ,$*) +start-ch-%: idx=$(word 1,${parts}) +start-ch-%: name=$(word 2,${parts}) +start-ch-%: ccname=$(word 3,${parts}) +start-ch-%: filter=$(word 4,${parts}) +start-ch-%: filter_args=$(if ${filter},-f ${filter}) +start-ch-%: ${CONNECTORHUB_TARGET} build/volume/checkpoint + ${DOCKER_RUN} -d --name ${name} \ + -v "${CURDIR}:/tmp/fabric:ro" \ + -v "$(abspath build/volume/checkpoint):/tmp/checkpoint:rw" \ + -w "/tmp/fabric" \ + --network ${FABRIC_DOCKER_NETWORK} \ + ${CONNECTORHUB_IMAGE}:${CONNECTORHUB_VERSION} \ + start -v \ + --config-file /tmp/fabric/connectorhub.yaml \ + --checkpoint-file /tmp/checkpoint/checkpoint.txt + .SECONDEXPANSION: notify-gw-%: parts=$(subst ., ,$*) notify-gw-%: name=$(word 2,${parts}) @@ -252,7 +277,7 @@ couchdb-down: gateway-down fnb-down .PHONY: oracle-down .PHONY: down -down: oracle-down gateway-down fnb-down clean-chaincodes +down: oracle-down connectorhub-down gateway-down fnb-down clean-chaincodes .PHONY: fnb-down fnb-down: ${NETWORK_BUILDER_TARGET} @@ -269,6 +294,11 @@ gateway-down: gw_names=$(foreach g,${GATEWAYS},$(word 2,$(subst ., ,${g}))) gateway-down: -docker stop ${gw_names} +.PHONY: connectorhub-down +connectorhub-down: ch_names=$(foreach g,${CONNECTORHUBS},$(word 2,$(subst ., ,${g}))) +connectorhub-down: + -docker stop ${ch_names} + .PHONY: sleep-% sleep-%: @sleep $* @@ -435,6 +465,10 @@ build/volume/enroll_user: mkdir -p $@ chmod a+w $@ +build/volume/checkpoint: + mkdir -p $@ + chmod a+w $@ + .SECONDEXPANSION: compile-phylum-%: $$(shell find -L phylum_$$* -name "*.lisp" -not -path "*/build/*" 2>/dev/null) mkdir -p ./build/phylum_$* diff --git a/common.mk b/common.mk index a167ac3..1b31167 100644 --- a/common.mk +++ b/common.mk @@ -27,6 +27,7 @@ SERVICE_BASE_IMAGE_ALPINE=luthersystems/service-base-alpine BUILD_IMAGE_API=luthersystems/build-api SHIROCLIENT_IMAGE=luthersystems/shiroclient +CONNECTORHUB_IMAGE=luthersystems/connectorhub NETWORK_BUILDER_IMAGE=luthersystems/fabric-network-builder SHIROTESTER_IMAGE=luthersystems/shirotester MARTIN_IMAGE=luthersystems/martin diff --git a/fabric/Makefile b/fabric/Makefile index ccb1eae..e7b2f32 100644 --- a/fabric/Makefile +++ b/fabric/Makefile @@ -3,6 +3,7 @@ PROJECT_REL_DIR=.. PHYLA_CCAAS=sandbox GATEWAYS=1.shiroclient_gw_sandbox.sandbox +CONNECTORHUBS=1.connectorhub_sandbox.sandbox GENERATE_OPTS=--org-count 1 --peer-count 1 From 4ca2e34aad5784315a29fd1ede67e1c6cc908878 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Wed, 18 Dec 2024 21:20:47 -0800 Subject: [PATCH 02/23] Add connectorhub config --- fabric/connectorhub.yaml | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 fabric/connectorhub.yaml diff --git a/fabric/connectorhub.yaml b/fabric/connectorhub.yaml new file mode 100644 index 0000000..0f2f037 --- /dev/null +++ b/fabric/connectorhub.yaml @@ -0,0 +1,51 @@ +msp-id: Org1MSP +user-id: User1 +org-domain: org1.luther.systems +crypto-config-root-path: ./crypto-config +peer-name: peer0 +peer-endpoint: "peer0.org1.luther.systems:7051" +channel-name: "luther" +chaincode-id: "sandbox" +connectors: + - kind: EMAIL + name: email + mock: true + config: + smtp-server: localhost + from-address: martin@luther.systems + - kind: CAMUNDA_START + name: camunda start + mock: true + config: + gateway-url: localhost + - kind: CAMUNDA_INSPECT + name: camunda inspect + mock: true + config: + operate-url: localhost + - kind: EQUIFAX + name: ID check + mock: true + config: + aml-url: localhost + full-report-url: localhost + sm-key: todo-anr + region: eu-west-2 + logon-url: localhost + eidv-url: localhost + - kind: PDFSERV + name: pdf generator + mock: true + config: + connection: localhost + - kind: POSTGRES + name: claims DB + mock: true + config: + connection: psql://localhost:1337 + - kind: GOCARDLESS + name: payments + mock: true + config: + base-url: localhost + access-token: fnord From bfa51fef70b041856dec7cd1f77c0be74e371cfc Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Wed, 8 Jan 2025 19:15:43 -0800 Subject: [PATCH 03/23] Make phylum tests pass --- phylum/claim.lisp | 138 +++++++++++++++++--------- phylum/claim_test.lisp | 93 ++++++++++++++++++ phylum/connector.lisp | 217 ----------------------------------------- phylum/main.lisp | 2 - phylum/routes.lisp | 12 ++- phylum/utils.lisp | 28 ------ phylum/utils_test.lisp | 15 --- 7 files changed, 193 insertions(+), 312 deletions(-) create mode 100644 phylum/claim_test.lisp delete mode 100644 phylum/connector.lisp delete mode 100644 phylum/utils.lisp delete mode 100644 phylum/utils_test.lisp diff --git a/phylum/claim.lisp b/phylum/claim.lisp index 48b6fcc..f86cfda 100644 --- a/phylum/claim.lisp +++ b/phylum/claim.lisp @@ -1,19 +1,31 @@ (in-package 'sandbox) -(set 'claim-next-state - ;; claim is a linear state machine that executes in the defined order: - (sorted-map - "CLAIM_STATE_UNSPECIFIED" "CLAIM_STATE_UNSPECIFIED" - "CLAIM_STATE_NEW" "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" - "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" "CLAIM_STATE_LOECLAIM_ID_VERIFIED" - "CLAIM_STATE_LOECLAIM_ID_VERIFIED" "CLAIM_STATE_OOECLAIM_REVIEWED" - "CLAIM_STATE_OOECLAIM_REVIEWED" "CLAIM_STATE_OOECLAIM_VALIDATED" - "CLAIM_STATE_OOECLAIM_VALIDATED" "CLAIM_STATE_LOEFIN_INVOICE_ISSUED" - "CLAIM_STATE_LOEFIN_INVOICE_ISSUED" "CLAIM_STATE_OOEFIN_INVOICE_REVIEWED" - "CLAIM_STATE_OOEFIN_INVOICE_REVIEWED" "CLAIM_STATE_OOEFIN_INVOICE_APPROVED" - "CLAIM_STATE_OOEFIN_INVOICE_APPROVED" "CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED" - "CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED" "CLAIM_STATE_DONE" - "CLAIM_STATE_DONE" ())) +(use-package 'connector) + +(defun make-state-chain (chain first-state last-state) + (let* ([result (sorted-map)] + [states (append! chain last-state)] + [build-chain + (lambda (current remaining) + (when (not (empty? remaining)) + (let ([next (first remaining)]) + (assoc! result current next) + (build-chain next (rest remaining)))))]) + (build-chain first-state states) + result)) + +(set 'state-transitions + (make-state-chain (vector + "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" + "CLAIM_STATE_LOECLAIM_ID_VERIFIED" + "CLAIM_STATE_OOECLAIM_REVIEWED" + "CLAIM_STATE_OOECLAIM_VALIDATED" + "CLAIM_STATE_LOEFIN_INVOICE_ISSUED" + "CLAIM_STATE_OOEFIN_INVOICE_REVIEWED" + "CLAIM_STATE_OOEFIN_INVOICE_APPROVED" + "CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED") + "CLAIM_STATE_NEW" + "CLAIM_STATE_DONE")) (set 'sys-msp-map ;; map from system names to responsible connector MSP IDs @@ -52,56 +64,88 @@ (defun mk-claim (claim) ;; mk-claim implements claims handler logic (unless claim (error 'missing-claim "missing claim")) - (let* ([claim-id (get claim "claim_id")] - [state (or (get claim "state") "CLAIM_STATE_UNSPECIFIED")] - [events (vector)]) + (let* ([events (vector)]) (labels - ([add-event (event-req &optional desc) - (let* ([req-id (mk-uuid)] + ( + ;; id returns the ID of the claim. + [id () (get claim "claim_id")] + + ;; get-state returns the current state of the claim. + [get-state () (default (get claim "state") "")] + + [add-event (event-req) + (let* ([desc (get claims-state-event-desc (get-state))] [event (sorted-map - "oid" claim-id - "key" req-id + "oid" (id) + "key" (mk-uuid) "pdc" "private" "msp" (default (get desc "msp") "Org1MSP") "sys" (get desc "sys") "eng" (get desc "eng") "req" event-req)]) - (assoc! event-req "request_id" req-id) (append! events event))] - [ret-save () - (sorted-map "put" claim - "events" events)] - - [next-state! () - (let* ([new-state (get claim-next-state state)]) + ;; next-state upates `claim` to the next state. + [next-state () + (let* ([new-state (get state-transitions (get-state))]) (assoc! claim "state" new-state) new-state)] + ;; ret-save returns a map that the connector hub API can use to store + ;; new data for the object, and raise events for subsequent processing. + [ret-save () + (next-state) + (sorted-map "put" claim "events" events)] + [init () - (let* ([state "CLAIM_STATE_NEW"] - [_ (assoc! claim "state" state)] - [desc (get claims-state-event-desc state)] - [req (sorted-map "claim_id" claim-id "desc" "request claim details")]) - (add-event req desc)) + (assoc! claim "state" "CLAIM_STATE_NEW") (ret-save)] [data () claim] [handle (resp) - (let* ([new-state (or (next-state!) "")] + (let* ([state (get-state)] [resp-body (get resp "response")] [resp-err (get resp "error")] - [desc (get claims-state-event-desc new-state)] - [req (sorted-map "claim_id" claim-id "desc" "TODO")]) + [state (get-state)]) (when resp-err - (set-exception-unexpected "unhandled response error")) - (cc:infof resp-body "got connector resp") - ;; TODO: do something with the actual response - (unless (empty? new-state) - (add-event req desc) - (ret-save)))]) - + (set-exception-unexpected + (format-string "unhandled response error: {}" resp-err))) + (cc:infof (assoc resp-body "state" state) "handle") + (cond + ((equal? state "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS") + (add-event (mk-equifax-req (sorted-map + "account_number" "a1" + "forename" "Jimmy" + "surname" "McGill")))) + + ((equal? state "CLAIM_STATE_LOECLAIM_ID_VERIFIED") + (add-event (mk-camunda-start-req "a1" (sorted-map "x" "fnord")))) + + ((equal? state "CLAIM_STATE_OOECLAIM_REVIEWED") + (add-event (mk-psql-req "SELECT 1;"))) + + ((equal? state "CLAIM_STATE_OOECLAIM_VALIDATED") + (add-event (mk-pdfserv-req "hello world"))) + + ((equal? state "CLAIM_STATE_LOEFIN_INVOICE_ISSUED") + (add-event (mk-camunda-inspect-req "a1" true))) + + ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_REVIEWED") + (add-event (mk-email-req + "sam.wood@luthersystems.com" + "Test Email" + "Hello, this is a test email"))) + + ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_APPROVED") + (add-event (mk-gocardless-req + (sorted-map "amount" 100 + "currency" "USD")))) + + ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_TRIGGERED") + ; done + ))) + (ret-save)]) (lambda (op &rest args) (cond ((equal? op 'init) (apply init args)) ((equal? op 'handle) (apply handle args)) @@ -144,7 +188,9 @@ (register-connector-factory claims) +(defun trigger-claim (claim-id resp) + (trigger-connector-object claims claim-id resp)) + (defun create-claim () - ; create claim allocates storage for a new claim, sets the ID and state, and - ; raises an event to trigger processing. - (mk-claim (do-transition claims (claims 'new)))) + ; create claim allocates storage for a new claim, sets the ID and state. + (new-connector-object claims)) diff --git a/phylum/claim_test.lisp b/phylum/claim_test.lisp new file mode 100644 index 0000000..244c94d --- /dev/null +++ b/phylum/claim_test.lisp @@ -0,0 +1,93 @@ +;; Copyright © 2024 Luther Systems, Ltd. All right reserved. + +(in-package 'sandbox) +(use-package 'testing) + + ;; overwrite return from cc:creator such that tests can complete +(set 'cc:creator (lambda () "Org1MSP")) + +(test "claims" + (let* ([claim (create-claim)] + [_ (assert (not (nil? claim)))]) + (assert (not (nil? (get claim "state")))) + (assert (not (nil? (get claim "claim_id")))) + (let* + ([claim-id (get claim "claim_id")] + [got-claim (claims 'get claim-id)]) + (assert (not (nil? got-claim)))))) + +(use-package 'connector) + +;; +;; helper functions to interrogate the state after running the tests. +;; + +;; get the request corresponding to the event ctx. +(defun get-connector-event-req (ctx) + (let* ([key (get ctx "key")] + [pdc (get ctx "pdc")] + [event-bytes (if pdc + (cc:storage-get-private pdc key) + (cc:storage-get key))] + [event (json:load-bytes event-bytes)]) + event)) + +;; lookup the event ctx for a request ID. +(defun get-connector-event-ctx (rid) + (get (connector-handlers 'get-callback-state rid) "ctx")) + +;; get all the events within a tx, recursively. +(defun get-connector-event-recurse (metadata i output) + (let* ([event-ref-key (format-string "$connector_events:{}" i)]) + (when (key? metadata event-ref-key) + (let* ([event-ref-json (get metadata event-ref-key)] + [event-ref (json:load-string event-ref-json)] + [rid (get event-ref "rid")] + [ctx (get-connector-event-ctx rid)] + [req (get-connector-event-req ctx)]) + (assoc! output (to-string i) req) + (get-connector-event-recurse metadata (+ i 1) output))))) + +;; get all the events raised within the tx. +(defun get-connector-event-reqs () + (let* ([m (get-tx-metadata)] + [output (sorted-map)]) + (get-connector-event-recurse m 0 output) + (vals output))) + +;; +;; connector tests +;; + +(defun start-new-event-loop () + (let* ([claim (create-claim)]) + (cc:debugf (sorted-map "claim" claim) "start-new-event-loop") + (assert (not (nil? claim))) + (assert (not (nil? (get claim "claim_id")))) + (trigger-claim (get claim "claim_id") (sorted-map)))) + +(defun assert-no-more-events () + (let* ([event-reqs (get-connector-event-reqs)]) + ;; done, no more events! + (assert-equal (length event-reqs) 0))) + +(defun process-single-event-empty-response () + (let* ([event-reqs (get-connector-event-reqs)] + [_ (assert-equal 1 (length event-reqs))] + [req (first event-reqs)] + [req-id (get req "request_id")] + [resp (sorted-map "request_id" req-id)]) + ;; simulate a new tx by resetting existing events + (connector-events 'reset) + ;; simulate the connectorhub callback + (connector-handlers 'call-handler-with-body resp))) + +(defun process-event-loop (iters &optional start) + (when start (start-new-event-loop)) + (if (<= iters 0) + (assert-no-more-events) + (progn + (process-single-event-empty-response) + (process-event-loop (- iters 1))))) + +(test "test-claim-factory" (process-event-loop 7 true)) diff --git a/phylum/connector.lisp b/phylum/connector.lisp deleted file mode 100644 index ab25fd6..0000000 --- a/phylum/connector.lisp +++ /dev/null @@ -1,217 +0,0 @@ -(in-package 'sandbox) -;; -;; Connector hubs (hub) listen for events that encode requests, forward them to -;; third-party services, and then send the responses back to the phylum, via -;; a special $ch_callback endpoint. Events are carefully crafted using several -;; data structures to ensure privacy and economic storage. -;; -;; *Request Generation Logic*: -;; -;; Phylum logic create events, and register a callback class factory, that -;; instantiates a business object (using the "class" pattern) which receives -;; the response using a `'handle` method. Each event registration specifies -;; the business object class that is responsible for instantiating these -;; objects, along with the "Object ID" (OID) associated with the event. -;; -;; The event header is stored in the event data map, using a special prefix -;; `$connector_events:N`, where `N` is an incrementing counter. A single -;; phylum tx may contain multiple event headers and multiple events. -;; Note that event data is public to the orderer and all members of the network. -;; The event header contains a reference to a particular event "context". -;; -;; An event has a "context", which is data that is also available to the -;; callback during its execution. The context is stored in the sideDB, a -;; hardcoded PDC with name `private`. Luther configures its networks so that -;; all orgs have access to this common PDC, however the orderer does not have -;; access to any PDC. The key for this context data is `$cr:`. -;; The context is wrapped in a "callback state" object, which includes the -;; handler name for the object, necessary for routing responses to factories. -;; The event context contains a reference to the request body, along with an -;; MSP that determines which org and their respective connector is responsible -;; for processing the request. The context also stores the OID, which is used -;; when processing the response. -;; -;; The request body itself is stored either in the stateDB or in a PDC, and is -;; referenced indirectly by the event context. The body contains the request -;; payload that is to be forwarded to the third-party system. Every request has -;; a unique request ID, which is used to correlate a response to a callback. -;; *IMPORTANT*: this request ID is NOT the same as the request ID embedded -;; in the transaction context, which is primarily used for tracing. -;; -;; *Response Handling Logic*: -;; -;; Once the hub has forwarded the request, and received a response from the -;; third-party system, it then sends this response to the `$ch_callback ` -;; entrypoint, passing in the response as transient data using key prefix -;; `$ch_rep:N`, which may include multiple responses for different requests. -;; This response includes the request ID, which is used to correlate the -;; response with the request via the same event context. The MSPID in the -;; original event context is used to ensure that a response is only received -;; by the correct org, so an org cannot spoof responses for requests from -;; another org. -;; -;; The phylum logic for `$ch_callback` uses the req ID to lookup the event -;; context, along with the OID and class factory. The class factory is used -;; to instantiate the object for that OID, and call the handle method on that -;; object with the response. -;; -;; Upon execution of the callback, the original event context is purged, along -;; with the original request (or deleted if in state DB), so as to reduce -;; storage space. -;; -(defun mk-connector-handler () - (let ([state (sorted-map)]) - (labels - ([register-handler (name fn) - (assoc! state name fn)] - - [mk-request-key (req-id) - (format-string "$cr:{}" req-id)] - - ;; IMPORTANT: we store this in the central `private` PDC since we - ;; don't know which PDC the original request was stored. - [register-request-callback (req-id handler-name &optional ctx) - (let* ([ctx (default ctx (sorted-map))] - [callback-state (sorted-map - "handler_name" handler-name)]) - (assoc! ctx "request_id" req-id) - (assoc! callback-state "ctx" ctx) - (sidedb:put (mk-request-key req-id) callback-state))] - - [unregister-request (req-id ctx) - ;; TODO: handle multiple responses for single request_id (optional) - (let* ([callback-state-key (mk-request-key req-id)] - [key (get ctx "key")] - [pdc (get ctx "pdc")]) - (sidedb:purge callback-state-key) - (if pdc - (cc:storage-purge-private pdc key) - (statedb:del key)))] - - [get-callback-state (req-id) - (or (sidedb:get (mk-request-key req-id)) - (error 'missing-handler "no registered handler"))] - - [call-handler-helper (resp-body) - (unless resp-body (error 'missing-resp "missing response")) - (let* ([req-id (get resp-body "request_id")] - [callback-state (get-callback-state req-id)] - [handler-name (get callback-state "handler_name")] - [ctx (default (get callback-state "ctx") (sorted-map))] - [msp (get ctx "msp")] - [handler-fn (get state handler-name)]) - (when msp - (cc:debugf (sorted-map "msp" msp "req_id" req-id) "validating MSP") - (if (valid-msp? msp) - (cc:debugf (sorted-map "msp" msp) "MSPID validated") - (set-exception-security "invalid MSP for response"))) - (if handler-fn - (handler-fn resp-body ctx) - (error 'missing-handler - (format "missing connector handler: {}" handler-name))) - (unregister-request req-id ctx))] - - [call-handler-helper-recurse-i (i) - (let* ([resp-body (transient:get (format-string "$ch_rep:{}" i))]) - (when resp-body - (call-handler-helper resp-body) - (call-handler-helper-recurse-i (+ i 1))))] - - [call-handler (resp) - (call-handler-helper-recurse-i 0)]) - - (lambda (op &rest args) - (cond ((equal? op 'register-handler) (apply register-handler args)) - ((equal? op 'register-request-callback) (apply - register-request-callback - args)) - ((equal? op 'call-handler) (apply call-handler args)) - (:else (error 'unknown-operation op))))))) - -(set 'connector-handlers (singleton mk-connector-handler)) - -;; internal handler called by the connector hub -(defendpoint "$ch_callback" (resp) - (cc:infof resp "connectorhub callback") - (connector-handlers 'call-handler resp) - (route-success (sorted-map "status" "OK"))) - -;; add-connector-event inspects an event and sets up the data structures to -;; register callbacks. -(set 'add-connector-event - ((lambda () - (let ([state (sorted-map "ctr" 0)]) - (lambda (event &optional handler-name) - (let* ([ctr (get state "ctr")] - [event-num (get state "ctr")] - [event-body (get event "req")] - [event-req-id (or - (get event-body "request_id") - (mk-uuid))] - [event-key (get event "key")] ; if key omitted then use req id - [event-pdc (get event "pdc")] ; pdc storing key with req - [event-oid (or ; ID of the object - (get event "oid") - (error 'missing-oid - "missing object id"))] - [event-header (sorted-map "rid" event-req-id)] - [ctx (sorted-map "oid" event-oid - "key" event-key - "pdc" event-pdc - "msp" (get event "msp") ; opt. connector MSP - "sys" (get event "sys") ; opt. system name - "eng" (get event "eng"))] ; opt. english - ; description of event - [event-ref-str - (thread-first - event-header - (denil-map) - (json:dump-bytes) - (to-string))] - [event-ref-key (format-string "$connector_events:{}" ctr)] - [event-body-bytes (json:dump-bytes event-body)]) - (when (>= ctr 10) - (error 'too-many-events "too many events")) - (when handler-name - (connector-handlers - 'register-request-callback - event-req-id - handler-name - ctx)) - (cc:set-tx-metadata event-ref-key event-ref-str) - (if event-pdc - (cc:storage-put-private event-pdc - event-key - event-body-bytes) - (cc:storage-put event-key event-body-bytes)) - (assoc! state "ctr" (+ event-num 1)))))))) - -(export 'do-transition) -(defun do-transition (obj-factory transition) - (let* ([obj-handler-name (or (obj-factory 'name) - (error 'missing-name "factory missing name"))] - [put-obj (get transition "put")] - [del-obj (get transition "del")] - [events (get transition "events")]) - (when put-obj - (obj-factory 'put put-obj)) - (when del-obj - (obj-factory 'del obj-id)) - (map () #^(add-connector-event % obj-handler-name) events) - put-obj)) - -(export 'register-connector-factory) -(defun register-connector-factory - (obj-factory) - (let ([obj-handler-name (or (obj-factory 'name) - (error 'missing-name "factory missing name"))]) - (connector-handlers - 'register-handler - obj-handler-name - (lambda (resp ctx) - (let* ([obj-id (or (get ctx "oid") - (error 'missing-obj-id "callback missing object ID"))] - [obj (or (obj-factory 'get obj-id) - (error 'missing-obj "callback missing object"))] - [transition (obj 'handle resp)]) - (do-transition obj-factory transition)))))) diff --git a/phylum/main.lisp b/phylum/main.lisp index a6d8de4..3a5a26d 100644 --- a/phylum/main.lisp +++ b/phylum/main.lisp @@ -18,7 +18,5 @@ (set 'build-id "LUTHER_PROJECT_BUILD_ID") ; overridden during build (set 'service-version (format-string "{} ({})" version build-id)) -(load-file "utils.lisp") (load-file "routes.lisp") -(load-file "connector.lisp") (load-file "claim.lisp") diff --git a/phylum/routes.lisp b/phylum/routes.lisp index c816203..4cb2dda 100644 --- a/phylum/routes.lisp +++ b/phylum/routes.lisp @@ -64,11 +64,15 @@ "timestamp" (cc:timestamp (cc:now))))))) (defendpoint "create_claim" (req) - (let* ([claim (create-claim)] - [data (claim 'data)]) - (route-success (sorted-map "claim" data)))) + (route-success (sorted-map "claim" (create-claim)))) + +(defendpoint "update_claim" (req) + (let* ([claim-body (get req "claim")] + [claim-id (or (get claim-body "claim_id") + (set-exception-business "missing claim_id"))]) + (route-success (sorted-map "claim" (trigger-claim claim-id req))))) -(defendpoint "get_claim" (req) +(defendpoint-get "get_claim" (req) (let* ([claim-id (or (get req "claim_id") (set-exception-business "missing claim_id"))] [claim (or (claims 'get claim-id) diff --git a/phylum/utils.lisp b/phylum/utils.lisp deleted file mode 100644 index 5a0c10f..0000000 --- a/phylum/utils.lisp +++ /dev/null @@ -1,28 +0,0 @@ -;; Copyright © 2021 Luther Systems, Ltd. All right reserved. - -;; utils.lisp - -;; This file is loaded first and is ideal for defining utilities functions that -;; are widely used across your application. -(in-package 'sandbox) - -(defun denil-map (m) - ;; remove keys with nil entries from map. - (let ([keep-keys (reject 'list (lambda (k) (nil? (get m k))) (keys m))]) - (foldl (lambda (acc v) (assoc! acc v (get m v))) (sorted-map) keep-keys))) - -(defun singleton (fn) - ;; ensure an object is lazy initialized once. - ((lambda () - (let* ([r ()]) - (lambda (&rest args) - (unless r (set! r (fn))) - (apply r args)))))) - -(defun valid-msp? (expect-msp &optional expect-attributes) - (let ([expect-attributes (default expect-attributes (sorted-map))]) - (and (equal? expect-msp (cc:creator)) - (all? (lambda (key) - (equal? (get expect-attributes key) - (cc:creator-attribute key))) - (keys expect-attributes))))) diff --git a/phylum/utils_test.lisp b/phylum/utils_test.lisp deleted file mode 100644 index d866a82..0000000 --- a/phylum/utils_test.lisp +++ /dev/null @@ -1,15 +0,0 @@ -;; Copyright © 2024 Luther Systems, Ltd. All right reserved. - -(in-package 'sandbox) -(use-package 'testing) - -(test "claims" - (let* ([claim (create-claim)] - [_ (assert (not (nil? claim)))] - [data (claim 'data)]) - (assert (not (nil? (get data "state")))) - (assert (not (nil? (get data "claim_id")))) - (let* - ([claim-id (get data "claim_id")] - [got-claim (claims 'get claim-id)]) - (assert (not (nil? got-claim)))))) From 532d01182eb803b12e73189790ea7d42322e6145 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Wed, 8 Jan 2025 21:44:00 -0800 Subject: [PATCH 04/23] Make phylum tests pass --- phylum/claim.lisp | 40 ++++++++++++++++++++++------------------ phylum/claim_test.lisp | 1 + 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/phylum/claim.lisp b/phylum/claim.lisp index f86cfda..543ee01 100644 --- a/phylum/claim.lisp +++ b/phylum/claim.lisp @@ -31,12 +31,13 @@ ;; map from system names to responsible connector MSP IDs ;; TODO: for now it's all 1 connector, but in final version each connector ;; is run by a separate org (participant). + ;; IMPORTANT: these system names MUST match the connectorhub.yaml names! (sorted-map "CLAIMS_PORTAL_UI" "Org1MSP" "EQUIFAX_ID_VERIFY" "Org1MSP" "POSTGRES_CLAIMS_DB" "Org1MSP" "CAMUNDA_WORKFLOW" "Org1MSP" - "OPENKODA_INVOICE" "Org1MSP" + "PDF_INVOICE" "Org1MSP" "CAMUNDA_TASKLIST" "Org1MSP" "EMAIL" "Org1MSP" "GOCARDLESS_PAYMENT" "Org1MSP")) @@ -51,10 +52,11 @@ (sorted-map "CLAIM_STATE_UNSPECIFIED" () "CLAIM_STATE_NEW" (event-desc-record "CLAIMS_PORTAL_UI" "input claim details") - "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" (event-desc-record "EQUIFAX_ID_VERIFY" "verify customer identity") - "CLAIM_STATE_LOECLAIM_ID_VERIFIED" (event-desc-record "POSTGRES_CLAIMS_DB" "collect policy details") - "CLAIM_STATE_OOECLAIM_REVIEWED" (event-desc-record "CAMUNDA_WORKFLOW" "verify policy") - "CLAIM_STATE_OOECLAIM_VALIDATED" (event-desc-record "OPENKODA_INVOICE" "generate invoice") + ; TODO: fix and replace with equifax + "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" (event-desc-record "CAMUNDA_WORKFLOW" "verify customer identity") + "CLAIM_STATE_LOECLAIM_ID_VERIFIED" (event-desc-record "CAMUNDA_WORKFLOW" "collect policy details") + "CLAIM_STATE_OOECLAIM_REVIEWED" (event-desc-record "POSTGRES_CLAIMS_DB" "verify policy") + "CLAIM_STATE_OOECLAIM_VALIDATED" (event-desc-record "PDF_INVOICE" "generate invoice") "CLAIM_STATE_LOEFIN_INVOICE_ISSUED" (event-desc-record "CAMUNDA_TASKLIST" "approve invoice") "CLAIM_STATE_OOEFIN_INVOICE_REVIEWED" (event-desc-record "EMAIL" "email invoice") "CLAIM_STATE_OOEFIN_INVOICE_APPROVED" (event-desc-record "GOCARDLESS_PAYMENT" "make payment") @@ -114,33 +116,35 @@ (cc:infof (assoc resp-body "state" state) "handle") (cond ((equal? state "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS") - (add-event (mk-equifax-req (sorted-map - "account_number" "a1" - "forename" "Jimmy" - "surname" "McGill")))) +; TODO: +; (add-event (mk-equifax-req (sorted-map +; "account_number" "a1" +; "forename" "Jimmy" +; "surname" "McGill")))) + (add-event (mk-camunda-start-req "a1" (sorted-map "x" "fnord")))) ; DELETE ((equal? state "CLAIM_STATE_LOECLAIM_ID_VERIFIED") (add-event (mk-camunda-start-req "a1" (sorted-map "x" "fnord")))) - ((equal? state "CLAIM_STATE_OOECLAIM_REVIEWED") + ((equal? state "CLAIM_STATE_OOECLAIM_REVIEWED") (add-event (mk-psql-req "SELECT 1;"))) ((equal? state "CLAIM_STATE_OOECLAIM_VALIDATED") (add-event (mk-pdfserv-req "hello world"))) ((equal? state "CLAIM_STATE_LOEFIN_INVOICE_ISSUED") - (add-event (mk-camunda-inspect-req "a1" true))) + (add-event (mk-camunda-inspect-req "a1" "true"))) - ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_REVIEWED") + ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_REVIEWED") (add-event (mk-email-req - "sam.wood@luthersystems.com" - "Test Email" - "Hello, this is a test email"))) + "sam.wood@luthersystems.com" + "Test Email" + "Hello, this is a test email"))) ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_APPROVED") - (add-event (mk-gocardless-req - (sorted-map "amount" 100 - "currency" "USD")))) + (add-event (mk-gocardless-req + (sorted-map "amount" 100 + "currency" "USD")))) ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_TRIGGERED") ; done diff --git a/phylum/claim_test.lisp b/phylum/claim_test.lisp index 244c94d..162a247 100644 --- a/phylum/claim_test.lisp +++ b/phylum/claim_test.lisp @@ -45,6 +45,7 @@ [rid (get event-ref "rid")] [ctx (get-connector-event-ctx rid)] [req (get-connector-event-req ctx)]) + (assoc! req "request_id" rid) (assoc! output (to-string i) req) (get-connector-event-recurse metadata (+ i 1) output))))) From ba6dc7e096962b4015a2460dd8898fcfdff426c6 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Wed, 8 Jan 2025 21:44:09 -0800 Subject: [PATCH 05/23] Make integration tests pass --- api/pb/v1/oracle.pb.go | 429 +++++++++++---------- api/pb/v1/oracle.proto | 11 +- api/srvpb/v1/oracle.pb.go | 137 ++++--- api/srvpb/v1/oracle.pb.gw.go | 115 +++++- api/srvpb/v1/oracle.proto | 9 +- api/srvpb/v1/oracle.swagger.json | 119 +++++- api/srvpb/v1/oracle_grpc.pb.go | 40 ++ common.config.mk | 5 +- common.fabric.mk | 11 +- fabric/connectorhub.yaml | 18 +- portal/oracle/endpoints.go | 7 +- tests/e2e.postman_collection.json | 80 +++- tests/example/claim.martin_collection.yaml | 18 + 13 files changed, 686 insertions(+), 313 deletions(-) diff --git a/api/pb/v1/oracle.pb.go b/api/pb/v1/oracle.pb.go index 6b89cac..93d4e49 100644 --- a/api/pb/v1/oracle.pb.go +++ b/api/pb/v1/oracle.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.1 // protoc (unknown) // source: pb/v1/oracle.proto @@ -96,20 +96,16 @@ func (ClaimState) EnumDescriptor() ([]byte, []int) { } type CreateClaimRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields - - Claim *Claim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateClaimRequest) Reset() { *x = CreateClaimRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_v1_oracle_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_v1_oracle_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateClaimRequest) String() string { @@ -120,7 +116,7 @@ func (*CreateClaimRequest) ProtoMessage() {} func (x *CreateClaimRequest) ProtoReflect() protoreflect.Message { mi := &file_pb_v1_oracle_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -135,29 +131,19 @@ func (*CreateClaimRequest) Descriptor() ([]byte, []int) { return file_pb_v1_oracle_proto_rawDescGZIP(), []int{0} } -func (x *CreateClaimRequest) GetClaim() *Claim { - if x != nil { - return x.Claim - } - return nil -} - type CreateClaimResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3" json:"exception,omitempty"` + Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3" json:"claim,omitempty"` unknownFields protoimpl.UnknownFields - - Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3" json:"exception,omitempty"` - Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3" json:"claim,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateClaimResponse) Reset() { *x = CreateClaimResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_v1_oracle_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_v1_oracle_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateClaimResponse) String() string { @@ -168,7 +154,7 @@ func (*CreateClaimResponse) ProtoMessage() {} func (x *CreateClaimResponse) ProtoReflect() protoreflect.Message { mi := &file_pb_v1_oracle_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -197,21 +183,114 @@ func (x *CreateClaimResponse) GetClaim() *Claim { return nil } -type GetClaimRequest struct { - state protoimpl.MessageState +type UpdateClaimRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Claim *Claim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache +} + +func (x *UpdateClaimRequest) Reset() { + *x = UpdateClaimRequest{} + mi := &file_pb_v1_oracle_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateClaimRequest) ProtoMessage() {} + +func (x *UpdateClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_pb_v1_oracle_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateClaimRequest.ProtoReflect.Descriptor instead. +func (*UpdateClaimRequest) Descriptor() ([]byte, []int) { + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{2} +} + +func (x *UpdateClaimRequest) GetClaim() *Claim { + if x != nil { + return x.Claim + } + return nil +} + +type UpdateClaimResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3" json:"exception,omitempty"` + Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3" json:"claim,omitempty"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` +func (x *UpdateClaimResponse) Reset() { + *x = UpdateClaimResponse{} + mi := &file_pb_v1_oracle_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *GetClaimRequest) Reset() { - *x = GetClaimRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_v1_oracle_proto_msgTypes[2] +func (x *UpdateClaimResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateClaimResponse) ProtoMessage() {} + +func (x *UpdateClaimResponse) ProtoReflect() protoreflect.Message { + mi := &file_pb_v1_oracle_proto_msgTypes[3] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateClaimResponse.ProtoReflect.Descriptor instead. +func (*UpdateClaimResponse) Descriptor() ([]byte, []int) { + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{3} +} + +func (x *UpdateClaimResponse) GetException() *v1.Exception { + if x != nil { + return x.Exception } + return nil +} + +func (x *UpdateClaimResponse) GetClaim() *Claim { + if x != nil { + return x.Claim + } + return nil +} + +type GetClaimRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetClaimRequest) Reset() { + *x = GetClaimRequest{} + mi := &file_pb_v1_oracle_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetClaimRequest) String() string { @@ -221,8 +300,8 @@ func (x *GetClaimRequest) String() string { func (*GetClaimRequest) ProtoMessage() {} func (x *GetClaimRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_v1_oracle_proto_msgTypes[4] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -234,7 +313,7 @@ func (x *GetClaimRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClaimRequest.ProtoReflect.Descriptor instead. func (*GetClaimRequest) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{2} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{4} } func (x *GetClaimRequest) GetClaimId() string { @@ -245,21 +324,18 @@ func (x *GetClaimRequest) GetClaimId() string { } type GetClaimResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3" json:"exception,omitempty"` + Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3" json:"claim,omitempty"` unknownFields protoimpl.UnknownFields - - Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3" json:"exception,omitempty"` - Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3" json:"claim,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetClaimResponse) Reset() { *x = GetClaimResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_v1_oracle_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_v1_oracle_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetClaimResponse) String() string { @@ -269,8 +345,8 @@ func (x *GetClaimResponse) String() string { func (*GetClaimResponse) ProtoMessage() {} func (x *GetClaimResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_v1_oracle_proto_msgTypes[5] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -282,7 +358,7 @@ func (x *GetClaimResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClaimResponse.ProtoReflect.Descriptor instead. func (*GetClaimResponse) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{3} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{5} } func (x *GetClaimResponse) GetException() *v1.Exception { @@ -301,23 +377,20 @@ func (x *GetClaimResponse) GetClaim() *Claim { // Claim represents an insurance claim. type Claim struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Unique ID for the claim. Immutable. Set by backend. ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` // State of the claim. - State ClaimState `protobuf:"varint,2,opt,name=state,proto3,enum=pb.v1.ClaimState" json:"state,omitempty"` + State ClaimState `protobuf:"varint,2,opt,name=state,proto3,enum=pb.v1.ClaimState" json:"state,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Claim) Reset() { *x = Claim{} - if protoimpl.UnsafeEnabled { - mi := &file_pb_v1_oracle_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pb_v1_oracle_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Claim) String() string { @@ -327,8 +400,8 @@ func (x *Claim) String() string { func (*Claim) ProtoMessage() {} func (x *Claim) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_pb_v1_oracle_proto_msgTypes[6] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -340,7 +413,7 @@ func (x *Claim) ProtoReflect() protoreflect.Message { // Deprecated: Use Claim.ProtoReflect.Descriptor instead. func (*Claim) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{4} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{6} } func (x *Claim) GetClaimId() string { @@ -363,64 +436,72 @@ var file_pb_v1_oracle_proto_rawDesc = []byte{ 0x0a, 0x12, 0x70, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x05, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x22, 0x6d, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, - 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x22, 0x6a, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x4b, 0x0a, 0x05, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x27, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, - 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2a, 0xfa, 0x02, 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x41, 0x49, 0x4d, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, - 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, - 0x53, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x56, - 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x41, - 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, - 0x4d, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x45, 0x44, 0x10, 0x04, 0x12, 0x22, 0x0a, 0x1e, - 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x43, - 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x05, - 0x12, 0x25, 0x0a, 0x21, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x4c, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x49, - 0x53, 0x53, 0x55, 0x45, 0x44, 0x10, 0x06, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, - 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x45, 0x44, 0x10, 0x07, - 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x4f, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, - 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x08, 0x12, 0x28, 0x0a, 0x24, 0x43, 0x4c, 0x41, - 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x50, 0x41, 0x59, 0x5f, - 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, - 0x44, 0x10, 0x09, 0x42, 0x79, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, - 0x42, 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x75, 0x74, 0x68, - 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62, 0x2f, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x58, - 0x58, 0xaa, 0x02, 0x05, 0x50, 0x62, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x05, 0x50, 0x62, 0x5c, 0x56, - 0x31, 0xe2, 0x02, 0x11, 0x50, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x62, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x13, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, + 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x38, 0x0a, 0x12, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x6d, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, + 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x4b, + 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2a, 0xfa, 0x02, 0x0a, 0x0a, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4c, + 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, + 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, + 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x44, + 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, 0x41, 0x49, + 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x5f, 0x49, 0x44, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x21, + 0x0a, 0x1d, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, + 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x45, 0x44, 0x10, + 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, + 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, + 0x49, 0x43, 0x45, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x44, 0x10, 0x06, 0x12, 0x27, 0x0a, 0x23, + 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x46, + 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, + 0x57, 0x45, 0x44, 0x10, 0x07, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, + 0x49, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x08, 0x12, 0x28, + 0x0a, 0x24, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, + 0x45, 0x50, 0x41, 0x59, 0x5f, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, + 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x10, 0x09, 0x42, 0x79, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x2e, + 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62, 0x2f, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x05, 0x50, 0x62, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x05, 0x50, 0x62, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x11, 0x50, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x62, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -436,28 +517,32 @@ func file_pb_v1_oracle_proto_rawDescGZIP() []byte { } var file_pb_v1_oracle_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pb_v1_oracle_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_pb_v1_oracle_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_pb_v1_oracle_proto_goTypes = []any{ (ClaimState)(0), // 0: pb.v1.ClaimState (*CreateClaimRequest)(nil), // 1: pb.v1.CreateClaimRequest (*CreateClaimResponse)(nil), // 2: pb.v1.CreateClaimResponse - (*GetClaimRequest)(nil), // 3: pb.v1.GetClaimRequest - (*GetClaimResponse)(nil), // 4: pb.v1.GetClaimResponse - (*Claim)(nil), // 5: pb.v1.Claim - (*v1.Exception)(nil), // 6: common.v1.Exception + (*UpdateClaimRequest)(nil), // 3: pb.v1.UpdateClaimRequest + (*UpdateClaimResponse)(nil), // 4: pb.v1.UpdateClaimResponse + (*GetClaimRequest)(nil), // 5: pb.v1.GetClaimRequest + (*GetClaimResponse)(nil), // 6: pb.v1.GetClaimResponse + (*Claim)(nil), // 7: pb.v1.Claim + (*v1.Exception)(nil), // 8: common.v1.Exception } var file_pb_v1_oracle_proto_depIdxs = []int32{ - 5, // 0: pb.v1.CreateClaimRequest.claim:type_name -> pb.v1.Claim - 6, // 1: pb.v1.CreateClaimResponse.exception:type_name -> common.v1.Exception - 5, // 2: pb.v1.CreateClaimResponse.claim:type_name -> pb.v1.Claim - 6, // 3: pb.v1.GetClaimResponse.exception:type_name -> common.v1.Exception - 5, // 4: pb.v1.GetClaimResponse.claim:type_name -> pb.v1.Claim - 0, // 5: pb.v1.Claim.state:type_name -> pb.v1.ClaimState - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 8, // 0: pb.v1.CreateClaimResponse.exception:type_name -> common.v1.Exception + 7, // 1: pb.v1.CreateClaimResponse.claim:type_name -> pb.v1.Claim + 7, // 2: pb.v1.UpdateClaimRequest.claim:type_name -> pb.v1.Claim + 8, // 3: pb.v1.UpdateClaimResponse.exception:type_name -> common.v1.Exception + 7, // 4: pb.v1.UpdateClaimResponse.claim:type_name -> pb.v1.Claim + 8, // 5: pb.v1.GetClaimResponse.exception:type_name -> common.v1.Exception + 7, // 6: pb.v1.GetClaimResponse.claim:type_name -> pb.v1.Claim + 0, // 7: pb.v1.Claim.state:type_name -> pb.v1.ClaimState + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_pb_v1_oracle_proto_init() } @@ -465,75 +550,13 @@ func file_pb_v1_oracle_proto_init() { if File_pb_v1_oracle_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_pb_v1_oracle_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*CreateClaimRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pb_v1_oracle_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*CreateClaimResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pb_v1_oracle_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GetClaimRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pb_v1_oracle_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetClaimResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pb_v1_oracle_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*Claim); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pb_v1_oracle_proto_rawDesc, NumEnums: 1, - NumMessages: 5, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/api/pb/v1/oracle.proto b/api/pb/v1/oracle.proto index 3e3bad3..2c05bb2 100644 --- a/api/pb/v1/oracle.proto +++ b/api/pb/v1/oracle.proto @@ -10,11 +10,18 @@ import "common/v1/exception.proto"; option go_package = "github.com/luthersystems/sandbox/api/pb/v1"; -message CreateClaimRequest { +message CreateClaimRequest {} + +message CreateClaimResponse { + common.v1.Exception exception = 1; + Claim claim = 2; +} + +message UpdateClaimRequest { Claim claim = 1; } -message CreateClaimResponse { +message UpdateClaimResponse { common.v1.Exception exception = 1; Claim claim = 2; } diff --git a/api/srvpb/v1/oracle.pb.go b/api/srvpb/v1/oracle.pb.go index 0e2b6fa..5ee1555 100644 --- a/api/srvpb/v1/oracle.pb.go +++ b/api/srvpb/v1/oracle.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.1 // protoc (unknown) // source: srvpb/v1/oracle.proto @@ -40,7 +40,7 @@ var file_srvpb_v1_oracle_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xec, 0x02, 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xde, 0x03, 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x85, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, @@ -50,82 +50,93 @@ var file_srvpb_v1_oracle_proto_rawDesc = []byte{ 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x12, 0x6b, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, + 0x12, 0x64, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x05, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x65, 0x0a, - 0x08, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x92, 0x41, 0x09, 0x0a, - 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2f, 0x7b, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x5f, 0x69, 0x64, 0x7d, 0x42, 0xaa, 0x05, 0x92, 0x41, 0xa0, 0x04, 0x12, 0x12, 0x0a, 0x0b, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x20, 0x41, 0x50, 0x49, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x2a, - 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x53, 0x0a, 0x03, 0x34, 0x30, 0x30, 0x12, 0x4c, 0x0a, - 0x28, 0x42, 0x61, 0x64, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x62, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3f, 0x0a, 0x03, 0x34, - 0x30, 0x31, 0x12, 0x38, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x77, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, + 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, + 0x3a, 0x01, 0x2a, 0x32, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2f, 0x7b, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x65, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x92, 0x41, + 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, + 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2f, 0x7b, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x42, 0xaa, 0x05, 0x92, 0x41, 0xa0, 0x04, 0x12, 0x12, 0x0a, + 0x0b, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x20, 0x41, 0x50, 0x49, 0x32, 0x03, 0x31, 0x2e, + 0x30, 0x2a, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x53, 0x0a, 0x03, 0x34, 0x30, 0x30, 0x12, + 0x4c, 0x0a, 0x28, 0x42, 0x61, 0x64, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x62, 0x75, 0x73, + 0x69, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x12, 0x20, 0x0a, 0x1e, 0x1a, + 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3f, 0x0a, + 0x03, 0x34, 0x30, 0x31, 0x12, 0x38, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x1e, + 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3c, + 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x35, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3c, 0x0a, 0x03, - 0x34, 0x30, 0x33, 0x12, 0x35, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, - 0x34, 0x12, 0x34, 0x0a, 0x10, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x23, 0x0a, 0x03, 0x34, 0x30, 0x35, 0x12, 0x1c, - 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x65, 0x64, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x4b, 0x0a, 0x03, - 0x35, 0x30, 0x30, 0x12, 0x44, 0x0a, 0x20, 0x55, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3b, 0x0a, 0x03, + 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x10, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x40, 0x0a, 0x03, 0x35, 0x30, 0x33, - 0x12, 0x39, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x23, 0x0a, 0x03, 0x34, 0x30, 0x35, + 0x12, 0x1c, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x4b, + 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x44, 0x0a, 0x20, 0x55, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5a, 0x1e, 0x0a, 0x1c, 0x0a, - 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x12, 0x0f, 0x08, 0x02, 0x1a, 0x09, - 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x20, 0x02, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, - 0x2e, 0x73, 0x72, 0x76, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, - 0x72, 0x76, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x53, 0x72, 0x76, 0x70, 0x62, - 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x53, 0x72, 0x76, 0x70, 0x62, 0x5c, 0x56, 0x31, 0xe2, 0x02, - 0x14, 0x53, 0x72, 0x76, 0x70, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x53, 0x72, 0x76, 0x70, 0x62, 0x3a, 0x3a, 0x56, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x40, 0x0a, 0x03, 0x35, + 0x30, 0x33, 0x12, 0x39, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x1e, 0x1a, + 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5a, 0x1e, 0x0a, + 0x1c, 0x0a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x12, 0x0f, 0x08, 0x02, + 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x20, 0x02, 0x0a, 0x0c, 0x63, + 0x6f, 0x6d, 0x2e, 0x73, 0x72, 0x76, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4f, 0x72, 0x61, + 0x63, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x73, 0x72, 0x76, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x53, 0x72, 0x76, + 0x70, 0x62, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x53, 0x72, 0x76, 0x70, 0x62, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x14, 0x53, 0x72, 0x76, 0x70, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x53, 0x72, 0x76, 0x70, 0x62, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_srvpb_v1_oracle_proto_goTypes = []any{ (*v1.GetHealthCheckRequest)(nil), // 0: healthcheck.v1.GetHealthCheckRequest (*v11.CreateClaimRequest)(nil), // 1: pb.v1.CreateClaimRequest - (*v11.GetClaimRequest)(nil), // 2: pb.v1.GetClaimRequest - (*v1.GetHealthCheckResponse)(nil), // 3: healthcheck.v1.GetHealthCheckResponse - (*v11.CreateClaimResponse)(nil), // 4: pb.v1.CreateClaimResponse - (*v11.GetClaimResponse)(nil), // 5: pb.v1.GetClaimResponse + (*v11.UpdateClaimRequest)(nil), // 2: pb.v1.UpdateClaimRequest + (*v11.GetClaimRequest)(nil), // 3: pb.v1.GetClaimRequest + (*v1.GetHealthCheckResponse)(nil), // 4: healthcheck.v1.GetHealthCheckResponse + (*v11.CreateClaimResponse)(nil), // 5: pb.v1.CreateClaimResponse + (*v11.UpdateClaimResponse)(nil), // 6: pb.v1.UpdateClaimResponse + (*v11.GetClaimResponse)(nil), // 7: pb.v1.GetClaimResponse } var file_srvpb_v1_oracle_proto_depIdxs = []int32{ 0, // 0: srvpb.v1.SandboxService.GetHealthCheck:input_type -> healthcheck.v1.GetHealthCheckRequest 1, // 1: srvpb.v1.SandboxService.CreateClaim:input_type -> pb.v1.CreateClaimRequest - 2, // 2: srvpb.v1.SandboxService.GetClaim:input_type -> pb.v1.GetClaimRequest - 3, // 3: srvpb.v1.SandboxService.GetHealthCheck:output_type -> healthcheck.v1.GetHealthCheckResponse - 4, // 4: srvpb.v1.SandboxService.CreateClaim:output_type -> pb.v1.CreateClaimResponse - 5, // 5: srvpb.v1.SandboxService.GetClaim:output_type -> pb.v1.GetClaimResponse - 3, // [3:6] is the sub-list for method output_type - 0, // [0:3] is the sub-list for method input_type + 2, // 2: srvpb.v1.SandboxService.UpdateClaim:input_type -> pb.v1.UpdateClaimRequest + 3, // 3: srvpb.v1.SandboxService.GetClaim:input_type -> pb.v1.GetClaimRequest + 4, // 4: srvpb.v1.SandboxService.GetHealthCheck:output_type -> healthcheck.v1.GetHealthCheckResponse + 5, // 5: srvpb.v1.SandboxService.CreateClaim:output_type -> pb.v1.CreateClaimResponse + 6, // 6: srvpb.v1.SandboxService.UpdateClaim:output_type -> pb.v1.UpdateClaimResponse + 7, // 7: srvpb.v1.SandboxService.GetClaim:output_type -> pb.v1.GetClaimResponse + 4, // [4:8] is the sub-list for method output_type + 0, // [0:4] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/api/srvpb/v1/oracle.pb.gw.go b/api/srvpb/v1/oracle.pb.gw.go index b082b14..2ed2ec9 100644 --- a/api/srvpb/v1/oracle.pb.gw.go +++ b/api/srvpb/v1/oracle.pb.gw.go @@ -73,10 +73,6 @@ func request_SandboxService_CreateClaim_0(ctx context.Context, marshaler runtime var protoReq v1_1.CreateClaimRequest var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Claim); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - msg, err := client.CreateClaim(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -86,11 +82,67 @@ func local_request_SandboxService_CreateClaim_0(ctx context.Context, marshaler r var protoReq v1_1.CreateClaimRequest var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Claim); err != nil && err != io.EOF { + msg, err := server.CreateClaim(ctx, &protoReq) + return msg, metadata, err + +} + +func request_SandboxService_UpdateClaim_0(ctx context.Context, marshaler runtime.Marshaler, client SandboxServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq v1_1.UpdateClaimRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.CreateClaim(ctx, &protoReq) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["claim.claim_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "claim.claim_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "claim.claim_id", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "claim.claim_id", err) + } + + msg, err := client.UpdateClaim(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SandboxService_UpdateClaim_0(ctx context.Context, marshaler runtime.Marshaler, server SandboxServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq v1_1.UpdateClaimRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["claim.claim_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "claim.claim_id") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "claim.claim_id", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "claim.claim_id", err) + } + + msg, err := server.UpdateClaim(ctx, &protoReq) return msg, metadata, err } @@ -203,6 +255,31 @@ func RegisterSandboxServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) + mux.Handle("PATCH", pattern_SandboxService_UpdateClaim_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/srvpb.v1.SandboxService/UpdateClaim", runtime.WithHTTPPathPattern("/v1/claim/{claim.claim_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SandboxService_UpdateClaim_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_SandboxService_UpdateClaim_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_SandboxService_GetClaim_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -313,6 +390,28 @@ func RegisterSandboxServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) + mux.Handle("PATCH", pattern_SandboxService_UpdateClaim_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/srvpb.v1.SandboxService/UpdateClaim", runtime.WithHTTPPathPattern("/v1/claim/{claim.claim_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SandboxService_UpdateClaim_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_SandboxService_UpdateClaim_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_SandboxService_GetClaim_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -343,6 +442,8 @@ var ( pattern_SandboxService_CreateClaim_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "claims"}, "")) + pattern_SandboxService_UpdateClaim_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "claim", "claim.claim_id"}, "")) + pattern_SandboxService_GetClaim_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "claim", "claim_id"}, "")) ) @@ -351,5 +452,7 @@ var ( forward_SandboxService_CreateClaim_0 = runtime.ForwardResponseMessage + forward_SandboxService_UpdateClaim_0 = runtime.ForwardResponseMessage + forward_SandboxService_GetClaim_0 = runtime.ForwardResponseMessage ) diff --git a/api/srvpb/v1/oracle.proto b/api/srvpb/v1/oracle.proto index 9c84c10..b63d6ac 100644 --- a/api/srvpb/v1/oracle.proto +++ b/api/srvpb/v1/oracle.proto @@ -105,9 +105,14 @@ service SandboxService { } // Create claim initiates the creation of the claim. rpc CreateClaim(pb.v1.CreateClaimRequest) returns (pb.v1.CreateClaimResponse) { + option (google.api.http) = {post: "/v1/claims"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {tags: "Service"}; + } + // Update claim sets claim details. + rpc UpdateClaim(pb.v1.UpdateClaimRequest) returns (pb.v1.UpdateClaimResponse) { option (google.api.http) = { - post: "/v1/claims" - body: "claim" + patch: "/v1/claim/{claim.claim_id}" + body: "*" }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {tags: "Service"}; } diff --git a/api/srvpb/v1/oracle.swagger.json b/api/srvpb/v1/oracle.swagger.json index da1a4d8..0ef9d60 100644 --- a/api/srvpb/v1/oracle.swagger.json +++ b/api/srvpb/v1/oracle.swagger.json @@ -19,6 +19,89 @@ "application/json" ], "paths": { + "/v1/claim/{claim.claimId}": { + "patch": { + "summary": "Update claim sets claim details.", + "operationId": "SandboxService_UpdateClaim", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1UpdateClaimResponse" + } + }, + "400": { + "description": "Bad request determined by business logic", + "schema": { + "$ref": "#/definitions/v1ExceptionResponse" + } + }, + "401": { + "description": "Authorization failed", + "schema": { + "$ref": "#/definitions/v1ExceptionResponse" + } + }, + "403": { + "description": "Permission denied", + "schema": { + "$ref": "#/definitions/v1ExceptionResponse" + } + }, + "404": { + "description": "Missing resource", + "schema": { + "$ref": "#/definitions/v1ExceptionResponse" + } + }, + "405": { + "description": "Method not allowed", + "schema": { + "type": "string", + "format": "string" + } + }, + "500": { + "description": "Unexpected internal server error", + "schema": { + "$ref": "#/definitions/v1ExceptionResponse" + } + }, + "503": { + "description": "Service not available", + "schema": { + "$ref": "#/definitions/v1ExceptionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "claim.claimId", + "description": "Unique ID for the claim. Immutable. Set by backend.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SandboxServiceUpdateClaimBody" + } + } + ], + "tags": [ + "Service" + ] + } + }, "/v1/claim/{claimId}": { "get": { "summary": "Retrieve claim details.", @@ -154,16 +237,6 @@ } } }, - "parameters": [ - { - "name": "claim", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1Claim" - } - } - ], "tags": [ "Service" ] @@ -246,6 +319,21 @@ } }, "definitions": { + "SandboxServiceUpdateClaimBody": { + "type": "object", + "properties": { + "claim": { + "type": "object", + "properties": { + "state": { + "$ref": "#/definitions/v1ClaimState", + "description": "State of the claim." + } + }, + "description": "Claim represents an insurance claim." + } + } + }, "protobufAny": { "type": "object", "properties": { @@ -417,6 +505,17 @@ } }, "description": "Health check status of an individual service." + }, + "v1UpdateClaimResponse": { + "type": "object", + "properties": { + "exception": { + "$ref": "#/definitions/v1Exception" + }, + "claim": { + "$ref": "#/definitions/v1Claim" + } + } } }, "securityDefinitions": { diff --git a/api/srvpb/v1/oracle_grpc.pb.go b/api/srvpb/v1/oracle_grpc.pb.go index 4d98a2b..ac2e620 100644 --- a/api/srvpb/v1/oracle_grpc.pb.go +++ b/api/srvpb/v1/oracle_grpc.pb.go @@ -27,6 +27,7 @@ const _ = grpc.SupportPackageIsVersion9 const ( SandboxService_GetHealthCheck_FullMethodName = "/srvpb.v1.SandboxService/GetHealthCheck" SandboxService_CreateClaim_FullMethodName = "/srvpb.v1.SandboxService/CreateClaim" + SandboxService_UpdateClaim_FullMethodName = "/srvpb.v1.SandboxService/UpdateClaim" SandboxService_GetClaim_FullMethodName = "/srvpb.v1.SandboxService/GetClaim" ) @@ -40,6 +41,8 @@ type SandboxServiceClient interface { GetHealthCheck(ctx context.Context, in *v1.GetHealthCheckRequest, opts ...grpc.CallOption) (*v1.GetHealthCheckResponse, error) // Create claim initiates the creation of the claim. CreateClaim(ctx context.Context, in *v11.CreateClaimRequest, opts ...grpc.CallOption) (*v11.CreateClaimResponse, error) + // Update claim sets claim details. + UpdateClaim(ctx context.Context, in *v11.UpdateClaimRequest, opts ...grpc.CallOption) (*v11.UpdateClaimResponse, error) // Retrieve claim details. GetClaim(ctx context.Context, in *v11.GetClaimRequest, opts ...grpc.CallOption) (*v11.GetClaimResponse, error) } @@ -72,6 +75,16 @@ func (c *sandboxServiceClient) CreateClaim(ctx context.Context, in *v11.CreateCl return out, nil } +func (c *sandboxServiceClient) UpdateClaim(ctx context.Context, in *v11.UpdateClaimRequest, opts ...grpc.CallOption) (*v11.UpdateClaimResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(v11.UpdateClaimResponse) + err := c.cc.Invoke(ctx, SandboxService_UpdateClaim_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *sandboxServiceClient) GetClaim(ctx context.Context, in *v11.GetClaimRequest, opts ...grpc.CallOption) (*v11.GetClaimResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v11.GetClaimResponse) @@ -92,6 +105,8 @@ type SandboxServiceServer interface { GetHealthCheck(context.Context, *v1.GetHealthCheckRequest) (*v1.GetHealthCheckResponse, error) // Create claim initiates the creation of the claim. CreateClaim(context.Context, *v11.CreateClaimRequest) (*v11.CreateClaimResponse, error) + // Update claim sets claim details. + UpdateClaim(context.Context, *v11.UpdateClaimRequest) (*v11.UpdateClaimResponse, error) // Retrieve claim details. GetClaim(context.Context, *v11.GetClaimRequest) (*v11.GetClaimResponse, error) mustEmbedUnimplementedSandboxServiceServer() @@ -110,6 +125,9 @@ func (UnimplementedSandboxServiceServer) GetHealthCheck(context.Context, *v1.Get func (UnimplementedSandboxServiceServer) CreateClaim(context.Context, *v11.CreateClaimRequest) (*v11.CreateClaimResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateClaim not implemented") } +func (UnimplementedSandboxServiceServer) UpdateClaim(context.Context, *v11.UpdateClaimRequest) (*v11.UpdateClaimResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateClaim not implemented") +} func (UnimplementedSandboxServiceServer) GetClaim(context.Context, *v11.GetClaimRequest) (*v11.GetClaimResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetClaim not implemented") } @@ -170,6 +188,24 @@ func _SandboxService_CreateClaim_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _SandboxService_UpdateClaim_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(v11.UpdateClaimRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServiceServer).UpdateClaim(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SandboxService_UpdateClaim_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServiceServer).UpdateClaim(ctx, req.(*v11.UpdateClaimRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _SandboxService_GetClaim_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(v11.GetClaimRequest) if err := dec(in); err != nil { @@ -203,6 +239,10 @@ var SandboxService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CreateClaim", Handler: _SandboxService_CreateClaim_Handler, }, + { + MethodName: "UpdateClaim", + Handler: _SandboxService_UpdateClaim_Handler, + }, { MethodName: "GetClaim", Handler: _SandboxService_GetClaim_Handler, diff --git a/common.config.mk b/common.config.mk index 4364586..075b534 100644 --- a/common.config.mk +++ b/common.config.mk @@ -18,9 +18,10 @@ BUILDENV_TAG=v0.0.85 # These variables control the version numbers for parts of the Luther platform # and should be kept up-to-date to leverage the latest platform features. # See release notes: https://docs.luthersystems.com/luther/platform/release-notes -SUBSTRATE_VERSION=v2.205.6 +#SUBSTRATE_VERSION=v2.205.6 +SUBSTRATE_VERSION=v3.0.1-SNAPSHOT.15-1b4f632c SHIROCLIENT_VERSION=${SUBSTRATE_VERSION} -CONNECTORHUB_VERSION=v3.0.1-SNAPSHOT.6-47015079 +CONNECTORHUB_VERSION=${SUBSTRATE_VERSION} SHIROTESTER_VERSION=${SUBSTRATE_VERSION} NETWORK_BUILDER_VERSION=v0.0.2 MARTIN_VERSION=v0.1.0 diff --git a/common.fabric.mk b/common.fabric.mk index da9dbd6..19b8234 100644 --- a/common.fabric.mk +++ b/common.fabric.mk @@ -233,14 +233,17 @@ connectorhub-up: ${START_CONNECTORHUBS} start-ch-%: parts=$(subst ., ,$*) start-ch-%: idx=$(word 1,${parts}) start-ch-%: name=$(word 2,${parts}) -start-ch-%: ccname=$(word 3,${parts}) -start-ch-%: filter=$(word 4,${parts}) -start-ch-%: filter_args=$(if ${filter},-f ${filter}) +start-ch-%: ccname=$(word 3,${parts}) # TODO +start-ch-%: port=$$(( 9091 + ${idx} )) +ifdef EXPOSE_CONNECTORHUB +start-gw-%: port_fw=-p "${port}:8080" +endif start-ch-%: ${CONNECTORHUB_TARGET} build/volume/checkpoint ${DOCKER_RUN} -d --name ${name} \ -v "${CURDIR}:/tmp/fabric:ro" \ -v "$(abspath build/volume/checkpoint):/tmp/checkpoint:rw" \ -w "/tmp/fabric" \ + ${port_fw} \ --network ${FABRIC_DOCKER_NETWORK} \ ${CONNECTORHUB_IMAGE}:${CONNECTORHUB_VERSION} \ start -v \ @@ -277,7 +280,7 @@ couchdb-down: gateway-down fnb-down .PHONY: oracle-down .PHONY: down -down: oracle-down connectorhub-down gateway-down fnb-down clean-chaincodes +down: oracle-down connectorhub-down gateway-down fnb-down clean .PHONY: fnb-down fnb-down: ${NETWORK_BUILDER_TARGET} diff --git a/fabric/connectorhub.yaml b/fabric/connectorhub.yaml index 0f2f037..99963da 100644 --- a/fabric/connectorhub.yaml +++ b/fabric/connectorhub.yaml @@ -4,27 +4,27 @@ org-domain: org1.luther.systems crypto-config-root-path: ./crypto-config peer-name: peer0 peer-endpoint: "peer0.org1.luther.systems:7051" -channel-name: "luther" -chaincode-id: "sandbox" +channel-name: luther +chaincode-id: sandbox connectors: - kind: EMAIL - name: email + name: EMAIL mock: true config: smtp-server: localhost from-address: martin@luther.systems - kind: CAMUNDA_START - name: camunda start + name: CAMUNDA_WORKFLOW mock: true config: gateway-url: localhost - kind: CAMUNDA_INSPECT - name: camunda inspect + name: CAMUNDA_TASKLIST mock: true config: operate-url: localhost - kind: EQUIFAX - name: ID check + name: EQUIFAX_ID_VERIFY mock: true config: aml-url: localhost @@ -34,17 +34,17 @@ connectors: logon-url: localhost eidv-url: localhost - kind: PDFSERV - name: pdf generator + name: PDF_INVOICE mock: true config: connection: localhost - kind: POSTGRES - name: claims DB + name: POSTGRES_CLAIMS_DB mock: true config: connection: psql://localhost:1337 - kind: GOCARDLESS - name: payments + name: GOCARDLESS_PAYMENT mock: true config: base-url: localhost diff --git a/portal/oracle/endpoints.go b/portal/oracle/endpoints.go index 306d590..5d42d44 100644 --- a/portal/oracle/endpoints.go +++ b/portal/oracle/endpoints.go @@ -23,11 +23,16 @@ func (p *portal) GetHealthCheck(ctx context.Context, req *healthcheck.GetHealthC return p.orc.GetHealthCheck(ctx, req) } -// CreateAccount is an example resource creation endpoint. +// CreateClaim is an example resource creation endpoint. func (p *portal) CreateClaim(ctx context.Context, req *pb.CreateClaimRequest) (*pb.CreateClaimResponse, error) { return oracle.Call(p.orc, ctx, "create_claim", req, &pb.CreateClaimResponse{}, p.defaultConfigs(ctx)...) } +// UpdateClaim is an example resource update endpoint. +func (p *portal) UpdateClaim(ctx context.Context, req *pb.UpdateClaimRequest) (*pb.UpdateClaimResponse, error) { + return oracle.Call(p.orc, ctx, "update_claim", req, &pb.UpdateClaimResponse{}, p.defaultConfigs(ctx)...) +} + // GetClaim is an example query endpoint. func (p *portal) GetClaim(ctx context.Context, req *pb.GetClaimRequest) (*pb.GetClaimResponse, error) { return oracle.Call(p.orc, ctx, "get_claim", req, &pb.GetClaimResponse{}) diff --git a/tests/e2e.postman_collection.json b/tests/e2e.postman_collection.json index cb75dba..ab3ac3b 100644 --- a/tests/e2e.postman_collection.json +++ b/tests/e2e.postman_collection.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "6ddf1ef8-2c25-494f-9144-9a21e29d4725", + "_postman_id": "d864fba3-eede-4113-95eb-8b8c73a53322", "name": "MartinTestSuite-AUTOGENERATED", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -8,7 +8,7 @@ { "event": [ { - "id": "6ecb1d9c-e297-4cf8-abf1-2c39b5d33395", + "id": "bf22f8af-2175-4dd4-843e-90490325c5b8", "listen": "test", "script": { "exec": [ @@ -22,7 +22,7 @@ "})();", "" ], - "id": "8cc1b2cf-cdec-4168-834d-3095b4e29dba", + "id": "5df0d659-85a4-46e9-97fa-d41eb0d32d61", "type": "text/javascript" } } @@ -31,7 +31,7 @@ { "event": [ { - "id": "1780d285-2b0b-46af-90cd-d8ce9798ed72", + "id": "9409241e-902e-4219-965f-12ab4834c4bf", "listen": "test", "script": { "exec": [ @@ -51,12 +51,12 @@ "})();", "" ], - "id": "86526c7c-b104-4593-96ca-246c9177edfe", + "id": "27acdf46-88e0-469d-9a89-d916f2db2209", "type": "text/javascript" } } ], - "id": "ff7e6731-fc8e-47b4-a8c1-f843af73c579", + "id": "ec0eb867-578e-408a-83fd-60cf58de6568", "name": "Create claim", "request": { "body": { @@ -66,7 +66,7 @@ }, "header": [ { - "id": "f12b01d3-2be0-4499-b820-225c7be10502", + "id": "30d1be78-bbd2-4e6f-b8a5-385cea79d8d5", "key": "Content-Type", "type": "text", "value": "application/json" @@ -89,7 +89,7 @@ { "event": [ { - "id": "640f3148-9c7e-40ae-a16f-b656508dc64c", + "id": "bd4f2da2-f5ca-4968-b663-5e49bbb911e0", "listen": "test", "script": { "exec": [ @@ -108,17 +108,17 @@ "})();", "" ], - "id": "67f6fe1e-7a81-4ff0-9411-000bb27f388c", + "id": "d4812aba-907a-4713-921e-a17c08a7b7c6", "type": "text/javascript" } } ], - "id": "3f88f7e8-e192-4431-9beb-fe545a6ead2d", + "id": "ae519391-bcaf-470f-aa9f-ceac89f6045a", "name": "Get claim", "request": { "header": [ { - "id": "b6d3a0bf-5089-4f4f-bad8-c2b78bb8e6bf", + "id": "162bdd84-085d-45b3-bcea-aed4c90bbcc2", "key": "Content-Type", "type": "text", "value": "application/json" @@ -138,6 +138,64 @@ "raw": "{{SCHEME}}://{{SERVER}}/v1/claim/{{CLAIM_ID}}" } } + }, + { + "event": [ + { + "id": "9bd90a0b-3b51-4427-848a-c4f3f2cad59d", + "listen": "test", + "script": { + "exec": [ + "// AUTO-GENERATED. DO NOT MODIFY!", + "(function() {", + " \"use strict\";", + " pm.test(\"ok\", () =\u003e {", + " let data = pm.response.json();", + " console.log(data);", + " pm.response.to.have.status(200);", + " pm.expect(data).to.not.have.property(\"exception\");", + " pm.expect(data).to.have.property(\"claim\");", + " pm.expect(data.claim).to.have.property(\"state\");", + " });", + " ", + "})();", + "" + ], + "id": "b6030d82-11d9-4d0e-8f9c-52d78468352e", + "type": "text/javascript" + } + } + ], + "id": "a2b5dd35-0513-4908-b069-3f3ad1571483", + "name": "Update claim", + "request": { + "body": { + "formdata": null, + "mode": "raw", + "raw": "{\n \"claim\": {\n \"claim_id\": \"{{CLAIM_ID}}\"\n }\n}\n" + }, + "header": [ + { + "id": "55aeace3-fd0f-4d99-8ff1-ad43ae2cb68a", + "key": "Content-Type", + "type": "text", + "value": "application/json" + } + ], + "method": "PATCH", + "url": { + "host": [ + "{{SERVER}}" + ], + "path": [ + "v1", + "claim", + "{{CLAIM_ID}}" + ], + "protocol": "{{SCHEME}}", + "raw": "{{SCHEME}}://{{SERVER}}/v1/claim/{{CLAIM_ID}}" + } + } } ], "name": "Sandbox Example: Claim Management" diff --git a/tests/example/claim.martin_collection.yaml b/tests/example/claim.martin_collection.yaml index 1ca5f5e..e6b72e4 100644 --- a/tests/example/claim.martin_collection.yaml +++ b/tests/example/claim.martin_collection.yaml @@ -30,3 +30,21 @@ tests: pm.expect(data).to.have.property("claim"); pm.expect(data.claim).to.have.property("state"); }); + - name: "Update claim" + method: PATCH + path: "v1/claim/{{CLAIM_ID}}" + body: | + { + "claim": { + "claim_id": "{{CLAIM_ID}}" + } + } + test_script: | + pm.test("ok", () => { + let data = pm.response.json(); + console.log(data); + pm.response.to.have.status(200); + pm.expect(data).to.not.have.property("exception"); + pm.expect(data).to.have.property("claim"); + pm.expect(data.claim).to.have.property("state"); + }); From feec79a5ff724dd6c1c02bb207782c91830fb3b7 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Wed, 8 Jan 2025 22:04:41 -0800 Subject: [PATCH 06/23] Fix phylum --- phylum/claim.lisp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/phylum/claim.lisp b/phylum/claim.lisp index 543ee01..62e9237 100644 --- a/phylum/claim.lisp +++ b/phylum/claim.lisp @@ -53,7 +53,7 @@ "CLAIM_STATE_UNSPECIFIED" () "CLAIM_STATE_NEW" (event-desc-record "CLAIMS_PORTAL_UI" "input claim details") ; TODO: fix and replace with equifax - "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" (event-desc-record "CAMUNDA_WORKFLOW" "verify customer identity") + "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" (event-desc-record "EQUIFAX_ID_VERIFY" "verify customer identity") "CLAIM_STATE_LOECLAIM_ID_VERIFIED" (event-desc-record "CAMUNDA_WORKFLOW" "collect policy details") "CLAIM_STATE_OOECLAIM_REVIEWED" (event-desc-record "POSTGRES_CLAIMS_DB" "verify policy") "CLAIM_STATE_OOECLAIM_VALIDATED" (event-desc-record "PDF_INVOICE" "generate invoice") @@ -85,7 +85,7 @@ "sys" (get desc "sys") "eng" (get desc "eng") "req" event-req)]) - (append! events event))] + (when event-req (append! events event)))] ;; next-state upates `claim` to the next state. [next-state () @@ -115,13 +115,19 @@ (format-string "unhandled response error: {}" resp-err))) (cc:infof (assoc resp-body "state" state) "handle") (cond - ((equal? state "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS") -; TODO: -; (add-event (mk-equifax-req (sorted-map -; "account_number" "a1" -; "forename" "Jimmy" -; "surname" "McGill")))) - (add-event (mk-camunda-start-req "a1" (sorted-map "x" "fnord")))) ; DELETE + ((equal? state "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS") + (add-event (mk-equifax-req (sorted-map + "account_number" "03299391" + "account_sort_code" "090127" + "dob" "1970-07-04" + "surname" "Harrison" + "forename" "Emanuel" + "full_address" "78 Cromwell Road" + "address_number" "78" + "address_street1" "Cromwell Road" + "address_postcode" "CB6 2AG" + "address_post_town" "Ely" + "nationality" "GB")))) ((equal? state "CLAIM_STATE_LOECLAIM_ID_VERIFIED") (add-event (mk-camunda-start-req "a1" (sorted-map "x" "fnord")))) From f852d101e24f13f050480e8f55b8fc29736a1036 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Wed, 8 Jan 2025 22:08:33 -0800 Subject: [PATCH 07/23] Move connectorhub to substrate --- connectorhub/.gitignore | 1 - connectorhub/internal/chaininfo/chaininfo.go | 1102 ----------------- connectorhub/internal/events/events.go | 744 ----------- connectorhub/internal/protoutil/README.md | 5 - connectorhub/internal/protoutil/blockutils.go | 195 --- .../internal/protoutil/commonutils.go | 228 ---- .../internal/protoutil/configtxutils.go | 17 - connectorhub/internal/protoutil/proputils.go | 406 ------ connectorhub/internal/protoutil/signeddata.go | 116 -- connectorhub/internal/protoutil/txutils.go | 469 ------- .../internal/protoutil/unmarshalers.go | 286 ----- connectorhub/internal/shirorpc/envelope.go | 18 - connectorhub/internal/shirorpc/shirorpc.go | 255 ---- connectorhub/main.go | 251 ---- 14 files changed, 4093 deletions(-) delete mode 100644 connectorhub/.gitignore delete mode 100644 connectorhub/internal/chaininfo/chaininfo.go delete mode 100644 connectorhub/internal/events/events.go delete mode 100644 connectorhub/internal/protoutil/README.md delete mode 100644 connectorhub/internal/protoutil/blockutils.go delete mode 100644 connectorhub/internal/protoutil/commonutils.go delete mode 100644 connectorhub/internal/protoutil/configtxutils.go delete mode 100644 connectorhub/internal/protoutil/proputils.go delete mode 100644 connectorhub/internal/protoutil/signeddata.go delete mode 100644 connectorhub/internal/protoutil/txutils.go delete mode 100644 connectorhub/internal/protoutil/unmarshalers.go delete mode 100644 connectorhub/internal/shirorpc/envelope.go delete mode 100644 connectorhub/internal/shirorpc/shirorpc.go delete mode 100644 connectorhub/main.go diff --git a/connectorhub/.gitignore b/connectorhub/.gitignore deleted file mode 100644 index 00f9299..0000000 --- a/connectorhub/.gitignore +++ /dev/null @@ -1 +0,0 @@ -connectorhub diff --git a/connectorhub/internal/chaininfo/chaininfo.go b/connectorhub/internal/chaininfo/chaininfo.go deleted file mode 100644 index 1b86eae..0000000 --- a/connectorhub/internal/chaininfo/chaininfo.go +++ /dev/null @@ -1,1102 +0,0 @@ -// Package chaininfo is a library for processing fabric protobufs, and Luther -// specific data structures maintained on-chain. -package chaininfo - -import ( - "encoding/hex" - "encoding/json" - "fmt" - "io" - - cb "github.com/hyperledger/fabric-protos-go-apiv2/common" - rwset "github.com/hyperledger/fabric-protos-go-apiv2/ledger/rwset" - fabricpeer "github.com/hyperledger/fabric-protos-go-apiv2/peer" - "github.com/luthersystems/sandbox/connectorhub/internal/protoutil" - "github.com/olekukonko/tablewriter" - "github.com/sirupsen/logrus" - "google.golang.org/protobuf/proto" -) - -const ( - LutherEventKey = "luther" - LutherEventName = "txEventName" - LutherEventRequestID = "txRequestID" - LutherEventTxTimestamp = "txTimestamp" - LutherConnectorEventPrefix = "$connector_events:" - LutherConnectorEventContextPrefix = "$cr:" - LutherConnectorEventContextPDC = "private" - MaxConnectorEventsPerTx = 10 -) - -var skipLifecycleRWSet = true - -type TransactionID string - -type CommonBlock struct { - cb.Block -} - -func (s *CommonBlock) Write(w io.Writer) { - if s == nil || w == nil { - return - } - if blk, err := NewBlock(&s.Block); err != nil { - logrus.WithError(err).Error("new block") - } else { - blk.Write(w) - } -} - -// Block is a container for the transaction information. -type Block struct { - hash string - transactions []*Transaction - txValidations []TxValidation - blockNum uint64 - size int -} - -func (s *Block) GetValidation(txNum int) *TxValidation { - if s == nil || txNum < 0 || txNum >= len(s.txValidations) { - missing := TxValidation(-1) - return &missing - } - return &s.txValidations[txNum] -} - -// formatWithTrailingDots truncates the input string to the specified length -// and adds trailing dots if the original string was longer. -func formatWithTrailingDots(input string, length int) string { - if len(input) > length { - return fmt.Sprintf("%.*s...", length, input) - } - return input -} - -func (b *Block) Write(w io.Writer) { - if w == nil { - return - } - if b == nil { - fmt.Fprint(w, "empty block") - return - } - table := tablewriter.NewWriter(w) - table.SetHeader([]string{"Block Num", "Hash", "Num Txs", "Size (bytes)"}) - table.SetCaption(true, "Block Summary") - table.Append([]string{ - fmt.Sprintf("%d", b.blockNum), - formatWithTrailingDots(b.hash, 6), - fmt.Sprintf("%d", len(b.transactions)), - fmt.Sprintf("%d", b.size), - }) - table.Render() // Send output - fmt.Fprintln(w) - for i := range b.transactions { - b.WriteTx(i, w) - } -} - -func prettyWriteVal(b []byte) string { - var jsonObj interface{} - - // Try to unmarshal the bytes into a generic JSON object - if err := json.Unmarshal(b, &jsonObj); err == nil { - // If unmarshaling was successful, return the first 100 characters of JSON representation - jsonStr, _ := json.MarshalIndent(jsonObj, "", " ") - if len(jsonStr) > 100 { - return string(jsonStr[:100]) + "..." - } - return string(jsonStr) - } - - return "non-JSON" -} - -func (b *Block) WriteTx(i int, w io.Writer) { - if w == nil { - return - } - if i < 0 || i >= len(b.transactions) { - return - } - t := b.transactions[i] - table := tablewriter.NewWriter(w) - table.SetHeader([]string{"ID", "Validation", "Chaincode ID", "Luther Event", "Event Size (bytes)", "Size (bytes)"}) - table.SetCaption(true, fmt.Sprintf("Transactions (block=[%d])", b.blockNum)) - details := t.GetDetails() - event := details.GetEvent() - table.Append([]string{ - formatWithTrailingDots(string(t.GetID()), 6), - b.GetValidation(i).GetReason(), - event.GetChaincodeId(), - event.String(), - fmt.Sprintf("%d", len(event.GetPayload())), - fmt.Sprintf("%d", t.GetSize()), - }) - table.Render() - fmt.Fprintln(w) - - for _, nsRWSet := range details.GetNamespaceReadWriteSet() { - if nsRWSet.GetNamespace() == "_lifecycle" && skipLifecycleRWSet { - continue - } - rwSet := nsRWSet.GetReadWriteSet() - - table = tablewriter.NewWriter(w) - table.SetCaption(true, fmt.Sprintf("Read Set (namespace=[%s], txid=[%s])", nsRWSet.GetNamespace(), t.GetID())) - table.SetHeader([]string{"Key", "Version"}) - for _, record := range rwSet.GetReadSet() { - table.Append([]string{ - record.GetKey(), - record.GetVersion().String(), - }) - } - table.Render() - fmt.Fprintln(w) - - table = tablewriter.NewWriter(w) - table.SetCaption(true, fmt.Sprintf("Write Set [%s]", nsRWSet.GetNamespace())) - table.SetHeader([]string{"Key", "Val (size)", "Val"}) - for _, record := range rwSet.GetWriteSet() { - table.Append([]string{ - record.GetKey(), - fmt.Sprintf("%d", len(record.GetVal())), - prettyWriteVal(record.GetVal()), - }) - } - - table.Render() - fmt.Fprintln(w) - } -} - -// GetHash returns block hash. -func (b *Block) GetHash() string { - if b == nil { - return "" - } - return b.hash -} - -// GetBlockNum returns the block number. -func (b *Block) GetBlockNum() uint64 { - if b == nil { - return 0 - } - return b.blockNum -} - -// GetTransactions returns the transactions in the block. -func (b *Block) GetTransactions() []*Transaction { - if b == nil { - return nil - } - txsCopy := make([]*Transaction, len(b.transactions)) - copy(txsCopy, b.transactions) - return txsCopy -} - -// Transaction is a container for the transaction information exported -// by QueryBlock. -type Transaction struct { - details *TransactionDetails - id TransactionID - num int - size int -} - -func (t *Transaction) GetNumber() int { - if t == nil { - return -1 - } - return t.num -} - -// ID is the transaction ID. -func (t *Transaction) GetID() TransactionID { - if t == nil || t.id == "" { - return TransactionID("n/a") - } - return t.id -} - -func (t *Transaction) GetSize() int { - if t == nil { - return 0 - } - return t.size -} - -func (t *Transaction) GetDetails() *TransactionDetails { - if t == nil { - return nil - } - return t.details -} - -type TxValidation int32 - -func (s *TxValidation) GetReason() string { - if s == nil || int32(*s) < 0 { - return "n/a" - } - if reason, ok := fabricpeer.TxValidationCode_name[int32(*s)]; !ok { - return fmt.Sprintf("invalid code [%d]", s) - } else { - return reason - } -} - -func (s *TxValidation) Valid() bool { - return s.GetReason() == "VALID" -} - -func NewBlock(blk *cb.Block) (*Block, error) { - if blk == nil { - return nil, fmt.Errorf("nil") - } - blockNum := blk.GetHeader().GetNumber() - transactionsIn := blk.GetData().GetData() - filterIn := blk.GetMetadata().Metadata[cb.BlockMetadataIndex_TRANSACTIONS_FILTER] - blockHash := blk.GetHeader().GetDataHash() - if blockHash == nil { - return nil, fmt.Errorf("no data hash") - } - blockHashHex := hex.EncodeToString(blockHash) - - txs := make([]*Transaction, 0, len(blk.GetData().GetData())) - - validations := make([]TxValidation, 0, len(filterIn)) - - retBlock := &Block{ - hash: blockHashHex, - blockNum: blockNum, - size: proto.Size(blk), - } - - for i, buf := range blk.GetData().GetData() { - if len(transactionsIn) == len(filterIn) { - validations = append(validations, TxValidation(int32(filterIn[i]))) - } - - if tx, err := NewTransaction(buf); err != nil { - return nil, fmt.Errorf("new tx: %w", err) - } else { - txs = append(txs, tx) - } - } - - retBlock.txValidations = validations - retBlock.transactions = txs - - return retBlock, nil -} - -type lutherEvent map[string]string - -func (s *lutherEvent) GetName() string { - if s == nil { - return "" - } - value, exists := (*s)[LutherEventName] - if !exists { - return "" - } - return value -} - -func (s *lutherEvent) GetRequestID() string { - if s == nil { - return "" - } - value, exists := (*s)[LutherEventRequestID] - if !exists { - return "" - } - return value -} - -func (s *lutherEvent) GetTimestamp() string { - if s == nil { - return "" - } - value, exists := (*s)[LutherEventTxTimestamp] - if !exists { - return "" - } - return value -} - -type Event struct { - *fabricpeer.ChaincodeEvent -} - -func (s *Event) GetPayload() []byte { - if s == nil { - return nil - } - return s.Payload -} - -func (s *Event) GetChaincodeId() string { - if s == nil { - return "" - } - return s.ChaincodeId -} - -func (s *Event) IsLutherEvent() bool { - if s == nil { - return false - } - return s.GetEventName() == LutherEventKey -} - -func (s *Event) String() string { - if !s.IsLutherEvent() { - return "" - } - if lutherEvent, err := s.ToLutherEvent(); err != nil { - return "" - } else { - return fmt.Sprintf("%s@%s [%s: %s]", lutherEvent.GetName(), lutherEvent.GetTimestamp(), lutherEvent.GetRequestID(), lutherEvent.getConnectorEventHeaders()) - } -} - -func (s *Event) ToLutherEvent() (*lutherEvent, error) { - if !s.IsLutherEvent() { - return nil, fmt.Errorf("non-luther event") - } - if len(s.GetPayload()) == 0 { - return nil, fmt.Errorf("missing luther event payload") - } - lEvent := &lutherEvent{} - if err := json.Unmarshal(s.GetPayload(), lEvent); err != nil { - return nil, err - } - return lEvent, nil -} - -type Version struct { - BlockNum uint64 - TxNum uint64 -} - -func (s *Version) String() string { - return fmt.Sprintf("(%d:%d)", s.BlockNum, s.TxNum) -} - -type RSetRecord struct { - Version *Version - Key string -} - -func (s *RSetRecord) GetKey() string { - if s == nil { - return "" - } - return s.Key -} - -func (s *RSetRecord) GetVersion() *Version { - if s == nil { - return nil - } - return s.Version -} - -type PrivRSetRecord struct { - Version *Version - KeyHash []byte -} - -func (s *PrivRSetRecord) GetKeyHash() []byte { - if s == nil { - return nil - } - return s.KeyHash -} - -func (s *PrivRSetRecord) GetVersion() *Version { - if s == nil { - return nil - } - return s.Version -} - -type WSetRecord struct { - Key string - Val []byte -} - -func (s *WSetRecord) GetKey() string { - if s == nil { - return "" - } - return s.Key -} - -func (s *WSetRecord) GetVal() []byte { - if s == nil { - return nil - } - return s.Val -} - -type PrivWSetRecord struct { - KeyHash []byte - ValHash []byte -} - -func (s *PrivWSetRecord) GetKeyHash() []byte { - if s == nil { - return nil - } - return s.KeyHash -} - -func (s *PrivWSetRecord) GetVaHashl() []byte { - if s == nil { - return nil - } - return s.ValHash -} - -type PvtRWSet struct { - CollectionName string - HashedReadSet []*PrivRSetRecord - HashedWriteSet []*PrivWSetRecord -} - -func (s *PvtRWSet) GetCollectionName() string { - if s == nil { - return "" - } - return s.CollectionName -} - -func (s *PvtRWSet) GetHashedWriteSet() []*PrivWSetRecord { - if s == nil { - return nil - } - return s.HashedWriteSet -} - -func (s *PvtRWSet) GetHashedReadSet() []*PrivRSetRecord { - if s == nil { - return nil - } - return s.HashedReadSet -} - -type RWSet struct { - ReadSet []*RSetRecord - WriteSet []*WSetRecord -} - -func (s *RWSet) GetWriteSet() []*WSetRecord { - if s == nil { - return nil - } - return s.WriteSet -} - -func (s *RWSet) GetReadSet() []*RSetRecord { - if s == nil { - return nil - } - return s.ReadSet -} - -type NSRWSet struct { - RWSet *RWSet - Namespace string -} - -func (s *NSRWSet) GetNamespace() string { - if s == nil { - return "" - } - return s.Namespace -} - -func (s *NSRWSet) GetReadWriteSet() *RWSet { - if s == nil { - return nil - } - return s.RWSet -} - -func getRWSet(rwSetBytes []byte) (*RWSet, error) { - rwSet, err := protoutil.UnmarshalKVRWSet(rwSetBytes) - if err != nil { - return nil, err - } - rwSetExtracted := &RWSet{ - ReadSet: []*RSetRecord{}, - WriteSet: []*WSetRecord{}, - } - for _, read := range rwSet.GetReads() { - rwSetExtracted.ReadSet = append(rwSetExtracted.GetReadSet(), &RSetRecord{ - Key: read.GetKey(), - Version: &Version{ - BlockNum: read.GetVersion().GetBlockNum(), - TxNum: read.GetVersion().GetTxNum(), - }, - }) - } - for _, write := range rwSet.GetWrites() { - rwSetExtracted.WriteSet = append(rwSetExtracted.GetWriteSet(), &WSetRecord{ - Key: write.GetKey(), - Val: write.GetValue(), - }) - } - - return rwSetExtracted, nil -} - -func getNSRWSets(results []byte) ([]*NSRWSet, error) { - if len(results) == 0 { - return nil, nil - } - txRwSet, err := protoutil.UnmarshalTxReadWriteSet(results) - if err != nil { - return nil, fmt.Errorf("unmarshal TxReadWriteSet: %w", err) - } - - nsRWSets := make([]*NSRWSet, 0, len(txRwSet.GetNsRwset())) - - for _, txrw := range txRwSet.GetNsRwset() { - rwSetExtracted, err := getRWSet(txrw.GetRwset()) - if err != nil { - return nil, fmt.Errorf("getRWSet: %w", err) - } - - nsRWSets = append(nsRWSets, &NSRWSet{ - Namespace: txrw.GetNamespace(), - RWSet: rwSetExtracted, - }) - } - - return nsRWSets, nil -} - -func getAction(txBytes []byte) (*fabricpeer.ChaincodeAction, error) { - if len(txBytes) == 0 { - return nil, nil - } - tx, err := protoutil.UnmarshalTransaction(txBytes) - if err != nil { - return nil, err - } - - actions := tx.GetActions() - if len(actions) == 0 { - return nil, nil - } - - action := actions[0] - - actionPayloadBytes := action.GetPayload() - if len(actionPayloadBytes) == 0 { - return nil, nil - } - - chaincodeActionPayload, err := protoutil.UnmarshalChaincodeActionPayload(actionPayloadBytes) - if err != nil { - return nil, err - } - - proposalResponsePayloadBytes := chaincodeActionPayload.GetAction().GetProposalResponsePayload() - if len(proposalResponsePayloadBytes) == 0 { - return nil, nil - } - - proposalResponse, err := protoutil.UnmarshalProposalResponsePayload(proposalResponsePayloadBytes) - if err != nil { - return nil, fmt.Errorf("invalid proposal response: %w", err) - } - - chaincodeAction, err := protoutil.UnmarshalChaincodeAction(proposalResponse.GetExtension()) - if err != nil { - return nil, err - } - - return chaincodeAction, nil -} - -func getEvent(eventBytes []byte) (*Event, error) { - if len(eventBytes) == 0 { - return nil, nil - } - event, err := protoutil.UnmarshalChaincodeEvents(eventBytes) - if err != nil { - return nil, err - } - - return &Event{event}, nil -} - -type TransactionDetails struct { - event *Event - nsRWSets []*NSRWSet -} - -func (s *TransactionDetails) GetEvent() *Event { - if s == nil { - return nil - } - return s.event -} - -func (s *TransactionDetails) GetNamespaceReadWriteSet() []*NSRWSet { - if s == nil { - return nil - } - return s.nsRWSets -} - -func (s *TransactionDetails) GetReadSetSize() int64 { - var size int64 - for _, rwset := range s.GetNamespaceReadWriteSet() { - for _, rset := range rwset.GetReadWriteSet().GetReadSet() { - size += int64(len(rset.GetKey())) - } - } - return size -} - -func (s *TransactionDetails) GetWriteSetSize() int64 { - var size int64 - for _, rwset := range s.GetNamespaceReadWriteSet() { - for _, wset := range rwset.GetReadWriteSet().GetWriteSet() { - size += int64(len(wset.GetKey())) + int64(len(wset.GetVal())) - } - } - return size -} - -func (s *TransactionDetails) GetWriteSetValue(ns string, key string) ([]byte, error) { - if ns == "" { - return nil, fmt.Errorf("missing namespace") - } - if key == "" { - return nil, fmt.Errorf("missing key") - } - - for _, rwset := range s.GetNamespaceReadWriteSet() { - if rwset.GetNamespace() != ns { - continue - } - for _, wset := range rwset.GetReadWriteSet().GetWriteSet() { - if wset.GetKey() == key { - return wset.GetVal(), nil - } - } - } - - return nil, fmt.Errorf("key not found [%s]", key) -} - -// GetPvtWriteSetValue looks up the value for a key stored in a PDC write set. -func GetPvtWriteSetValue(ns string, pdc string, key string, pvtData *rwset.TxPvtReadWriteSet) ([]byte, error) { - if ns == "" { - return nil, fmt.Errorf("missing namespace") - } - if key == "" { - return nil, fmt.Errorf("missing key") - } - if pdc == "" { - return nil, fmt.Errorf("missing PDC") - } - - for _, pvtRwSet := range pvtData.GetNsPvtRwset() { - if pvtRwSet.GetNamespace() != ns { - continue - } - for _, collection := range pvtRwSet.GetCollectionPvtRwset() { - if collection.GetCollectionName() != pdc { - continue - } - rwSet, err := getRWSet(collection.GetRwset()) - if err != nil { - return nil, err - } - for _, wset := range rwSet.GetWriteSet() { - if wset.GetKey() == key { - return wset.GetVal(), nil - } - } - } - } - - return nil, fmt.Errorf("key not found in private collection [%s:%s]", pdc, key) -} - -// NewTransactionDetails converts proto bytes for a tx into a helper struct. -func NewTransactionDetails(txBytes []byte) (*TransactionDetails, error) { - chaincodeAction, err := getAction(txBytes) - if err != nil { - return nil, fmt.Errorf("get action: %w", err) - } - - details := &TransactionDetails{} - - if event, err := getEvent(chaincodeAction.GetEvents()); err != nil { - return nil, fmt.Errorf("get event: %w", err) - } else { - details.event = event - } - - if nsRWSets, err := getNSRWSets(chaincodeAction.GetResults()); err != nil { - return nil, fmt.Errorf("get NSRWSets: %w", err) - } else { - details.nsRWSets = nsRWSets - } - - return details, nil -} - -func getPayload(envelopeBytes []byte) (*cb.Payload, error) { - if len(envelopeBytes) == 0 { - return nil, fmt.Errorf("empty envelope") - } - - envelope, err := protoutil.UnmarshalEnvelope(envelopeBytes) - if err != nil { - return nil, err - } - - payload, err := protoutil.UnmarshalPayload(envelope.GetPayload()) - if err != nil { - return nil, err - } - - return payload, nil -} - -func getTransactionID(chanHeaderBytes []byte) (TransactionID, error) { - channelheader, err := protoutil.UnmarshalChannelHeader(chanHeaderBytes) - if err != nil { - return "", err - } else { - return TransactionID(channelheader.GetTxId()), nil - } -} - -// NewTransaction creates an immutable transaction object. -func NewTransaction(envelopeBytes []byte) (*Transaction, error) { - retTx := &Transaction{ - size: len(envelopeBytes), - } - - payload, err := getPayload(envelopeBytes) - if err != nil { - return nil, fmt.Errorf("get payload: %w", err) - } - - txID, err := getTransactionID(payload.GetHeader().GetChannelHeader()) - if err != nil { - return nil, fmt.Errorf("get transaction ID: %w", err) - } - - retTx.id = txID - - if details, err := NewTransactionDetails(payload.GetData()); err != nil { - return nil, fmt.Errorf("transaction details: %w", err) - } else { - retTx.details = details - } - - return retTx, nil -} - -// ConnectorEventHeader captures metadata about a request. -type ConnectorEventHeader struct { - RequestID string `json:"rid"` -} - -func (s *ConnectorEventHeader) String() string { - if s == nil { - return "" - } - return fmt.Sprintf("{rid: %s}", s.RequestID) -} - -type connectorEventHeaders []ConnectorEventHeader - -func join(elems []string, sep string) string { - switch len(elems) { - case 0: - return "" - case 1: - return elems[0] - } - n := len(sep) * (len(elems) - 1) - for i := 0; i < len(elems); i++ { - n += len(elems[i]) - } - - b := make([]byte, n) - bp := copy(b, elems[0]) - for _, s := range elems[1:] { - bp += copy(b[bp:], sep) - bp += copy(b[bp:], s) - } - return string(b) -} - -func (s connectorEventHeaders) String() string { // Changed receiver to non-pointer type - events := make([]string, len(s)) - for i, event := range s { - events[i] = event.String() - } - return fmt.Sprintf("[%s]", join(events, ", ")) -} - -func (s *lutherEvent) getConnectorEventHeaders() connectorEventHeaders { - if s == nil { - return nil - } - - var events []ConnectorEventHeader - - for i := 0; i <= MaxConnectorEventsPerTx; i++ { - eventKey := fmt.Sprintf("%s%d", LutherConnectorEventPrefix, i) - value, exists := (*s)[eventKey] - if !exists { - return events - } - - event := ConnectorEventHeader{} - if err := json.Unmarshal([]byte(value), &event); err != nil { - logrus.WithError(err).Error("invalid event format, ignoring...") - } else { - events = append(events, event) - } - } - - logrus.Warn("too many events") - - return events -} - -// CallbackState wraps a context. -type CallbackState struct { - Context ConnectorEventContext `json:"ctx"` -} - -// ConnetorEventContext stores the context of the request. -type ConnectorEventContext struct { - ObjectID string `json:"oid"` - RequestMSPID string `json:"msp"` - RequestKey string `json:"key"` - RequestPDC string `json:"pdc"` - RequestSystem string `json:"sys"` - RequestEnglish string `json:"eng"` -} - -func (s *ConnectorEventContext) String() string { - if s == nil { - return "nil" - } - return fmt.Sprintf("{ oid: %s, msp: %s, key: %s, pdc: %s", s.ObjectID, s.RequestMSPID, s.RequestKey, s.RequestPDC) -} - -// Valid determines if the event contect has the minimum set of fields -// to proceed with processing. -func (s *ConnectorEventContext) Valid() error { - if s == nil { - return fmt.Errorf("nil context") - } - if s.RequestKey == "" { - return fmt.Errorf("missing request key") - } - return nil -} - -// Event models an on-chain event. -type ConnectorEvent struct { - unmarshalError error // TODO: not currently implemented - context ConnectorEventContext - header ConnectorEventHeader - requestBody json.RawMessage -} - -// UnmarshalError returns an error encountered while extracting the particular -// connector event. This allows the caller to handle errors at the individual -// request level. -func (s *ConnectorEvent) UnmarshalError() error { - if s == nil { - return fmt.Errorf("nil event") - } - return s.unmarshalError -} - -// RequestBody returns a copy of the request. -func (s *ConnectorEvent) RequestBody() json.RawMessage { - if s == nil { - return nil - } - reqCopy := make([]byte, len(s.requestBody)) - copy(reqCopy, s.requestBody) - return reqCopy -} - -// RequestID returns the ID of the request within the connector event. -func (s *ConnectorEvent) RequestID() string { - if s == nil { - return "" - } - return s.header.RequestID -} - -// RequestMSPID the ID of the MSP meant to process this event. -func (s *ConnectorEvent) RequestMSPID() string { - if s == nil { - return "" - } - return s.context.RequestMSPID -} - -// RequestSystem is the system name for the request. -func (s *ConnectorEvent) RequestSystem() string { - if s == nil { - return "" - } - return s.context.RequestSystem -} - -// RequestEnglish is the english description for the request. -func (s *ConnectorEvent) RequestEnglish() string { - if s == nil { - return "" - } - return s.context.RequestEnglish -} - -// ObjectID is the ID of the object that triggered the request. -func (s *ConnectorEvent) ObjectID() string { - if s == nil { - return "" - } - return s.context.ObjectID -} - -func getConnectorEventContext(ns string, reqID string, pvtData *rwset.TxPvtReadWriteSet) (*ConnectorEventContext, error) { - callbackState := &CallbackState{} - if b, err := GetPvtWriteSetValue(ns, LutherConnectorEventContextPDC, fmt.Sprintf("%s%s", LutherConnectorEventContextPrefix, reqID), pvtData); err != nil { - return nil, fmt.Errorf("missing event context: %w", err) - } else if err := json.Unmarshal(b, callbackState); err != nil { - return nil, fmt.Errorf("unmarshal context: %w", err) - } else { - return &callbackState.Context, nil - } -} - -func getConnectorEvent(ns string, header ConnectorEventHeader, tx *Transaction, pvtData *rwset.TxPvtReadWriteSet) (*ConnectorEvent, error) { - reqID := header.RequestID - eventCtx, err := getConnectorEventContext(ns, reqID, pvtData) - if err != nil { - return nil, fmt.Errorf("connector event context: %w", err) - } - - logrus.WithFields(logrus.Fields{ - "req_id": reqID, - "ns": ns, - }).Debugf("event context: [%s]", eventCtx) - - if err := eventCtx.Valid(); err != nil { - return nil, fmt.Errorf("invalid event context: %w", err) - } - - event := &ConnectorEvent{ - header: header, - context: *eventCtx, - } - - var req []byte - if eventCtx.RequestPDC != "" { - req, err = GetPvtWriteSetValue(ns, eventCtx.RequestPDC, eventCtx.RequestKey, pvtData) - } else { - req, err = tx.GetDetails().GetWriteSetValue(ns, eventCtx.RequestKey) - } - if err != nil { - return nil, fmt.Errorf("request body: %w", err) - } - event.requestBody = req - return event, nil -} - -// ConnectorEventUnmarshaler unmarshals connector events within a block with -// private data. -type ConnectorEventUnmarshaler struct { - // CCIDFilter selects which chaincode to retrieve events from. - CCIDFilter string - MSPFilter string -} - -// Unmarshal returns connector events. -func (s *ConnectorEventUnmarshaler) Unmarshal(blkPvt *fabricpeer.BlockAndPrivateData) ([]*ConnectorEvent, error) { - if blkPvt == nil { - return nil, nil - } - block, err := NewBlock(blkPvt.GetBlock()) - if err != nil { - return nil, fmt.Errorf("new block: %w", err) - } - - events := make([]*ConnectorEvent, 0, len(block.GetTransactions())) - for txSeqNo, tx := range block.GetTransactions() { - if !block.GetValidation(txSeqNo).Valid() { - continue - } - chainEvent := tx.GetDetails().GetEvent() - if !chainEvent.IsLutherEvent() { - continue - } - - ccID := chainEvent.GetChaincodeId() - if ccID == "" { - return nil, fmt.Errorf("missing chaincode ID") - } - if s.CCIDFilter != "" && ccID != s.CCIDFilter { - logrus.Debugf("ignoring chaincode event from ccid: [%s], want: [%s]", ccID, s.CCIDFilter) - continue - } - - lutherEvent, err := chainEvent.ToLutherEvent() - if err != nil { - return nil, fmt.Errorf("invalid luther event: %w", err) - } - - if len(lutherEvent.getConnectorEventHeaders()) == 0 { - logrus.Debugf("ignoring chaincode event, no connector events") - continue - } - - var txPvtData *rwset.TxPvtReadWriteSet - hasTxPvtData := false - if len(blkPvt.GetPrivateDataMap()) > 0 { - txPvtData, hasTxPvtData = blkPvt.GetPrivateDataMap()[uint64(txSeqNo)] - } - if !hasTxPvtData { - return nil, fmt.Errorf("connector event missing private data") - } - - for _, header := range lutherEvent.getConnectorEventHeaders() { - event, err := getConnectorEvent(ccID, header, tx, txPvtData) - if err != nil { - return nil, fmt.Errorf("connector event: %w", err) - } - if s.MSPFilter != "" && event.context.RequestMSPID != "" && s.MSPFilter != event.context.RequestMSPID { - logrus.Debugf("ignoring chaincode event for msp: [%s], want: [%s]", event.context.RequestMSPID, s.MSPFilter) - continue - } - events = append(events, event) - } - } - - return events, nil -} diff --git a/connectorhub/internal/events/events.go b/connectorhub/internal/events/events.go deleted file mode 100644 index e30795e..0000000 --- a/connectorhub/internal/events/events.go +++ /dev/null @@ -1,744 +0,0 @@ -// Package events is a library for retrieving events issued by Luther. -package events - -import ( - "context" - "crypto/sha256" - "crypto/tls" - "crypto/x509" - "encoding/json" - "encoding/pem" - "errors" - "fmt" - "io" - "os" - "path" - "sync" - - "github.com/hyperledger/fabric-gateway/pkg/client" - "github.com/hyperledger/fabric-gateway/pkg/identity" - "github.com/luthersystems/sandbox/connectorhub/internal/chaininfo" - "github.com/luthersystems/sandbox/connectorhub/internal/shirorpc" - "github.com/sirupsen/logrus" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" -) - -// GatewayConfig configures a fabric gateway. -type GatewayConfig struct { - MSPID string - UserID string - OrgDomain string - CryptoConfigRootPath string - PeerName string - PeerEndpoint string - ChannelName string - ChaincodeID string -} - -func (c *GatewayConfig) valid() error { - if c == nil { - return fmt.Errorf("missing config") - } - if c.MSPID == "" { - return fmt.Errorf("missing MSP ID") - } - if c.UserID == "" { - return fmt.Errorf("missing User ID") - } - if c.OrgDomain == "" { - return fmt.Errorf("missing org domain") - } - if c.CryptoConfigRootPath == "" { - return fmt.Errorf("missing crypto config root path") - } - if ok, err := isDirReadable(c.CryptoConfigRootPath); err != nil { - return fmt.Errorf("fail to check dir [%s] is readable: %w", c.CryptoConfigRootPath, err) - } else if !ok { - return fmt.Errorf("dir [%s] not readable", c.CryptoConfigRootPath) - } - if c.PeerName == "" { - return fmt.Errorf("missing peer name") - } - if c.PeerEndpoint == "" { - return fmt.Errorf("missing peer endpoint") - } - if c.ChannelName == "" { - return fmt.Errorf("missing channel name") - } - if c.ChaincodeID == "" { - return fmt.Errorf("missing chaincode ID") - } - - return nil -} - -func isDirReadable(dir string) (bool, error) { - info, err := os.Stat(dir) - if os.IsNotExist(err) { - return false, fmt.Errorf("directory does not exist") - } - if err != nil { - return false, fmt.Errorf("error stating directory: %v", err) - } - - if !info.IsDir() { - return false, fmt.Errorf("path is not a directory") - } - - file, err := os.Open(dir) - if err != nil { - return false, fmt.Errorf("directory is not readable: %v", err) - } - defer file.Close() - - _, err = file.Readdir(1) - if err != nil && err != io.EOF { - return false, fmt.Errorf("directory is not readable: %v", err) - } - - return true, nil -} - -func (c *GatewayConfig) cryptoPath() string { - return fmt.Sprintf("%s/peerOrganizations/%s", c.CryptoConfigRootPath, c.OrgDomain) -} - -func (c *GatewayConfig) mspPath() string { - return fmt.Sprintf("%s/users/%s@%s/msp", c.cryptoPath(), c.UserID, c.OrgDomain) -} - -func (c *GatewayConfig) certPath() string { - return fmt.Sprintf("%s/signcerts", c.mspPath()) -} - -func (c *GatewayConfig) keyPath() string { - return fmt.Sprintf("%s/keystore", c.mspPath()) -} - -func (c *GatewayConfig) clientTLSPath() string { - return fmt.Sprintf("%s/users/%s@%s/tls", c.cryptoPath(), c.UserID, c.OrgDomain) -} - -func (c *GatewayConfig) clientTLSKeyPath() string { - return fmt.Sprintf("%s/client.key", c.clientTLSPath()) -} - -func (c *GatewayConfig) clientTLSCertPath() string { - return fmt.Sprintf("%s/client.crt", c.clientTLSPath()) -} - -func (c *GatewayConfig) clientTLSCACertPath() string { - return fmt.Sprintf("%s/ca.crt", c.clientTLSPath()) -} - -func (c *GatewayConfig) gatewayPeer() string { - return fmt.Sprintf("%s.%s", c.PeerName, c.OrgDomain) -} - -func (c *GatewayConfig) serverTLSCertPath() string { - return fmt.Sprintf("%s/peers/%s/tls/ca.crt", c.cryptoPath(), c.gatewayPeer()) -} - -func (c *GatewayConfig) newGrpcConnection() (*grpc.ClientConn, error) { - certificatePEM, err := os.ReadFile(c.serverTLSCertPath()) - if err != nil { - return nil, fmt.Errorf("failed to read server TLS certifcate file: %w", err) - } - - clientCertPEM, err := os.ReadFile(c.clientTLSCertPath()) - if err != nil { - return nil, fmt.Errorf("failed to read client TLS certificate file: %w", err) - } - - clientKeyPEM, err := os.ReadFile(c.clientTLSKeyPath()) - if err != nil { - return nil, fmt.Errorf("failed to read client TLS key file: %w", err) - } - - clientCACertPEM, err := os.ReadFile(c.clientTLSCACertPath()) - if err != nil { - return nil, fmt.Errorf("failed to read client TLS CA certificate file: %w", err) - } - - clientCertificate, err := tls.X509KeyPair(clientCertPEM, clientKeyPEM) - if err != nil { - return nil, fmt.Errorf("failed to load client certificate and key: %w", err) - } - - certPool := x509.NewCertPool() - certPool.AppendCertsFromPEM(certificatePEM) - certPool.AppendCertsFromPEM(clientCACertPEM) - - tlsConfig := &tls.Config{ - MinVersion: tls.VersionTLS12, - Certificates: []tls.Certificate{clientCertificate}, - RootCAs: certPool, - ServerName: c.gatewayPeer(), - InsecureSkipVerify: false, - } - - transportCredentials := credentials.NewTLS(tlsConfig) - - connection, err := grpc.NewClient(c.PeerEndpoint, grpc.WithTransportCredentials(transportCredentials)) - if err != nil { - return nil, fmt.Errorf("failed to create gRPC connection: %w", err) - } - - return connection, nil -} - -// newIdentity creates a client identity for this Gateway connection using an X.509 certificate. -func (c *GatewayConfig) newIdentity() (*identity.X509Identity, error) { - certificatePEM, err := readFirstFile(c.certPath()) - if err != nil { - return nil, fmt.Errorf("failed to read certificate file: %w", err) - } - - certificate, err := identity.CertificateFromPEM(certificatePEM) - if err != nil { - return nil, fmt.Errorf("certificate from pem: %w", err) - } - - id, err := identity.NewX509Identity(c.MSPID, certificate) - if err != nil { - return nil, fmt.Errorf("new x509: %w", err) - } - - return id, nil -} - -// newSign creates a function that generates a digital signature from a message digest using a private key. -func (c *GatewayConfig) newSign() (identity.Sign, error) { - privateKeyPEM, err := readFirstFile(c.keyPath()) - if err != nil { - return nil, fmt.Errorf("failed to read private key file: %w", err) - } - - privateKey, err := identity.PrivateKeyFromPEM(privateKeyPEM) - if err != nil { - return nil, fmt.Errorf("private key from pem: %w", err) - } - - sign, err := identity.NewPrivateKeySign(privateKey) - if err != nil { - return nil, fmt.Errorf("private key sign: %w", err) - } - - return sign, nil -} - -func readFirstFile(dirPath string) ([]byte, error) { - dir, err := os.Open(dirPath) - if err != nil { - return nil, err - } - - fileNames, err := dir.Readdirnames(1) - if err != nil { - return nil, err - } - - return os.ReadFile(path.Join(dirPath, fileNames[0])) -} - -func hashCert(certFilePath string) ([]byte, error) { - clientCertPEM, err := os.ReadFile(certFilePath) - if err != nil { - return nil, fmt.Errorf("failed to read client TLS certificate file: %w", err) - } - - // Compute the SHA-256 hash of the client certificate - block, _ := pem.Decode(clientCertPEM) - if block == nil { - return nil, fmt.Errorf("failed to decode PEM block containing the client certificate") - } - clientCert, err := x509.ParseCertificate(block.Bytes) - if err != nil { - return nil, fmt.Errorf("failed to parse client certificate: %w", err) - } - - clientCertHash := sha256.Sum256(clientCert.Raw) - return clientCertHash[:], nil -} - -// Callback represents a callback function. -type Callback func(string, json.RawMessage) error - -type eventBus struct { - cfg *GatewayConfig - clientConnection *grpc.ClientConn - network *client.Network - gateway *client.Gateway - respCallback Callback -} - -// makeEventBus returns an event bus. -func makeEventBus(cfg *GatewayConfig, eventsCfg *eventsConfig) (*eventBus, error) { - if err := cfg.valid(); err != nil { - return nil, fmt.Errorf("invalid config: %w", err) - } - clientConnection, err := cfg.newGrpcConnection() - if err != nil { - return nil, fmt.Errorf("new grpc connection: %w", err) - } - - id, err := cfg.newIdentity() - if err != nil { - return nil, fmt.Errorf("new identity: %w", err) - } - sign, err := cfg.newSign() - if err != nil { - return nil, fmt.Errorf("sign: %w", err) - } - - clientTlsCertHash, err := hashCert(cfg.clientTLSCertPath()) - if err != nil { - return nil, fmt.Errorf("hash cert: %w", err) - } - - gateway, err := client.Connect( - id, - client.WithSign(sign), - client.WithTLSClientCertificateHash(clientTlsCertHash), // required for mutual TLS - client.WithClientConnection(clientConnection), - ) - if err != nil { - return nil, fmt.Errorf("connect: %w", err) - } - - network := gateway.GetNetwork(cfg.ChannelName) - - eb := &eventBus{ - cfg: cfg, - clientConnection: clientConnection, - network: network, - gateway: gateway, - respCallback: eventsCfg.callback, - } - - if eb.respCallback == nil { - eb.respCallback = eb.defaultCallback - } - return eb, nil -} - -func (s *eventBus) makeCallbackContext() context.Context { - // TODO: set timeout - return context.TODO() -} - -func (s *eventBus) defaultCallback(reqID string, rep json.RawMessage) error { - c := s.network.GetContract(s.cfg.ChaincodeID) - ctx := s.makeCallbackContext() - - req, err := shirorpc.MakeConnectorEventResponse(rep) - if err != nil { - return fmt.Errorf("make shiro response: %w", err) - } - - argBytes, err := req.ArgumentsBytes() - if err != nil { - return fmt.Errorf("make shiro args: %w", err) - } - - transient, err := req.Transient() - if err != nil { - return fmt.Errorf("make shiro tranisent: %w", err) - } - - logrus.WithFields(logrus.Fields{ - "transient": transient.String(), - "args": string(argBytes), - }).Debug("construct response tx") - proposal, err := c.NewProposal( - "Invoke", - client.WithEndorsingOrganizations(s.cfg.MSPID), - client.WithBytesArguments(argBytes), - client.WithTransient(transient), - ) - if err != nil { - return fmt.Errorf("new proposal: %w", err) - } - - tx, err := proposal.EndorseWithContext(ctx) - if err != nil { - return fmt.Errorf("endorse: %w", err) - } - - if res, err := shirorpc.MakeResponse(tx.Result()); err != nil { - return fmt.Errorf("response: %w", err) - } else if err := res.Error(); err != nil { - return fmt.Errorf("invalid tx: %w", err) - } else { - logrus.Debugf("response from callback: [%s]", string(res.ResultJSON())) - } - - commit, err := tx.SubmitWithContext(ctx) - if err != nil { - return fmt.Errorf("commit: %w", err) - } - - if stat, err := commit.StatusWithContext(ctx); err != nil { - return fmt.Errorf("commit status: %w", err) - } else if !stat.Successful { - return fmt.Errorf("invalid status: [%s]", stat.Code) - } else { - logrus.Debugf("response commited in tx [%s], block [%d]", stat.TransactionID, stat.BlockNumber) - } - - return nil -} - -// close frees resources for an event bus. -func (s *eventBus) close() error { - if s == nil { - return fmt.Errorf("nil eventbus") - } - var errs []error - if s.gateway != nil { - errs = append(errs, s.gateway.Close()) - } - if s.clientConnection != nil { - errs = append(errs, s.clientConnection.Close()) - } - - var retErr error - for _, err := range errs { - if err != nil { - if retErr == nil { - retErr = err - } else { - retErr = fmt.Errorf("%w: %w", retErr, err) - } - } - } - - return retErr -} - -// Events capture requests raised by phylum transactions. -type Event struct { - respCallback Callback - cEvent *chaininfo.ConnectorEvent - respCount int - callbackMutex sync.Mutex -} - -// RequestBody returns the request, or an error if the request -// could not be retrieved. -func (e *Event) RequestBody() (json.RawMessage, error) { - if e == nil || e.cEvent == nil { - return nil, nil - } - if err := e.cEvent.UnmarshalError(); err != nil { - return nil, err - } - return e.cEvent.RequestBody(), nil -} - -// RequestSystem returns the destination system name for the request. -func (e *Event) RequestSystem() string { - return e.cEvent.RequestSystem() -} - -// RequestEnglish returns an english description for the request. -func (e *Event) RequestEnglish() string { - return e.cEvent.RequestEnglish() -} - -// RequestMSP returns the MSP ID for the connector. -func (e *Event) RequestMSPID() string { - return e.cEvent.RequestMSPID() -} - -// ObjectID returns the object ID for the event. -func (e *Event) ObjectID() string { - return e.cEvent.ObjectID() -} - -func (e *Event) makeCallbackMessage(resp json.RawMessage, err error) (json.RawMessage, error) { - type CallbackMessage struct { - RequestID string `json:"request_id"` - Error string `json:"error,omitempty"` - Response json.RawMessage `json:"response,omitempty"` - } - - var errMsg string - if err != nil { - errMsg = err.Error() - } - - callbackMessage := CallbackMessage{ - RequestID: e.cEvent.RequestID(), - Response: resp, - Error: errMsg, - } - - jsonData, err := json.Marshal(callbackMessage) - if err != nil { - return nil, fmt.Errorf("failed to marshal callback message: %w", err) - } - - return jsonData, nil -} - -// Callback sends a response to the event back to Luther, or an error if -// processing failed. -func (e *Event) Callback(resp json.RawMessage, err error) error { - logrus.Debug("callback triggered") - if e == nil { - return fmt.Errorf("nil event") - } - e.callbackMutex.Lock() - defer e.callbackMutex.Unlock() - - if len(resp) == 0 && err == nil { - return fmt.Errorf("missing response") - } - if len(resp) > 0 && err != nil { - return fmt.Errorf("exactly one of resp or err required") - } - - respRaw, err := e.makeCallbackMessage(resp, err) - if err != nil { - return fmt.Errorf("marshal callback: %w", err) - } - - if e.respCallback != nil { - logrus.Debug("passing event response to registered callback") - err = e.respCallback(e.cEvent.RequestID(), respRaw) - if err != nil && errors.Is(err, shirorpc.ErrTxInvalid) { - return fmt.Errorf("invalid tx: %w", err) - } else if err != nil { - return fmt.Errorf("callback: %w", err) - } - } else { - logrus.WithField("resp", string(respRaw)).Debug("no registered callback, ignoring response") - } - e.respCount++ - - return nil -} - -// EventSteam provides a stream of events issued from Luther. -type EventStream struct { - eventBus *eventBus - eventChan <-chan *Event - cancel context.CancelFunc - done chan struct{} - wg sync.WaitGroup - once sync.Once -} - -// Listen returns a channel that receives events. -func (s *EventStream) Listen() <-chan *Event { - if s == nil { - return nil - } - - return s.eventChan -} - -// Done closes the event stream and blocks the caller until resources are freed. -// Subsequent calls to Done() are ignored. -func (s *EventStream) Done() error { - logrus.Debug("stream done") - if s == nil { - return nil - } - - var err error - s.once.Do(func() { - logrus.Debug("exiting event stream") - close(s.done) - s.cancel() - s.wg.Wait() - err = s.eventBus.close() - logrus.Debug("event bus closed") - }) - - return err -} - -type eventsConfig struct { - callback Callback - checkpointFile string - startBlock uint64 -} - -// Option configures the event service. -type Option func(*eventsConfig) - -// WithEventCallback configures a function that's responsible for processing -// event responses. -func WithEventCallback(callback Callback) Option { - return func(cfg *eventsConfig) { - cfg.callback = callback - } -} - -// WithStartBlock sets the initial block to start retrieving events from. -func WithStartBlock(blockNum uint64) Option { - return func(cfg *eventsConfig) { - cfg.startBlock = blockNum - } -} - -func WithCheckpointFile(file string) Option { - return func(cfg *eventsConfig) { - cfg.checkpointFile = file - } -} - -// BlockCheckpointer provides the current position for event processing, -// and records the last processed block. -type BlockCheckpointer interface { - // BlockNumber in which the next event is expected. - BlockNumber() uint64 - // TransactionID of the last successfully processed event within the current block. - TransactionID() string - // CheckpointBlock records a successfully processed block. - CheckpointBlock(blockNumber uint64) error - // Close releases resources. - Close() error -} - -type inMemoryCheckpoint struct { - checkpoint *client.InMemoryCheckpointer -} - -func (s *inMemoryCheckpoint) BlockNumber() uint64 { - if s == nil || s.checkpoint == nil { - return 0 - } - return s.checkpoint.BlockNumber() -} - -func (s *inMemoryCheckpoint) TransactionID() string { - if s == nil || s.checkpoint == nil { - return "" - } - return s.checkpoint.TransactionID() -} - -func (s *inMemoryCheckpoint) CheckpointBlock(blockNumber uint64) error { - if s == nil || s.checkpoint == nil { - return nil - } - s.checkpoint.CheckpointBlock(blockNumber) - return nil -} - -func (s *inMemoryCheckpoint) Close() error { - return nil -} - -func newInMemoryCheckpoint() BlockCheckpointer { - return &inMemoryCheckpoint{ - &client.InMemoryCheckpointer{}, - } -} - -// GatewayEvents returns a channel that streams Luther events directly -// from a fabric gateway. -func GatewayEvents(cfg *GatewayConfig, opts ...Option) (*EventStream, error) { - ctx := context.Background() - - eventsCfg := &eventsConfig{} - for _, opt := range opts { - opt(eventsCfg) - } - - logrus.WithContext(ctx).Debug("make event bus") - bus, err := makeEventBus(cfg, eventsCfg) - if err != nil { - return nil, fmt.Errorf("make event bus: %w", err) - } - - events := make(chan *Event) - ctx, cancel := context.WithCancel(ctx) - stream := &EventStream{ - eventBus: bus, - eventChan: events, - cancel: cancel, - done: make(chan struct{}), - } - stream.wg.Add(1) - - var checkpointer BlockCheckpointer - if eventsCfg.checkpointFile != "" { - checkpointer, err = client.NewFileCheckpointer(eventsCfg.checkpointFile) - if err != nil { - return nil, fmt.Errorf("file checkpointer: %w", err) - } - logrus.WithContext(ctx).Info("loaded checkpoint file") - } else { - checkpointer = newInMemoryCheckpoint() - } - - var networkEventsOpt []client.BlockEventsOption - if eventsCfg.startBlock > 0 { - networkEventsOpt = append(networkEventsOpt, client.WithStartBlock(eventsCfg.startBlock)) - networkEventsOpt = append(networkEventsOpt, client.WithCheckpoint(checkpointer)) - } - - logrus.WithContext(ctx).Debug("listen to fabric events") - - fabEvents, err := bus.network.BlockAndPrivateDataEvents(ctx, networkEventsOpt...) - if err != nil { - return nil, fmt.Errorf("failed to start block event listening: %w", err) - } - - logrus.WithContext(ctx).Debug("kicking of go routine to process events") - go func() { - defer func() { - close(events) - stream.wg.Done() - if err := bus.close(); err != nil { - logrus.WithContext(ctx).WithError(err).Error("bus close") - } else { - logrus.WithContext(ctx).Debug("event hub closed") - } - }() - unmarshaler := &chaininfo.ConnectorEventUnmarshaler{ - CCIDFilter: cfg.ChaincodeID, - MSPFilter: cfg.MSPID, - } - for { - logrus.WithContext(ctx).Debug("selecting on events") - select { - case bEvent := <-fabEvents: - if bEvent == nil { - logrus.WithContext(ctx).Info("nil event, exiting...") - return - } - blockNum := bEvent.GetBlock().GetHeader().GetNumber() - logrus.WithContext(ctx).WithField("block_no", blockNum).Debug("received event") - cEvents, err := unmarshaler.Unmarshal(bEvent) - if err != nil { - logrus.WithContext(ctx).WithError(err).Error("unmarshal connector events") - continue - } - logrus.WithContext(ctx). - WithField("num_events", len(cEvents)). - Info("processing luther events") - for _, cEvent := range cEvents { - events <- &Event{ - cEvent: cEvent, - respCallback: bus.respCallback, - } - } - if err := checkpointer.CheckpointBlock(blockNum); err != nil { - logrus.WithContext(ctx).WithError(err).Error("failed to checkpoint block") - } - case <-ctx.Done(): - return - case <-stream.done: - return - } - } - }() - - return stream, nil -} diff --git a/connectorhub/internal/protoutil/README.md b/connectorhub/internal/protoutil/README.md deleted file mode 100644 index ec590f1..0000000 --- a/connectorhub/internal/protoutil/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# protoutils - -This is a hacked copy of `github.com/hyperledger/fabric@v2.5.9`, which is the -only direct HLF package we need. This is to work around bringing in the entire -HLF repo, which is not compatible with go.mod. diff --git a/connectorhub/internal/protoutil/blockutils.go b/connectorhub/internal/protoutil/blockutils.go deleted file mode 100644 index 8eae02e..0000000 --- a/connectorhub/internal/protoutil/blockutils.go +++ /dev/null @@ -1,195 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package protoutil - -import ( - "bytes" - "crypto/sha256" - "encoding/asn1" - "encoding/base64" - "fmt" - "math/big" - - cb "github.com/hyperledger/fabric-protos-go-apiv2/common" - "google.golang.org/protobuf/proto" -) - -// NewBlock constructs a block with no data and no metadata. -func NewBlock(seqNum uint64, previousHash []byte) *cb.Block { - block := &cb.Block{} - block.Header = &cb.BlockHeader{} - block.Header.Number = seqNum - block.Header.PreviousHash = previousHash - block.Header.DataHash = []byte{} - block.Data = &cb.BlockData{} - - var metadataContents [][]byte - for i := 0; i < len(cb.BlockMetadataIndex_name); i++ { - metadataContents = append(metadataContents, []byte{}) - } - block.Metadata = &cb.BlockMetadata{Metadata: metadataContents} - - return block -} - -type asn1Header struct { - Number *big.Int - PreviousHash []byte - DataHash []byte -} - -func BlockHeaderBytes(b *cb.BlockHeader) []byte { - asn1Header := asn1Header{ - PreviousHash: b.PreviousHash, - DataHash: b.DataHash, - Number: new(big.Int).SetUint64(b.Number), - } - result, err := asn1.Marshal(asn1Header) - if err != nil { - // Errors should only arise for types which cannot be encoded, since the - // BlockHeader type is known a-priori to contain only encodable types, an - // error here is fatal and should not be propagated - panic(err) - } - return result -} - -func BlockHeaderHash(b *cb.BlockHeader) []byte { - sum := sha256.Sum256(BlockHeaderBytes(b)) - return sum[:] -} - -func BlockDataHash(b *cb.BlockData) []byte { - sum := sha256.Sum256(bytes.Join(b.Data, nil)) - return sum[:] -} - -// GetChannelIDFromBlockBytes returns channel ID given byte array which represents -// the block -func GetChannelIDFromBlockBytes(bytes []byte) (string, error) { - block, err := UnmarshalBlock(bytes) - if err != nil { - return "", err - } - - return GetChannelIDFromBlock(block) -} - -// GetChannelIDFromBlock returns channel ID in the block -func GetChannelIDFromBlock(block *cb.Block) (string, error) { - if block == nil || block.Data == nil || block.Data.Data == nil || len(block.Data.Data) == 0 { - return "", fmt.Errorf("failed to retrieve channel id - block is empty") - } - var err error - envelope, err := GetEnvelopeFromBlock(block.Data.Data[0]) - if err != nil { - return "", err - } - payload, err := UnmarshalPayload(envelope.Payload) - if err != nil { - return "", err - } - - if payload.Header == nil { - return "", fmt.Errorf("failed to retrieve channel id - payload header is empty") - } - chdr, err := UnmarshalChannelHeader(payload.Header.ChannelHeader) - if err != nil { - return "", err - } - - return chdr.ChannelId, nil -} - -// GetMetadataFromBlock retrieves metadata at the specified index. -func GetMetadataFromBlock(block *cb.Block, index cb.BlockMetadataIndex) (*cb.Metadata, error) { - if block.Metadata == nil { - return nil, fmt.Errorf("no metadata in block") - } - - if len(block.Metadata.Metadata) <= int(index) { - return nil, fmt.Errorf("no metadata at index [%s]", index) - } - - md := &cb.Metadata{} - err := proto.Unmarshal(block.Metadata.Metadata[index], md) - if err != nil { - return nil, fmt.Errorf("error [%w] unmarshalling metadata at index [%s]", err, index) - } - return md, nil -} - -// GetMetadataFromBlockOrPanic retrieves metadata at the specified index, or -// panics on error -func GetMetadataFromBlockOrPanic(block *cb.Block, index cb.BlockMetadataIndex) *cb.Metadata { - md, err := GetMetadataFromBlock(block, index) - if err != nil { - panic(err) - } - return md -} - -// CopyBlockMetadata copies metadata from one block into another -func CopyBlockMetadata(src *cb.Block, dst *cb.Block) { - dst.Metadata = src.Metadata - // Once copied initialize with rest of the - // required metadata positions. - InitBlockMetadata(dst) -} - -// InitBlockMetadata initializes metadata structure -func InitBlockMetadata(block *cb.Block) { - if block.Metadata == nil { - block.Metadata = &cb.BlockMetadata{Metadata: [][]byte{{}, {}, {}, {}, {}}} - } else if len(block.Metadata.Metadata) < int(cb.BlockMetadataIndex_COMMIT_HASH+1) { - for i := int(len(block.Metadata.Metadata)); i <= int(cb.BlockMetadataIndex_COMMIT_HASH); i++ { - block.Metadata.Metadata = append(block.Metadata.Metadata, []byte{}) - } - } -} - -func VerifyTransactionsAreWellFormed(block *cb.Block) error { - if block == nil || block.Data == nil || len(block.Data.Data) == 0 { - return fmt.Errorf("empty block") - } - - // If we have a single transaction, and the block is a config block, then no need to check - // well formed-ness, because there cannot be another transaction in the original block. - if IsConfigBlock(block) { - return nil - } - - for i, rawTx := range block.Data.Data { - env := &cb.Envelope{} - if err := proto.Unmarshal(rawTx, env); err != nil { - return fmt.Errorf("transaction %d is invalid: %v", i, err) - } - - if len(env.Payload) == 0 { - return fmt.Errorf("transaction %d has no payload", i) - } - - if len(env.Signature) == 0 { - return fmt.Errorf("transaction %d has no signature", i) - } - - expected, err := proto.Marshal(env) - if err != nil { - return fmt.Errorf("failed re-marshaling envelope: %v", err) - } - - if len(expected) < len(rawTx) { - return fmt.Errorf("transaction %d has %d trailing bytes", i, len(rawTx)-len(expected)) - } - if !bytes.Equal(expected, rawTx) { - return fmt.Errorf("transaction %d (%s) does not match its raw form (%s)", i, - base64.StdEncoding.EncodeToString(expected), base64.StdEncoding.EncodeToString(rawTx)) - } - } - - return nil -} diff --git a/connectorhub/internal/protoutil/commonutils.go b/connectorhub/internal/protoutil/commonutils.go deleted file mode 100644 index edfcb92..0000000 --- a/connectorhub/internal/protoutil/commonutils.go +++ /dev/null @@ -1,228 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package protoutil - -import ( - "crypto/rand" - "fmt" - - cb "github.com/hyperledger/fabric-protos-go-apiv2/common" - "google.golang.org/protobuf/proto" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" -) - -// MarshalOrPanic serializes a protobuf message and panics if this -// operation fails -func MarshalOrPanic(pb proto.Message) []byte { - data, err := proto.Marshal(pb) - if err != nil { - panic(err) - } - return data -} - -// Marshal serializes a protobuf message. -func Marshal(pb proto.Message) ([]byte, error) { - return proto.Marshal(pb) -} - -// CreateNonceOrPanic generates a nonce using the common/crypto package -// and panics if this operation fails. -func CreateNonceOrPanic() []byte { - nonce, err := CreateNonce() - if err != nil { - panic(err) - } - return nonce -} - -// CreateNonce generates a nonce using the common/crypto package. -func CreateNonce() ([]byte, error) { - nonce, err := getRandomNonce() - return nonce, fmt.Errorf("error generating random nonce: %w", err) -} - -// UnmarshalEnvelopeOfType unmarshals an envelope of the specified type, -// including unmarshalling the payload data -func UnmarshalEnvelopeOfType(envelope *cb.Envelope, headerType cb.HeaderType, message proto.Message) (*cb.ChannelHeader, error) { - payload, err := UnmarshalPayload(envelope.Payload) - if err != nil { - return nil, err - } - - if payload.Header == nil { - return nil, fmt.Errorf("envelope must have a Header") - } - - chdr, err := UnmarshalChannelHeader(payload.Header.ChannelHeader) - if err != nil { - return nil, err - } - - if chdr.Type != int32(headerType) { - return nil, fmt.Errorf("invalid type %s, expected %s", cb.HeaderType(chdr.Type), headerType) - } - - err = proto.Unmarshal(payload.Data, message) - err = fmt.Errorf("error unmarshalling message for type %s: %w", headerType, err) - return chdr, err -} - -// ExtractEnvelopeOrPanic retrieves the requested envelope from a given block -// and unmarshals it -- it panics if either of these operations fail -func ExtractEnvelopeOrPanic(block *cb.Block, index int) *cb.Envelope { - envelope, err := ExtractEnvelope(block, index) - if err != nil { - panic(err) - } - return envelope -} - -// ExtractEnvelope retrieves the requested envelope from a given block and -// unmarshals it -func ExtractEnvelope(block *cb.Block, index int) (*cb.Envelope, error) { - if block.Data == nil { - return nil, fmt.Errorf("block data is nil") - } - - envelopeCount := len(block.Data.Data) - if index < 0 || index >= envelopeCount { - return nil, fmt.Errorf("envelope index out of bounds") - } - marshaledEnvelope := block.Data.Data[index] - envelope, err := GetEnvelopeFromBlock(marshaledEnvelope) - err = fmt.Errorf("block data does not carry an envelope at index %d: %w", index, err) - return envelope, err -} - -// MakeChannelHeader creates a ChannelHeader. -func MakeChannelHeader(headerType cb.HeaderType, version int32, chainID string, epoch uint64) *cb.ChannelHeader { - return &cb.ChannelHeader{ - Type: int32(headerType), - Version: version, - Timestamp: timestamppb.Now(), - ChannelId: chainID, - Epoch: epoch, - } -} - -// MakeSignatureHeader creates a SignatureHeader. -func MakeSignatureHeader(serializedCreatorCertChain []byte, nonce []byte) *cb.SignatureHeader { - return &cb.SignatureHeader{ - Creator: serializedCreatorCertChain, - Nonce: nonce, - } -} - -// SetTxID generates a transaction id based on the provided signature header -// and sets the TxId field in the channel header -func SetTxID(channelHeader *cb.ChannelHeader, signatureHeader *cb.SignatureHeader) { - channelHeader.TxId = ComputeTxID( - signatureHeader.Nonce, - signatureHeader.Creator, - ) -} - -// MakePayloadHeader creates a Payload Header. -func MakePayloadHeader(ch *cb.ChannelHeader, sh *cb.SignatureHeader) *cb.Header { - return &cb.Header{ - ChannelHeader: MarshalOrPanic(ch), - SignatureHeader: MarshalOrPanic(sh), - } -} - -// IsConfigBlock validates whenever given block contains configuration -// update transaction -func IsConfigBlock(block *cb.Block) bool { - if block.Data == nil { - return false - } - - if len(block.Data.Data) != 1 { - return false - } - - marshaledEnvelope := block.Data.Data[0] - envelope, err := GetEnvelopeFromBlock(marshaledEnvelope) - if err != nil { - return false - } - - payload, err := UnmarshalPayload(envelope.Payload) - if err != nil { - return false - } - - if payload.Header == nil { - return false - } - - hdr, err := UnmarshalChannelHeader(payload.Header.ChannelHeader) - if err != nil { - return false - } - - return cb.HeaderType(hdr.Type) == cb.HeaderType_CONFIG -} - -// ChannelHeader returns the *cb.ChannelHeader for a given *cb.Envelope. -func ChannelHeader(env *cb.Envelope) (*cb.ChannelHeader, error) { - if env == nil { - return nil, fmt.Errorf("invalid envelope payload. can't be nil") - } - - envPayload, err := UnmarshalPayload(env.Payload) - if err != nil { - return nil, err - } - - if envPayload.Header == nil { - return nil, fmt.Errorf("header not set") - } - - if envPayload.Header.ChannelHeader == nil { - return nil, fmt.Errorf("channel header not set") - } - - chdr, err := UnmarshalChannelHeader(envPayload.Header.ChannelHeader) - if err != nil { - return nil, fmt.Errorf("error unmarshalling channel header: %w", err) - } - - return chdr, nil -} - -// ChannelID returns the Channel ID for a given *cb.Envelope. -func ChannelID(env *cb.Envelope) (string, error) { - chdr, err := ChannelHeader(env) - if err != nil { - return "", fmt.Errorf("error retrieving channel header: %w", err) - } - - return chdr.ChannelId, nil -} - -// EnvelopeToConfigUpdate is used to extract a ConfigUpdateEnvelope from an envelope of -// type CONFIG_UPDATE -func EnvelopeToConfigUpdate(configtx *cb.Envelope) (*cb.ConfigUpdateEnvelope, error) { - configUpdateEnv := &cb.ConfigUpdateEnvelope{} - _, err := UnmarshalEnvelopeOfType(configtx, cb.HeaderType_CONFIG_UPDATE, configUpdateEnv) - if err != nil { - return nil, err - } - return configUpdateEnv, nil -} - -func getRandomNonce() ([]byte, error) { - key := make([]byte, 24) - - _, err := rand.Read(key) - if err != nil { - return nil, fmt.Errorf("error getting random bytes: %w", err) - } - return key, nil -} diff --git a/connectorhub/internal/protoutil/configtxutils.go b/connectorhub/internal/protoutil/configtxutils.go deleted file mode 100644 index 8f5140e..0000000 --- a/connectorhub/internal/protoutil/configtxutils.go +++ /dev/null @@ -1,17 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package protoutil - -import "github.com/hyperledger/fabric-protos-go-apiv2/common" - -func NewConfigGroup() *common.ConfigGroup { - return &common.ConfigGroup{ - Groups: make(map[string]*common.ConfigGroup), - Values: make(map[string]*common.ConfigValue), - Policies: make(map[string]*common.ConfigPolicy), - } -} diff --git a/connectorhub/internal/protoutil/proputils.go b/connectorhub/internal/protoutil/proputils.go deleted file mode 100644 index 3113fdf..0000000 --- a/connectorhub/internal/protoutil/proputils.go +++ /dev/null @@ -1,406 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package protoutil - -import ( - "crypto/sha256" - "encoding/hex" - "fmt" - - "github.com/hyperledger/fabric-protos-go-apiv2/common" - "github.com/hyperledger/fabric-protos-go-apiv2/peer" - "google.golang.org/protobuf/proto" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" -) - -// CreateChaincodeProposal creates a proposal from given input. -// It returns the proposal and the transaction id associated to the proposal -func CreateChaincodeProposal(typ common.HeaderType, channelID string, cis *peer.ChaincodeInvocationSpec, creator []byte) (*peer.Proposal, string, error) { - return CreateChaincodeProposalWithTransient(typ, channelID, cis, creator, nil) -} - -// CreateChaincodeProposalWithTransient creates a proposal from given input -// It returns the proposal and the transaction id associated to the proposal -func CreateChaincodeProposalWithTransient(typ common.HeaderType, channelID string, cis *peer.ChaincodeInvocationSpec, creator []byte, transientMap map[string][]byte) (*peer.Proposal, string, error) { - // generate a random nonce - nonce, err := getRandomNonce() - if err != nil { - return nil, "", err - } - - // compute txid - txid := ComputeTxID(nonce, creator) - - return CreateChaincodeProposalWithTxIDNonceAndTransient(txid, typ, channelID, cis, nonce, creator, transientMap) -} - -// CreateChaincodeProposalWithTxIDAndTransient creates a proposal from given -// input. It returns the proposal and the transaction id associated with the -// proposal -func CreateChaincodeProposalWithTxIDAndTransient(typ common.HeaderType, channelID string, cis *peer.ChaincodeInvocationSpec, creator []byte, txid string, transientMap map[string][]byte) (*peer.Proposal, string, error) { - // generate a random nonce - nonce, err := getRandomNonce() - if err != nil { - return nil, "", err - } - - // compute txid unless provided by tests - if txid == "" { - txid = ComputeTxID(nonce, creator) - } - - return CreateChaincodeProposalWithTxIDNonceAndTransient(txid, typ, channelID, cis, nonce, creator, transientMap) -} - -// CreateChaincodeProposalWithTxIDNonceAndTransient creates a proposal from -// given input -func CreateChaincodeProposalWithTxIDNonceAndTransient(txid string, typ common.HeaderType, channelID string, cis *peer.ChaincodeInvocationSpec, nonce, creator []byte, transientMap map[string][]byte) (*peer.Proposal, string, error) { - ccHdrExt := &peer.ChaincodeHeaderExtension{ChaincodeId: cis.ChaincodeSpec.ChaincodeId} - ccHdrExtBytes, err := proto.Marshal(ccHdrExt) - if err != nil { - return nil, "", fmt.Errorf("error marshaling ChaincodeHeaderExtension") - } - - cisBytes, err := proto.Marshal(cis) - if err != nil { - return nil, "", fmt.Errorf("error marshaling ChaincodeInvocationSpec") - } - - ccPropPayload := &peer.ChaincodeProposalPayload{Input: cisBytes, TransientMap: transientMap} - ccPropPayloadBytes, err := proto.Marshal(ccPropPayload) - if err != nil { - return nil, "", fmt.Errorf("error marshaling ChaincodeProposalPayload") - } - - // TODO: epoch is now set to zero. This must be changed once we - // get a more appropriate mechanism to handle it in. - var epoch uint64 - - hdr := &common.Header{ - ChannelHeader: MarshalOrPanic( - &common.ChannelHeader{ - Type: int32(typ), - TxId: txid, - Timestamp: timestamppb.Now(), - ChannelId: channelID, - Extension: ccHdrExtBytes, - Epoch: epoch, - }, - ), - SignatureHeader: MarshalOrPanic( - &common.SignatureHeader{ - Nonce: nonce, - Creator: creator, - }, - ), - } - - hdrBytes, err := proto.Marshal(hdr) - if err != nil { - return nil, "", err - } - - prop := &peer.Proposal{ - Header: hdrBytes, - Payload: ccPropPayloadBytes, - } - return prop, txid, nil -} - -// GetBytesProposalResponsePayload gets proposal response payload -func GetBytesProposalResponsePayload(hash []byte, response *peer.Response, result []byte, event []byte, ccid *peer.ChaincodeID) ([]byte, error) { - cAct := &peer.ChaincodeAction{ - Events: event, Results: result, - Response: response, - ChaincodeId: ccid, - } - cActBytes, err := proto.Marshal(cAct) - if err != nil { - return nil, fmt.Errorf("error marshaling ChaincodeAction") - } - - prp := &peer.ProposalResponsePayload{ - Extension: cActBytes, - ProposalHash: hash, - } - prpBytes, err := proto.Marshal(prp) - return prpBytes, fmt.Errorf("error marshaling ProposalResponsePayload: %w", err) -} - -// GetBytesChaincodeProposalPayload gets the chaincode proposal payload -func GetBytesChaincodeProposalPayload(cpp *peer.ChaincodeProposalPayload) ([]byte, error) { - cppBytes, err := proto.Marshal(cpp) - return cppBytes, fmt.Errorf("error marshaling ChaincodeProposalPayload: %w", err) -} - -// GetBytesResponse gets the bytes of Response -func GetBytesResponse(res *peer.Response) ([]byte, error) { - resBytes, err := proto.Marshal(res) - return resBytes, fmt.Errorf("error marshaling Response: %w", err) -} - -// GetBytesChaincodeEvent gets the bytes of ChaincodeEvent -func GetBytesChaincodeEvent(event *peer.ChaincodeEvent) ([]byte, error) { - eventBytes, err := proto.Marshal(event) - return eventBytes, fmt.Errorf("error marshaling ChaincodeEvent: %w", err) -} - -// GetBytesChaincodeActionPayload get the bytes of ChaincodeActionPayload from -// the message -func GetBytesChaincodeActionPayload(cap *peer.ChaincodeActionPayload) ([]byte, error) { - capBytes, err := proto.Marshal(cap) - return capBytes, fmt.Errorf("error marshaling ChaincodeActionPayload: %w", err) -} - -// GetBytesProposalResponse gets proposal bytes response -func GetBytesProposalResponse(pr *peer.ProposalResponse) ([]byte, error) { - respBytes, err := proto.Marshal(pr) - return respBytes, fmt.Errorf("error marshaling ProposalResponse: %w", err) -} - -// GetBytesHeader get the bytes of Header from the message -func GetBytesHeader(hdr *common.Header) ([]byte, error) { - bytes, err := proto.Marshal(hdr) - return bytes, fmt.Errorf("error marshaling Header: %w", err) -} - -// GetBytesSignatureHeader get the bytes of SignatureHeader from the message -func GetBytesSignatureHeader(hdr *common.SignatureHeader) ([]byte, error) { - bytes, err := proto.Marshal(hdr) - return bytes, fmt.Errorf("error marshaling SignatureHeader: %w", err) -} - -// GetBytesTransaction get the bytes of Transaction from the message -func GetBytesTransaction(tx *peer.Transaction) ([]byte, error) { - bytes, err := proto.Marshal(tx) - return bytes, fmt.Errorf("error unmarshalling Transaction: %w", err) -} - -// GetBytesPayload get the bytes of Payload from the message -func GetBytesPayload(payl *common.Payload) ([]byte, error) { - bytes, err := proto.Marshal(payl) - return bytes, fmt.Errorf("error marshaling Payload: %w", err) -} - -// GetBytesEnvelope get the bytes of Envelope from the message -func GetBytesEnvelope(env *common.Envelope) ([]byte, error) { - bytes, err := proto.Marshal(env) - return bytes, fmt.Errorf("error marshaling Envelope: %w", err) -} - -// GetActionFromEnvelope extracts a ChaincodeAction message from a -// serialized Envelope -// TODO: fix function name as per FAB-11831 -func GetActionFromEnvelope(envBytes []byte) (*peer.ChaincodeAction, error) { - env, err := GetEnvelopeFromBlock(envBytes) - if err != nil { - return nil, err - } - return GetActionFromEnvelopeMsg(env) -} - -func GetActionFromEnvelopeMsg(env *common.Envelope) (*peer.ChaincodeAction, error) { - payl, err := UnmarshalPayload(env.Payload) - if err != nil { - return nil, err - } - - tx, err := UnmarshalTransaction(payl.Data) - if err != nil { - return nil, err - } - - if len(tx.Actions) == 0 { - return nil, fmt.Errorf("at least one TransactionAction required") - } - - _, respPayload, err := GetPayloads(tx.Actions[0]) - return respPayload, err -} - -// CreateProposalFromCISAndTxid returns a proposal given a serialized identity -// and a ChaincodeInvocationSpec -func CreateProposalFromCISAndTxid(txid string, typ common.HeaderType, channelID string, cis *peer.ChaincodeInvocationSpec, creator []byte) (*peer.Proposal, string, error) { - nonce, err := getRandomNonce() - if err != nil { - return nil, "", err - } - return CreateChaincodeProposalWithTxIDNonceAndTransient(txid, typ, channelID, cis, nonce, creator, nil) -} - -// CreateProposalFromCIS returns a proposal given a serialized identity and a -// ChaincodeInvocationSpec -func CreateProposalFromCIS(typ common.HeaderType, channelID string, cis *peer.ChaincodeInvocationSpec, creator []byte) (*peer.Proposal, string, error) { - return CreateChaincodeProposal(typ, channelID, cis, creator) -} - -// CreateGetChaincodesProposal returns a GETCHAINCODES proposal given a -// serialized identity -func CreateGetChaincodesProposal(channelID string, creator []byte) (*peer.Proposal, string, error) { - ccinp := &peer.ChaincodeInput{Args: [][]byte{[]byte("getchaincodes")}} - lsccSpec := &peer.ChaincodeInvocationSpec{ - ChaincodeSpec: &peer.ChaincodeSpec{ - Type: peer.ChaincodeSpec_GOLANG, - ChaincodeId: &peer.ChaincodeID{Name: "lscc"}, - Input: ccinp, - }, - } - return CreateProposalFromCIS(common.HeaderType_ENDORSER_TRANSACTION, channelID, lsccSpec, creator) -} - -// CreateGetInstalledChaincodesProposal returns a GETINSTALLEDCHAINCODES -// proposal given a serialized identity -func CreateGetInstalledChaincodesProposal(creator []byte) (*peer.Proposal, string, error) { - ccinp := &peer.ChaincodeInput{Args: [][]byte{[]byte("getinstalledchaincodes")}} - lsccSpec := &peer.ChaincodeInvocationSpec{ - ChaincodeSpec: &peer.ChaincodeSpec{ - Type: peer.ChaincodeSpec_GOLANG, - ChaincodeId: &peer.ChaincodeID{Name: "lscc"}, - Input: ccinp, - }, - } - return CreateProposalFromCIS(common.HeaderType_ENDORSER_TRANSACTION, "", lsccSpec, creator) -} - -// CreateInstallProposalFromCDS returns a install proposal given a serialized -// identity and a ChaincodeDeploymentSpec -func CreateInstallProposalFromCDS(ccpack proto.Message, creator []byte) (*peer.Proposal, string, error) { - return createProposalFromCDS("", ccpack, creator, "install") -} - -// CreateDeployProposalFromCDS returns a deploy proposal given a serialized -// identity and a ChaincodeDeploymentSpec -func CreateDeployProposalFromCDS( - channelID string, - cds *peer.ChaincodeDeploymentSpec, - creator []byte, - policy []byte, - escc []byte, - vscc []byte, - collectionConfig []byte, -) (*peer.Proposal, string, error) { - if collectionConfig == nil { - return createProposalFromCDS(channelID, cds, creator, "deploy", policy, escc, vscc) - } - return createProposalFromCDS(channelID, cds, creator, "deploy", policy, escc, vscc, collectionConfig) -} - -// CreateUpgradeProposalFromCDS returns a upgrade proposal given a serialized -// identity and a ChaincodeDeploymentSpec -func CreateUpgradeProposalFromCDS( - channelID string, - cds *peer.ChaincodeDeploymentSpec, - creator []byte, - policy []byte, - escc []byte, - vscc []byte, - collectionConfig []byte, -) (*peer.Proposal, string, error) { - if collectionConfig == nil { - return createProposalFromCDS(channelID, cds, creator, "upgrade", policy, escc, vscc) - } - return createProposalFromCDS(channelID, cds, creator, "upgrade", policy, escc, vscc, collectionConfig) -} - -// createProposalFromCDS returns a deploy or upgrade proposal given a -// serialized identity and a ChaincodeDeploymentSpec -func createProposalFromCDS(channelID string, msg proto.Message, creator []byte, propType string, args ...[]byte) (*peer.Proposal, string, error) { - // in the new mode, cds will be nil, "deploy" and "upgrade" are instantiates. - var ccinp *peer.ChaincodeInput - var b []byte - var err error - if msg != nil { - b, err = proto.Marshal(msg) - if err != nil { - return nil, "", err - } - } - switch propType { - case "deploy": - fallthrough - case "upgrade": - cds, ok := msg.(*peer.ChaincodeDeploymentSpec) - if !ok || cds == nil { - return nil, "", fmt.Errorf("invalid message for creating lifecycle chaincode proposal") - } - Args := [][]byte{[]byte(propType), []byte(channelID), b} - Args = append(Args, args...) - - ccinp = &peer.ChaincodeInput{Args: Args} - case "install": - ccinp = &peer.ChaincodeInput{Args: [][]byte{[]byte(propType), b}} - } - - // wrap the deployment in an invocation spec to lscc... - lsccSpec := &peer.ChaincodeInvocationSpec{ - ChaincodeSpec: &peer.ChaincodeSpec{ - Type: peer.ChaincodeSpec_GOLANG, - ChaincodeId: &peer.ChaincodeID{Name: "lscc"}, - Input: ccinp, - }, - } - - // ...and get the proposal for it - return CreateProposalFromCIS(common.HeaderType_ENDORSER_TRANSACTION, channelID, lsccSpec, creator) -} - -// ComputeTxID computes TxID as the Hash computed -// over the concatenation of nonce and creator. -func ComputeTxID(nonce, creator []byte) string { - // TODO: Get the Hash function to be used from - // channel configuration - hasher := sha256.New() - hasher.Write(nonce) - hasher.Write(creator) - return hex.EncodeToString(hasher.Sum(nil)) -} - -// CheckTxID checks that txid is equal to the Hash computed -// over the concatenation of nonce and creator. -func CheckTxID(txid string, nonce, creator []byte) error { - computedTxID := ComputeTxID(nonce, creator) - - if txid != computedTxID { - return fmt.Errorf("invalid txid. got [%s], expected [%s]", txid, computedTxID) - } - - return nil -} - -// InvokedChaincodeName takes the proposal bytes of a SignedProposal, and unpacks it all the way down, -// until either an error is encountered, or the chaincode name is found. This is useful primarily -// for chaincodes which wish to know the chaincode name originally invoked, in order to deny cc2cc -// invocations (or, perhaps to deny direct invocations and require cc2cc). -func InvokedChaincodeName(proposalBytes []byte) (string, error) { - proposal := &peer.Proposal{} - err := proto.Unmarshal(proposalBytes, proposal) - if err != nil { - return "", fmt.Errorf("could not unmarshal proposal: %w", err) - } - - proposalPayload := &peer.ChaincodeProposalPayload{} - err = proto.Unmarshal(proposal.Payload, proposalPayload) - if err != nil { - return "", fmt.Errorf("could not unmarshal chaincode proposal payload: %w", err) - } - - cis := &peer.ChaincodeInvocationSpec{} - err = proto.Unmarshal(proposalPayload.Input, cis) - if err != nil { - return "", fmt.Errorf("could not unmarshal chaincode invocation spec: %w", err) - } - - if cis.ChaincodeSpec == nil { - return "", fmt.Errorf("chaincode spec is nil") - } - - if cis.ChaincodeSpec.ChaincodeId == nil { - return "", fmt.Errorf("chaincode id is nil") - } - - return cis.ChaincodeSpec.ChaincodeId.Name, nil -} diff --git a/connectorhub/internal/protoutil/signeddata.go b/connectorhub/internal/protoutil/signeddata.go deleted file mode 100644 index a95a3e8..0000000 --- a/connectorhub/internal/protoutil/signeddata.go +++ /dev/null @@ -1,116 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package protoutil - -import ( - "bytes" - "crypto/x509" - "encoding/pem" - "fmt" - "strings" - - "github.com/hyperledger/fabric-protos-go-apiv2/common" - "github.com/hyperledger/fabric-protos-go-apiv2/msp" - "google.golang.org/protobuf/proto" -) - -// SignedData is used to represent the general triplet required to verify a signature -// This is intended to be generic across crypto schemes, while most crypto schemes will -// include the signing identity and a nonce within the Data, this is left to the crypto -// implementation. -type SignedData struct { - Data []byte - Identity []byte - Signature []byte -} - -// ConfigUpdateEnvelopeAsSignedData returns the set of signatures for the -// ConfigUpdateEnvelope as SignedData or an error indicating why this was not -// possible. -func ConfigUpdateEnvelopeAsSignedData(ce *common.ConfigUpdateEnvelope) ([]*SignedData, error) { - if ce == nil { - return nil, fmt.Errorf("No signatures for nil SignedConfigItem") - } - - result := make([]*SignedData, len(ce.Signatures)) - for i, configSig := range ce.Signatures { - sigHeader := &common.SignatureHeader{} - err := proto.Unmarshal(configSig.SignatureHeader, sigHeader) - if err != nil { - return nil, err - } - - result[i] = &SignedData{ - Data: bytes.Join([][]byte{configSig.SignatureHeader, ce.ConfigUpdate}, nil), - Identity: sigHeader.Creator, - Signature: configSig.Signature, - } - - } - - return result, nil -} - -// EnvelopeAsSignedData returns the signatures for the Envelope as SignedData -// slice of length 1 or an error indicating why this was not possible. -func EnvelopeAsSignedData(env *common.Envelope) ([]*SignedData, error) { - if env == nil { - return nil, fmt.Errorf("No signatures for nil Envelope") - } - - payload := &common.Payload{} - err := proto.Unmarshal(env.Payload, payload) - if err != nil { - return nil, err - } - - if payload.Header == nil /* || payload.Header.SignatureHeader == nil */ { - return nil, fmt.Errorf("Missing Header") - } - - shdr := &common.SignatureHeader{} - err = proto.Unmarshal(payload.Header.SignatureHeader, shdr) - if err != nil { - return nil, fmt.Errorf("GetSignatureHeaderFromBytes failed, err %s", err) - } - - return []*SignedData{{ - Data: env.Payload, - Identity: shdr.Creator, - Signature: env.Signature, - }}, nil -} - -// LogMessageForSerializedIdentity returns a string with seriealized identity information, -// or a string indicating why the serialized identity information cannot be returned. -// Any errors are intentially returned in the return strings so that the function can be used in single-line log messages with minimal clutter. -func LogMessageForSerializedIdentity(serializedIdentity []byte) string { - id := &msp.SerializedIdentity{} - err := proto.Unmarshal(serializedIdentity, id) - if err != nil { - return fmt.Sprintf("Could not unmarshal serialized identity: %s", err) - } - pemBlock, _ := pem.Decode(id.IdBytes) - if pemBlock == nil { - // not all identities are certificates so simply log the serialized - // identity bytes - return fmt.Sprintf("serialized-identity=%x", serializedIdentity) - } - cert, err := x509.ParseCertificate(pemBlock.Bytes) - if err != nil { - return fmt.Sprintf("Could not parse certificate: %s", err) - } - return fmt.Sprintf("(mspid=%s subject=%s issuer=%s serialnumber=%d)", id.Mspid, cert.Subject, cert.Issuer, cert.SerialNumber) -} - -func LogMessageForSerializedIdentities(signedData []*SignedData) (logMsg string) { - var identityMessages []string - for _, sd := range signedData { - identityMessages = append(identityMessages, LogMessageForSerializedIdentity(sd.Identity)) - } - return strings.Join(identityMessages, ", ") -} diff --git a/connectorhub/internal/protoutil/txutils.go b/connectorhub/internal/protoutil/txutils.go deleted file mode 100644 index caef21f..0000000 --- a/connectorhub/internal/protoutil/txutils.go +++ /dev/null @@ -1,469 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package protoutil - -import ( - "bytes" - "crypto/sha256" - b64 "encoding/base64" - "fmt" - - "github.com/hyperledger/fabric-protos-go-apiv2/common" - "github.com/hyperledger/fabric-protos-go-apiv2/peer" - "google.golang.org/protobuf/proto" -) - -// GetPayloads gets the underlying payload objects in a TransactionAction -func GetPayloads(txActions *peer.TransactionAction) (*peer.ChaincodeActionPayload, *peer.ChaincodeAction, error) { - // TODO: pass in the tx type (in what follows we're assuming the - // type is ENDORSER_TRANSACTION) - ccPayload, err := UnmarshalChaincodeActionPayload(txActions.Payload) - if err != nil { - return nil, nil, err - } - - if ccPayload.Action == nil || ccPayload.Action.ProposalResponsePayload == nil { - return nil, nil, fmt.Errorf("no payload in ChaincodeActionPayload") - } - pRespPayload, err := UnmarshalProposalResponsePayload(ccPayload.Action.ProposalResponsePayload) - if err != nil { - return nil, nil, err - } - - if pRespPayload.Extension == nil { - return nil, nil, fmt.Errorf("response payload is missing extension") - } - - respPayload, err := UnmarshalChaincodeAction(pRespPayload.Extension) - if err != nil { - return ccPayload, nil, err - } - return ccPayload, respPayload, nil -} - -// GetEnvelopeFromBlock gets an envelope from a block's Data field. -func GetEnvelopeFromBlock(data []byte) (*common.Envelope, error) { - // Block always begins with an envelope - var err error - env := &common.Envelope{} - if err = proto.Unmarshal(data, env); err != nil { - return nil, fmt.Errorf("error unmarshalling Envelope: %w", err) - } - - return env, nil -} - -// Signer is the interface needed to sign a transaction -type Signer interface { - Sign(msg []byte) ([]byte, error) - Serialize() ([]byte, error) -} - -// CreateSignedTx assembles an Envelope message from proposal, endorsements, -// and a signer. This function should be called by a client when it has -// collected enough endorsements for a proposal to create a transaction and -// submit it to peers for ordering -func CreateSignedTx( - proposal *peer.Proposal, - signer Signer, - resps ...*peer.ProposalResponse, -) (*common.Envelope, error) { - if len(resps) == 0 { - return nil, fmt.Errorf("at least one proposal response is required") - } - - if signer == nil { - return nil, fmt.Errorf("signer is required when creating a signed transaction") - } - - // the original header - hdr, err := UnmarshalHeader(proposal.Header) - if err != nil { - return nil, err - } - - // the original payload - pPayl, err := UnmarshalChaincodeProposalPayload(proposal.Payload) - if err != nil { - return nil, err - } - - // check that the signer is the same that is referenced in the header - signerBytes, err := signer.Serialize() - if err != nil { - return nil, err - } - - shdr, err := UnmarshalSignatureHeader(hdr.SignatureHeader) - if err != nil { - return nil, err - } - - if !bytes.Equal(signerBytes, shdr.Creator) { - return nil, fmt.Errorf("signer must be the same as the one referenced in the header") - } - - // ensure that all actions are bitwise equal and that they are successful - var a1 []byte - for n, r := range resps { - if r.Response.Status < 200 || r.Response.Status >= 400 { - return nil, fmt.Errorf("proposal response was not successful, error code %d, msg %s", r.Response.Status, r.Response.Message) - } - - if n == 0 { - a1 = r.Payload - continue - } - - if !bytes.Equal(a1, r.Payload) { - return nil, fmt.Errorf("ProposalResponsePayloads do not match (base64): '%s' vs '%s'", - b64.StdEncoding.EncodeToString(r.Payload), b64.StdEncoding.EncodeToString(a1)) - } - } - - // fill endorsements according to their uniqueness - endorsersUsed := make(map[string]struct{}) - var endorsements []*peer.Endorsement - for _, r := range resps { - if r.Endorsement == nil { - continue - } - key := string(r.Endorsement.Endorser) - if _, used := endorsersUsed[key]; used { - continue - } - endorsements = append(endorsements, r.Endorsement) - endorsersUsed[key] = struct{}{} - } - - if len(endorsements) == 0 { - return nil, fmt.Errorf("no endorsements") - } - - // create ChaincodeEndorsedAction - cea := &peer.ChaincodeEndorsedAction{ProposalResponsePayload: resps[0].Payload, Endorsements: endorsements} - - // obtain the bytes of the proposal payload that will go to the transaction - propPayloadBytes, err := GetBytesProposalPayloadForTx(pPayl) - if err != nil { - return nil, err - } - - // serialize the chaincode action payload - cap := &peer.ChaincodeActionPayload{ChaincodeProposalPayload: propPayloadBytes, Action: cea} - capBytes, err := GetBytesChaincodeActionPayload(cap) - if err != nil { - return nil, err - } - - // create a transaction - taa := &peer.TransactionAction{Header: hdr.SignatureHeader, Payload: capBytes} - taas := make([]*peer.TransactionAction, 1) - taas[0] = taa - tx := &peer.Transaction{Actions: taas} - - // serialize the tx - txBytes, err := GetBytesTransaction(tx) - if err != nil { - return nil, err - } - - // create the payload - payl := &common.Payload{Header: hdr, Data: txBytes} - paylBytes, err := GetBytesPayload(payl) - if err != nil { - return nil, err - } - - // sign the payload - sig, err := signer.Sign(paylBytes) - if err != nil { - return nil, err - } - - // here's the envelope - return &common.Envelope{Payload: paylBytes, Signature: sig}, nil -} - -// CreateProposalResponse creates a proposal response. -func CreateProposalResponse( - hdrbytes []byte, - payl []byte, - response *peer.Response, - results []byte, - events []byte, - ccid *peer.ChaincodeID, - signingEndorser Signer, -) (*peer.ProposalResponse, error) { - hdr, err := UnmarshalHeader(hdrbytes) - if err != nil { - return nil, err - } - - // obtain the proposal hash given proposal header, payload and the - // requested visibility - pHashBytes, err := GetProposalHash1(hdr, payl) - if err != nil { - return nil, fmt.Errorf("error computing proposal hash: %w", err) - } - - // get the bytes of the proposal response payload - we need to sign them - prpBytes, err := GetBytesProposalResponsePayload(pHashBytes, response, results, events, ccid) - if err != nil { - return nil, err - } - - // serialize the signing identity - endorser, err := signingEndorser.Serialize() - if err != nil { - return nil, fmt.Errorf("error serializing signing identity: %w", err) - } - - // sign the concatenation of the proposal response and the serialized - // endorser identity with this endorser's key - signature, err := signingEndorser.Sign(append(prpBytes, endorser...)) - if err != nil { - return nil, fmt.Errorf("could not sign the proposal response payload: %w", err) - } - - resp := &peer.ProposalResponse{ - // Timestamp: TODO! - Version: 1, // TODO: pick right version number - Endorsement: &peer.Endorsement{ - Signature: signature, - Endorser: endorser, - }, - Payload: prpBytes, - Response: &peer.Response{ - Status: 200, - Message: "OK", - }, - } - - return resp, nil -} - -// CreateProposalResponseFailure creates a proposal response for cases where -// endorsement proposal fails either due to a endorsement failure or a -// chaincode failure (chaincode response status >= shim.ERRORTHRESHOLD) -func CreateProposalResponseFailure( - hdrbytes []byte, - payl []byte, - response *peer.Response, - results []byte, - events []byte, - chaincodeName string, -) (*peer.ProposalResponse, error) { - hdr, err := UnmarshalHeader(hdrbytes) - if err != nil { - return nil, err - } - - // obtain the proposal hash given proposal header, payload and the requested visibility - pHashBytes, err := GetProposalHash1(hdr, payl) - if err != nil { - return nil, fmt.Errorf("error computing proposal hash: %w", err) - } - - // get the bytes of the proposal response payload - prpBytes, err := GetBytesProposalResponsePayload(pHashBytes, response, results, events, &peer.ChaincodeID{Name: chaincodeName}) - if err != nil { - return nil, err - } - - resp := &peer.ProposalResponse{ - // Timestamp: TODO! - Payload: prpBytes, - Response: response, - } - - return resp, nil -} - -// GetSignedProposal returns a signed proposal given a Proposal message and a -// signing identity -func GetSignedProposal(prop *peer.Proposal, signer Signer) (*peer.SignedProposal, error) { - // check for nil argument - if prop == nil || signer == nil { - return nil, fmt.Errorf("nil arguments") - } - - propBytes, err := proto.Marshal(prop) - if err != nil { - return nil, err - } - - signature, err := signer.Sign(propBytes) - if err != nil { - return nil, err - } - - return &peer.SignedProposal{ProposalBytes: propBytes, Signature: signature}, nil -} - -// MockSignedEndorserProposalOrPanic creates a SignedProposal with the -// passed arguments -func MockSignedEndorserProposalOrPanic( - channelID string, - cs *peer.ChaincodeSpec, - creator, - signature []byte, -) (*peer.SignedProposal, *peer.Proposal) { - prop, _, err := CreateChaincodeProposal( - common.HeaderType_ENDORSER_TRANSACTION, - channelID, - &peer.ChaincodeInvocationSpec{ChaincodeSpec: cs}, - creator) - if err != nil { - panic(err) - } - - propBytes, err := proto.Marshal(prop) - if err != nil { - panic(err) - } - - return &peer.SignedProposal{ProposalBytes: propBytes, Signature: signature}, prop -} - -func MockSignedEndorserProposal2OrPanic( - channelID string, - cs *peer.ChaincodeSpec, - signer Signer, -) (*peer.SignedProposal, *peer.Proposal) { - serializedSigner, err := signer.Serialize() - if err != nil { - panic(err) - } - - prop, _, err := CreateChaincodeProposal( - common.HeaderType_ENDORSER_TRANSACTION, - channelID, - &peer.ChaincodeInvocationSpec{ChaincodeSpec: &peer.ChaincodeSpec{}}, - serializedSigner) - if err != nil { - panic(err) - } - - sProp, err := GetSignedProposal(prop, signer) - if err != nil { - panic(err) - } - - return sProp, prop -} - -// GetBytesProposalPayloadForTx takes a ChaincodeProposalPayload and returns -// its serialized version according to the visibility field -func GetBytesProposalPayloadForTx( - payload *peer.ChaincodeProposalPayload, -) ([]byte, error) { - // check for nil argument - if payload == nil { - return nil, fmt.Errorf("nil arguments") - } - - // strip the transient bytes off the payload - cppNoTransient := &peer.ChaincodeProposalPayload{Input: payload.Input, TransientMap: nil} - cppBytes, err := GetBytesChaincodeProposalPayload(cppNoTransient) - if err != nil { - return nil, err - } - - return cppBytes, nil -} - -// GetProposalHash2 gets the proposal hash - this version -// is called by the committer where the visibility policy -// has already been enforced and so we already get what -// we have to get in ccPropPayl -func GetProposalHash2(header *common.Header, ccPropPayl []byte) ([]byte, error) { - // check for nil argument - if header == nil || - header.ChannelHeader == nil || - header.SignatureHeader == nil || - ccPropPayl == nil { - return nil, fmt.Errorf("nil arguments") - } - - hash := sha256.New() - // hash the serialized Channel Header object - hash.Write(header.ChannelHeader) - // hash the serialized Signature Header object - hash.Write(header.SignatureHeader) - // hash the bytes of the chaincode proposal payload that we are given - hash.Write(ccPropPayl) - return hash.Sum(nil), nil -} - -// GetProposalHash1 gets the proposal hash bytes after sanitizing the -// chaincode proposal payload according to the rules of visibility -func GetProposalHash1(header *common.Header, ccPropPayl []byte) ([]byte, error) { - // check for nil argument - if header == nil || - header.ChannelHeader == nil || - header.SignatureHeader == nil || - ccPropPayl == nil { - return nil, fmt.Errorf("nil arguments") - } - - // unmarshal the chaincode proposal payload - cpp, err := UnmarshalChaincodeProposalPayload(ccPropPayl) - if err != nil { - return nil, err - } - - ppBytes, err := GetBytesProposalPayloadForTx(cpp) - if err != nil { - return nil, err - } - - hash2 := sha256.New() - // hash the serialized Channel Header object - hash2.Write(header.ChannelHeader) - // hash the serialized Signature Header object - hash2.Write(header.SignatureHeader) - // hash of the part of the chaincode proposal payload that will go to the tx - hash2.Write(ppBytes) - return hash2.Sum(nil), nil -} - -// GetOrComputeTxIDFromEnvelope gets the txID present in a given transaction -// envelope. If the txID is empty, it constructs the txID from nonce and -// creator fields in the envelope. -func GetOrComputeTxIDFromEnvelope(txEnvelopBytes []byte) (string, error) { - txEnvelope, err := UnmarshalEnvelope(txEnvelopBytes) - if err != nil { - return "", fmt.Errorf("error getting txID from envelope: %w", err) - } - - txPayload, err := UnmarshalPayload(txEnvelope.Payload) - if err != nil { - return "", fmt.Errorf("error getting txID from payload: %w", err) - } - - if txPayload.Header == nil { - return "", fmt.Errorf("error getting txID from header: payload header is nil") - } - - chdr, err := UnmarshalChannelHeader(txPayload.Header.ChannelHeader) - if err != nil { - return "", fmt.Errorf("error getting txID from channel header: %w", err) - } - - if chdr.TxId != "" { - return chdr.TxId, nil - } - - sighdr, err := UnmarshalSignatureHeader(txPayload.Header.SignatureHeader) - if err != nil { - return "", fmt.Errorf("error getting nonce and creator for computing txID: %w", err) - } - - txid := ComputeTxID(sighdr.Nonce, sighdr.Creator) - return txid, nil -} diff --git a/connectorhub/internal/protoutil/unmarshalers.go b/connectorhub/internal/protoutil/unmarshalers.go deleted file mode 100644 index 1bea58f..0000000 --- a/connectorhub/internal/protoutil/unmarshalers.go +++ /dev/null @@ -1,286 +0,0 @@ -/* -Copyright IBM Corp. All Rights Reserved. - -SPDX-License-Identifier: Apache-2.0 -*/ - -package protoutil - -import ( - "fmt" - - "github.com/hyperledger/fabric-protos-go-apiv2/common" - "github.com/hyperledger/fabric-protos-go-apiv2/ledger/rwset" - "github.com/hyperledger/fabric-protos-go-apiv2/ledger/rwset/kvrwset" - "github.com/hyperledger/fabric-protos-go-apiv2/msp" - "github.com/hyperledger/fabric-protos-go-apiv2/peer" - "google.golang.org/protobuf/proto" -) - -// the implicit contract of all these unmarshalers is that they -// will return a non-nil pointer whenever the error is nil - -// UnmarshalBlock unmarshals bytes to a Block -func UnmarshalBlock(encoded []byte) (*common.Block, error) { - block := &common.Block{} - if err := proto.Unmarshal(encoded, block); err != nil { - return nil, fmt.Errorf("error unmarshalling Block: %w", err) - } - return block, nil -} - -// UnmarshalChaincodeDeploymentSpec unmarshals bytes to a ChaincodeDeploymentSpec -func UnmarshalChaincodeDeploymentSpec(code []byte) (*peer.ChaincodeDeploymentSpec, error) { - cds := &peer.ChaincodeDeploymentSpec{} - if err := proto.Unmarshal(code, cds); err != nil { - return nil, fmt.Errorf("error unmarshalling ChaincodeDeploymentSpec: %w", err) - } - return cds, nil -} - -// UnmarshalChaincodeInvocationSpec unmarshals bytes to a ChaincodeInvocationSpec -func UnmarshalChaincodeInvocationSpec(encoded []byte) (*peer.ChaincodeInvocationSpec, error) { - cis := &peer.ChaincodeInvocationSpec{} - if err := proto.Unmarshal(encoded, cis); err != nil { - return nil, fmt.Errorf("error unmarshalling ChaincodeInvocationSpec: %w", err) - } - return cis, nil -} - -// UnmarshalPayload unmarshals bytes to a Payload -func UnmarshalPayload(encoded []byte) (*common.Payload, error) { - payload := &common.Payload{} - if err := proto.Unmarshal(encoded, payload); err != nil { - return nil, fmt.Errorf("error unmarshalling Payload: %w", err) - } - return payload, nil -} - -// UnmarshalEnvelope unmarshals bytes to a Envelope -func UnmarshalEnvelope(encoded []byte) (*common.Envelope, error) { - envelope := &common.Envelope{} - if err := proto.Unmarshal(encoded, envelope); err != nil { - return nil, fmt.Errorf("error unmarshalling Envelope: %w", err) - } - return envelope, nil -} - -// UnmarshalChannelHeader unmarshals bytes to a ChannelHeader -func UnmarshalChannelHeader(bytes []byte) (*common.ChannelHeader, error) { - chdr := &common.ChannelHeader{} - if err := proto.Unmarshal(bytes, chdr); err != nil { - return nil, fmt.Errorf("error unmarshalling ChannelHeader: %w", err) - } - return chdr, nil -} - -// UnmarshalChaincodeID unmarshals bytes to a ChaincodeID -func UnmarshalChaincodeID(bytes []byte) (*peer.ChaincodeID, error) { - ccid := &peer.ChaincodeID{} - if err := proto.Unmarshal(bytes, ccid); err != nil { - return nil, fmt.Errorf("error unmarshalling ChaincodeID: %w", err) - } - return ccid, nil -} - -// UnmarshalSignatureHeader unmarshals bytes to a SignatureHeader -func UnmarshalSignatureHeader(bytes []byte) (*common.SignatureHeader, error) { - sh := &common.SignatureHeader{} - if err := proto.Unmarshal(bytes, sh); err != nil { - return nil, fmt.Errorf("error unmarshalling SignatureHeader: %w", err) - } - return sh, nil -} - -func UnmarshalSerializedIdentity(bytes []byte) (*msp.SerializedIdentity, error) { - sid := &msp.SerializedIdentity{} - if err := proto.Unmarshal(bytes, sid); err != nil { - return nil, fmt.Errorf("error unmarshalling SerializedIdentity: %w", err) - } - return sid, nil -} - -// UnmarshalHeader unmarshals bytes to a Header -func UnmarshalHeader(bytes []byte) (*common.Header, error) { - hdr := &common.Header{} - if err := proto.Unmarshal(bytes, hdr); err != nil { - return nil, fmt.Errorf("error unmarshalling Header: %w", err) - } - return hdr, nil -} - -// UnmarshalChaincodeHeaderExtension unmarshals bytes to a ChaincodeHeaderExtension -func UnmarshalChaincodeHeaderExtension(hdrExtension []byte) (*peer.ChaincodeHeaderExtension, error) { - chaincodeHdrExt := &peer.ChaincodeHeaderExtension{} - if err := proto.Unmarshal(hdrExtension, chaincodeHdrExt); err != nil { - return nil, fmt.Errorf("error unmarshalling ChaincodeHeaderExtension: %w", err) - } - return chaincodeHdrExt, nil -} - -// UnmarshalProposalResponse unmarshals bytes to a ProposalResponse -func UnmarshalProposalResponse(prBytes []byte) (*peer.ProposalResponse, error) { - proposalResponse := &peer.ProposalResponse{} - if err := proto.Unmarshal(prBytes, proposalResponse); err != nil { - return nil, fmt.Errorf("error unmarshalling ProposalResponse: %w", err) - } - return proposalResponse, nil -} - -// UnmarshalChaincodeAction unmarshals bytes to a ChaincodeAction -func UnmarshalChaincodeAction(caBytes []byte) (*peer.ChaincodeAction, error) { - chaincodeAction := &peer.ChaincodeAction{} - if err := proto.Unmarshal(caBytes, chaincodeAction); err != nil { - return nil, fmt.Errorf("error unmarshalling ChaincodeAction: %w", err) - } - return chaincodeAction, nil -} - -// UnmarshalResponse unmarshals bytes to a Response -func UnmarshalResponse(resBytes []byte) (*peer.Response, error) { - response := &peer.Response{} - if err := proto.Unmarshal(resBytes, response); err != nil { - return nil, fmt.Errorf("error unmarshalling Response: %w", err) - } - return response, nil -} - -// UnmarshalChaincodeEvents unmarshals bytes to a ChaincodeEvent -func UnmarshalChaincodeEvents(eBytes []byte) (*peer.ChaincodeEvent, error) { - chaincodeEvent := &peer.ChaincodeEvent{} - if err := proto.Unmarshal(eBytes, chaincodeEvent); err != nil { - return nil, fmt.Errorf("error unmarshalling ChaicnodeEvent: %w", err) - } - return chaincodeEvent, nil -} - -// UnmarshalProposalResponsePayload unmarshals bytes to a ProposalResponsePayload -func UnmarshalProposalResponsePayload(prpBytes []byte) (*peer.ProposalResponsePayload, error) { - prp := &peer.ProposalResponsePayload{} - if err := proto.Unmarshal(prpBytes, prp); err != nil { - return nil, fmt.Errorf("error unmarshalling ProposalResponsePayload: %w", err) - } - return prp, nil -} - -// UnmarshalProposal unmarshals bytes to a Proposal -func UnmarshalProposal(propBytes []byte) (*peer.Proposal, error) { - prop := &peer.Proposal{} - if err := proto.Unmarshal(propBytes, prop); err != nil { - return nil, fmt.Errorf("error unmarshalling Proposal: %w", err) - } - return prop, nil -} - -// UnmarshalTransaction unmarshals bytes to a Transaction -func UnmarshalTransaction(txBytes []byte) (*peer.Transaction, error) { - tx := &peer.Transaction{} - if err := proto.Unmarshal(txBytes, tx); err != nil { - return nil, fmt.Errorf("error unmarshalling Transaction: %w", err) - } - return tx, nil -} - -// UnmarshalChaincodeActionPayload unmarshals bytes to a ChaincodeActionPayload -func UnmarshalChaincodeActionPayload(capBytes []byte) (*peer.ChaincodeActionPayload, error) { - cap := &peer.ChaincodeActionPayload{} - if err := proto.Unmarshal(capBytes, cap); err != nil { - return nil, fmt.Errorf("error unmarshalling ChaincodeActionPayload: %w", err) - } - return cap, nil -} - -// UnmarshalChaincodeProposalPayload unmarshals bytes to a ChaincodeProposalPayload -func UnmarshalChaincodeProposalPayload(bytes []byte) (*peer.ChaincodeProposalPayload, error) { - cpp := &peer.ChaincodeProposalPayload{} - if err := proto.Unmarshal(bytes, cpp); err != nil { - return nil, fmt.Errorf("error unmarshalling ChaincodeProposalPayload: %w", err) - } - return cpp, nil -} - -// UnmarshalTxReadWriteSet unmarshals bytes to a TxReadWriteSet -func UnmarshalTxReadWriteSet(bytes []byte) (*rwset.TxReadWriteSet, error) { - rws := &rwset.TxReadWriteSet{} - if err := proto.Unmarshal(bytes, rws); err != nil { - return nil, fmt.Errorf("error unmarshalling TxReadWriteSet: %w", err) - } - return rws, nil -} - -// UnmarshalKVRWSet unmarshals bytes to a KVRWSet -func UnmarshalKVRWSet(bytes []byte) (*kvrwset.KVRWSet, error) { - rws := &kvrwset.KVRWSet{} - if err := proto.Unmarshal(bytes, rws); err != nil { - return nil, fmt.Errorf("error unmarshalling KVRWSet: %w", err) - } - return rws, nil -} - -// UnmarshalHashedRWSet unmarshals bytes to a HashedRWSet -func UnmarshalHashedRWSet(bytes []byte) (*kvrwset.HashedRWSet, error) { - hrws := &kvrwset.HashedRWSet{} - if err := proto.Unmarshal(bytes, hrws); err != nil { - return nil, fmt.Errorf("error unmarshalling HashedRWSet: %w", err) - } - return hrws, nil -} - -// UnmarshalSignaturePolicy unmarshals bytes to a SignaturePolicyEnvelope -func UnmarshalSignaturePolicy(bytes []byte) (*common.SignaturePolicyEnvelope, error) { - sp := &common.SignaturePolicyEnvelope{} - if err := proto.Unmarshal(bytes, sp); err != nil { - return nil, fmt.Errorf("error unmarshalling SignaturePolicyEnvelope: %w", err) - } - return sp, nil -} - -// UnmarshalPayloadOrPanic unmarshals bytes to a Payload structure or panics -// on error -func UnmarshalPayloadOrPanic(encoded []byte) *common.Payload { - payload, err := UnmarshalPayload(encoded) - if err != nil { - panic(err) - } - return payload -} - -// UnmarshalEnvelopeOrPanic unmarshals bytes to an Envelope structure or panics -// on error -func UnmarshalEnvelopeOrPanic(encoded []byte) *common.Envelope { - envelope, err := UnmarshalEnvelope(encoded) - if err != nil { - panic(err) - } - return envelope -} - -// UnmarshalBlockOrPanic unmarshals bytes to an Block or panics -// on error -func UnmarshalBlockOrPanic(encoded []byte) *common.Block { - block, err := UnmarshalBlock(encoded) - if err != nil { - panic(err) - } - return block -} - -// UnmarshalChannelHeaderOrPanic unmarshals bytes to a ChannelHeader or panics -// on error -func UnmarshalChannelHeaderOrPanic(bytes []byte) *common.ChannelHeader { - chdr, err := UnmarshalChannelHeader(bytes) - if err != nil { - panic(err) - } - return chdr -} - -// UnmarshalSignatureHeaderOrPanic unmarshals bytes to a SignatureHeader or panics -// on error -func UnmarshalSignatureHeaderOrPanic(bytes []byte) *common.SignatureHeader { - sighdr, err := UnmarshalSignatureHeader(bytes) - if err != nil { - panic(err) - } - return sighdr -} diff --git a/connectorhub/internal/shirorpc/envelope.go b/connectorhub/internal/shirorpc/envelope.go deleted file mode 100644 index d0c9ed2..0000000 --- a/connectorhub/internal/shirorpc/envelope.go +++ /dev/null @@ -1,18 +0,0 @@ -package shirorpc - -import ( - "encoding/json" -) - -// Envelope is a type used for chaincode responses that are in JSON -// format. The envelope adds a "dirty" boolean that is intended to -// signify whether the transaction has made committable changes to the -// ledger. -type Envelope struct { - // Payload contains the remainder of the JSON response. - Payload json.RawMessage `json:"payload"` - - // Dirty indicates whether the transaction has made committable - // changes to the ledger. - Dirty bool `json:"dirty"` -} diff --git a/connectorhub/internal/shirorpc/shirorpc.go b/connectorhub/internal/shirorpc/shirorpc.go deleted file mode 100644 index e375ec6..0000000 --- a/connectorhub/internal/shirorpc/shirorpc.go +++ /dev/null @@ -1,255 +0,0 @@ -// Package shirorpc has utilities for constructing messages compatible with -// shiroclient and substrate. -package shirorpc - -import ( - "crypto/rand" - "encoding/json" - "fmt" - "strings" - - "github.com/google/uuid" - "google.golang.org/protobuf/encoding/protojson" - "google.golang.org/protobuf/proto" -) - -const ( - connectorEndpoint = "$ch_callback" - repTransientKeyPrefix = "$ch_rep:" -) - -type shiroConnectorRequest struct { - reqs []json.RawMessage -} - -type transient map[string][]byte - -func (s *transient) String() string { - if s == nil { - return "" - } - p := make(map[string]string) - for k, v := range *s { - p[k] = string(v) - } - - return fmt.Sprintf("%v", p) -} - -const ( - hkdfSeedSize = 32 -) - -// seedGen generates random secret keys. -var seedGen = func() ([]byte, error) { - key := make([]byte, hkdfSeedSize) - _, err := rand.Read(key) - if err != nil { - return nil, err - } - return key, nil -} - -// Transient returns the transient data for the request. -func (s *shiroConnectorRequest) Transient() (transient, error) { - m := make(map[string][]byte) - for i, r := range s.reqs { - reqCopy := make([]byte, len(r)) - copy(reqCopy, r) - reqKey := fmt.Sprintf("%s%d", repTransientKeyPrefix, i) - m[reqKey] = reqCopy - } - seed, err := seedGen() - if err != nil { - return nil, fmt.Errorf("seed gen: %w", err) - } - m["csprng_seed_private"] = seed - return m, nil -} - -// ArgumentsBytes returns the arguments for the request. -func (s *shiroConnectorRequest) ArgumentsBytes() ([]byte, error) { - type Body struct{} // Keep all data private, in transientc - - body := &Body{} - - args := []*Body{body} - - metas := map[string]string{ - "$shiro_phylum": "latest", - } - - return jsonRPCBytes(connectorEndpoint, uuid.New(), args, metas) -} - -// MakeConnectorEventResponse constructs a shiroclient request message. -func MakeConnectorEventResponse(r json.RawMessage) (*shiroConnectorRequest, error) { - return &shiroConnectorRequest{ - reqs: []json.RawMessage{r}, - }, nil -} - -// Error is a generic application error -type Error interface { - // Code returns a numeric code categorizing the error. - Code() int - - // Message returns a generic error message that corresponds to the error Code. - Message() string - - // DataJSON returns JSON data returned by the application with the error, - // if any was provided. The slice returned by DataJSON will either be - // empty or it will contain valid serialized JSON data. - DataJSON() []byte - - // Error implements the error interface. - Error() string -} - -// errorString extracts a message from the error. -func errorString(e Error) string { - if len(e.DataJSON()) > 0 { - return fmt.Sprintf("%s: %s", e.Message(), e.DataJSON()) - } - return e.Message() -} - -// jsonrpc returns a json-rpc request map with the given method, id, and -// params. -// -// Omitting params is intepretted as passing an empty slice (e.g. -// []interface{}{}) to default to the strictest possible intepretation -- a -// shiro endpoint defined to take zero arguments. Passing an empty map would -// work for endpoints of any arity but that is not necessarily cleanly handled -// in a phylum. Because of a blockchain's inherent immutability a strict -// default should result in a cleaner committed ledger. -func jsonrpc(method string, id interface{}, params interface{}, metas map[string]string) (map[string]interface{}, error) { - if params == nil { - params = []interface{}{} - } - m := map[string]interface{}{ - "jsonrpc": "2.0", - "method": method, - "params": params, - "id": id, - } - for k, v := range metas { - if !strings.HasPrefix(k, "$") { - return nil, fmt.Errorf("invalid meta param [%s]", k) - } - m[k] = v - } - return m, nil -} - -// jsonRPCBytes returns a json-rpc request encoded as JSON -func jsonRPCBytes(method string, id interface{}, params interface{}, metas map[string]string) ([]byte, error) { - m, err := jsonrpc(method, id, params, metas) - if err != nil { - return nil, err - } - return json.Marshal(m) -} - -type jsonRPCError struct { - Message string `json:"message"` - Data json.RawMessage `json:"data"` - Code int `json:"code"` -} - -type jsonRPCErrorWrapper struct { - e *jsonRPCError -} - -// Code implements Error. -func (e *jsonRPCErrorWrapper) Code() int { - return e.e.Code -} - -// Message implements Error. -func (e *jsonRPCErrorWrapper) Message() string { - return e.e.Message -} - -// DataJSON implements Error. -func (e *jsonRPCErrorWrapper) DataJSON() []byte { - if len(e.e.Data) == 0 { - return e.e.Data - } - b := make([]byte, len(e.e.Data)) - copy(b, e.e.Data) - return b -} - -// Error implements error. -func (e *jsonRPCErrorWrapper) Error() string { - return errorString(e) -} - -// JSONRPCResponse is a json-rpc response -type JSONRPCResponse struct { - ID interface{} `json:"id"` - RPCError *jsonRPCError `json:"error"` - JSONRPC string `json:"jsonrpc"` - TxID string `json:"$transaction_id"` - Result json.RawMessage `json:"result"` -} - -// ErrTxInvalid indicates the tx was invalidated -var ErrTxInvalid = fmt.Errorf("tx invalid") - -// NewJSONRPCResonse constructs a response from bytes. -func MakeResponse(respBytes []byte) (*JSONRPCResponse, error) { - var envelope Envelope - - err := json.Unmarshal(respBytes, &envelope) - if err != nil { - return nil, fmt.Errorf("response envelope: %w", err) - } - - respBody := envelope.Payload - - if !envelope.Dirty { - return nil, ErrTxInvalid - } - - resp := &JSONRPCResponse{} - err = json.Unmarshal(respBody, resp) - if err != nil { - return nil, err - } - return resp, nil -} - -// UnmarshalTo unmarshals the response's result to dst. -func (r *JSONRPCResponse) UnmarshalTo(dst interface{}) error { - message, ok := dst.(proto.Message) - if ok { - return protojson.Unmarshal([]byte(r.Result), message) - } - return json.Unmarshal([]byte(r.Result), dst) -} - -// ResultJSON returns the raw JSON result from the response. -func (r *JSONRPCResponse) ResultJSON() []byte { - if len(r.Result) == 0 { - return nil - } - - b := make([]byte, len(r.Result)) - copy(b, r.Result) - return b -} - -// TransactionID returns the transaction ID from the response. -func (r *JSONRPCResponse) TransactionID() string { - return r.TxID -} - -// Error returns the error from the response, if there was any. -func (r *JSONRPCResponse) Error() Error { - if r.RPCError == nil { - return nil - } - return &jsonRPCErrorWrapper{r.RPCError} -} diff --git a/connectorhub/main.go b/connectorhub/main.go deleted file mode 100644 index 5ed4d80..0000000 --- a/connectorhub/main.go +++ /dev/null @@ -1,251 +0,0 @@ -// Package connectorhub demonstrates usage of the events lib. -// -// Bring up the local network `make up` and start the service running: -// -// go run . start -// -// The service will listen for events, retrieve the request, process the -// request using a stub, and return a stub response. -// -// You can trigger events using this script in `fabric/` dir: -// -// > cd fabric && ./client.sh create_claim '[{}]' -// -// { -// "claim": { -// "claim_id": "9b195776-961e-4d2b-9820-efc421f8959a", -// "state": "CLAIM_STATE_NEW" -// } -// } -// -// By default the service uses a file checkpointer, stored at -// `/tmp/checkpoint.tmp`. If you wipe your network make sure you also -// wipe your checkpoint file, otherwise the service gets stuck trying to -// fetch future blocks. -// -// NOTE: there's something not quite right with the shiroclient-gw -// notify and phylum version. When running ./client.sh if you get -// "Method not found", you can try running `make init`, or deleting -// build/phylum_version and running `make init`. If that still doesn't -// fix it, run `make down up`, wait a few seconds, and -// `cd fabric && make init` again. -package main - -// TODO: persist last block height state -// TODO: reliability (e.g., "best effort" delivery to connector and back) -// TODO: connector router logic (replace processRequest) - -import ( - "bufio" - "context" - "encoding/json" - "fmt" - "os" - "os/signal" - - "github.com/alecthomas/kong" - "github.com/luthersystems/sandbox/connectorhub/internal/events" - "github.com/sirupsen/logrus" -) - -var gatewayCfg = &events.GatewayConfig{ - MSPID: "Org1MSP", - UserID: "User1", // Admin - OrgDomain: "org1.luther.systems", - CryptoConfigRootPath: "../fabric/crypto-config", - PeerName: "peer0", - PeerEndpoint: "dns:///localhost:7051", - ChannelName: "luther", - ChaincodeID: "sandbox", -} - -type baseCmd struct { - ctx context.Context -} - -type cli struct { - Start g `cmd:"" help:"Start the connector hub"` -} - -type g struct { - baseCmd - runSettings -} - -type runSettings struct { - CheckpointFile string `short:"c" type:"path" help:"Path to checkpoint file" default:"/tmp/checkpoint.tmp" env:"CH_CHECKPOINT_FILE"` - StartBlockNumber uint64 `short:"b" help:"Block to start playing events from" default:"1"` - Verbose bool `short:"v" help:"Verbose logs" default:"false"` - Step bool `short:"s" help:"Interactive mode to pause for user input before processing event" default:"false"` -} - -func init() { - logrus.SetFormatter(&logrus.TextFormatter{ - DisableColors: true, - FullTimestamp: true, - }) -} - -func setupInterruptHandler(cancel context.CancelFunc) { - c := make(chan os.Signal, 1) - signal.Notify(c, os.Interrupt) - go func() { - for range c { - fmt.Println("\nReceived an interrupt, stopping tasks...") - cancel() - } - }() -} - -func main() { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - setupInterruptHandler(cancel) - - cli := &cli{ - Start: g{baseCmd: baseCmd{ctx: ctx}}, - } - - kctx := kong.Parse(cli) - err := kctx.Run() - kctx.FatalIfErrorf(err) -} - -// processRequest receives a request from the phylum, and returns a response, or error. -// TODO: route request to connector, and return connector response, instead of stub. -func processRequest(ctx context.Context, req json.RawMessage, reqErr error) (json.RawMessage, error) { - logrus.WithContext(ctx). - WithField("req", string(req)). - WithError(reqErr). - Info("processing phylum request") - if reqErr != nil { - return nil, fmt.Errorf("request had error: %w", reqErr) - } - - type OKResp struct { - Status string `json:"status"` - } - - responseStub := OKResp{ - Status: "OK", - } - - respJSON, err := json.Marshal(responseStub) - if err != nil { - return nil, fmt.Errorf("failed to marshal response: %w", err) - } - logrus.WithContext(ctx).Debug("returning stub OK response") - - return respJSON, nil -} - -func waitForUser(ctx context.Context) error { - logrus.WithContext(ctx).WithField("demo_log", true).Info("Press 'Enter' to continue (or Ctrl-C to abort)...") - - done := make(chan error) - - go func() { - _, err := bufio.NewReader(os.Stdin).ReadBytes('\n') - done <- err - close(done) - }() - - select { - case <-ctx.Done(): - return ctx.Err() - case err := <-done: - return err - } -} - -func prettyPrintPlatformRequest(event *events.Event) { - logrus.WithFields(logrus.Fields{ - "demo_log": true, - "claim_id": event.ObjectID(), - }).Infof("Platform sent request (%s) to the system [%s] via connector [%s]", event.RequestEnglish(), event.RequestSystem(), event.RequestMSPID()) -} - -func prettyPrintConnectorResponse(event *events.Event) { - logrus.WithFields(logrus.Fields{ - "demo_log": true, - "claim_id": event.ObjectID(), - }).Infof("[%s] response (%s) is sent to Platform via connector [%s]", event.RequestSystem(), event.RequestEnglish(), event.RequestMSPID()) -} - -func (s *g) Run() error { - if s.Verbose { - logrus.SetLevel(logrus.DebugLevel) - } - - ctx := s.ctx - - var gatewayOpts []events.Option - if s.StartBlockNumber > 0 { - gatewayOpts = append(gatewayOpts, events.WithStartBlock(uint64(s.StartBlockNumber))) - } - if s.CheckpointFile != "" { - gatewayOpts = append(gatewayOpts, events.WithCheckpointFile(s.CheckpointFile)) - } - logrus.WithContext(ctx).Debug("connecting to gateway") - - stream, err := events.GatewayEvents(gatewayCfg, gatewayOpts...) - if err != nil { - return fmt.Errorf("gateway events: %w", err) - } - - ctx, cancel := context.WithCancel(s.ctx) - - go func() { - logrus.WithContext(ctx).Info("listening for events") - for { - select { - case event := <-stream.Listen(): - if event == nil { - logrus.WithContext(ctx).Info("nil event (stale checkpoint file?), exiting...") - return - } - req, err := event.RequestBody() - if err != nil { - logrus.WithContext(ctx).WithError(err).Error("event received with error") - } - - if s.Step { - prettyPrintPlatformRequest(event) - if err := waitForUser(ctx); err != nil { - return - } - } - - resp, err := processRequest(ctx, req, err) - - if s.Step { - prettyPrintConnectorResponse(event) - if err := waitForUser(ctx); err != nil { - return - } - } - - if err := event.Callback(resp, err); err != nil { - logrus.WithContext(ctx).WithError(err).Error("event callback failed") - } else { - logrus.WithContext(ctx).Debug("callback successful") - } - case <-ctx.Done(): - logrus.WithContext(ctx).Info("event listener shutting down...") - return - } - } - }() - - <-ctx.Done() - logrus.WithContext(ctx).Info("signal handler called") - cancel() - if err := stream.Done(); err != nil { - logrus.WithError(err).Debug("stream done") - } - - logrus.WithContext(ctx).Info("connectorhub exited!") - - return nil -} From e9039d128f17f1742e6ccf6120cd3f6f91ac6ce1 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Tue, 28 Jan 2025 19:08:11 -0800 Subject: [PATCH 08/23] Use proper connectors --- common.config.mk | 2 +- phylum/claim.lisp | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/common.config.mk b/common.config.mk index 075b534..cf0558e 100644 --- a/common.config.mk +++ b/common.config.mk @@ -19,7 +19,7 @@ BUILDENV_TAG=v0.0.85 # and should be kept up-to-date to leverage the latest platform features. # See release notes: https://docs.luthersystems.com/luther/platform/release-notes #SUBSTRATE_VERSION=v2.205.6 -SUBSTRATE_VERSION=v3.0.1-SNAPSHOT.15-1b4f632c +SUBSTRATE_VERSION=v3.0.1-SNAPSHOT.16-3df834e3 SHIROCLIENT_VERSION=${SUBSTRATE_VERSION} CONNECTORHUB_VERSION=${SUBSTRATE_VERSION} SHIROTESTER_VERSION=${SUBSTRATE_VERSION} diff --git a/phylum/claim.lisp b/phylum/claim.lisp index 62e9237..3da8aba 100644 --- a/phylum/claim.lisp +++ b/phylum/claim.lisp @@ -37,10 +37,10 @@ "EQUIFAX_ID_VERIFY" "Org1MSP" "POSTGRES_CLAIMS_DB" "Org1MSP" "CAMUNDA_WORKFLOW" "Org1MSP" - "PDF_INVOICE" "Org1MSP" + "INVOICE_NINJA" "Org1MSP" "CAMUNDA_TASKLIST" "Org1MSP" "EMAIL" "Org1MSP" - "GOCARDLESS_PAYMENT" "Org1MSP")) + "STRIPE_PAYMENT" "Org1MSP")) (defun event-desc-record (sys eng) (denil-map (sorted-map "msp" (default (get sys-msp-map sys) "Org1MSP") @@ -52,14 +52,13 @@ (sorted-map "CLAIM_STATE_UNSPECIFIED" () "CLAIM_STATE_NEW" (event-desc-record "CLAIMS_PORTAL_UI" "input claim details") - ; TODO: fix and replace with equifax "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" (event-desc-record "EQUIFAX_ID_VERIFY" "verify customer identity") "CLAIM_STATE_LOECLAIM_ID_VERIFIED" (event-desc-record "CAMUNDA_WORKFLOW" "collect policy details") "CLAIM_STATE_OOECLAIM_REVIEWED" (event-desc-record "POSTGRES_CLAIMS_DB" "verify policy") - "CLAIM_STATE_OOECLAIM_VALIDATED" (event-desc-record "PDF_INVOICE" "generate invoice") + "CLAIM_STATE_OOECLAIM_VALIDATED" (event-desc-record "INVOICE_NINJA" "generate invoice") "CLAIM_STATE_LOEFIN_INVOICE_ISSUED" (event-desc-record "CAMUNDA_TASKLIST" "approve invoice") "CLAIM_STATE_OOEFIN_INVOICE_REVIEWED" (event-desc-record "EMAIL" "email invoice") - "CLAIM_STATE_OOEFIN_INVOICE_APPROVED" (event-desc-record "GOCARDLESS_PAYMENT" "make payment") + "CLAIM_STATE_OOEFIN_INVOICE_APPROVED" (event-desc-record "STRIPE_PAYMENT" "make payment") "CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED" () "CLAIM_STATE_DONE" ())) @@ -136,7 +135,8 @@ (add-event (mk-psql-req "SELECT 1;"))) ((equal? state "CLAIM_STATE_OOECLAIM_VALIDATED") - (add-event (mk-pdfserv-req "hello world"))) + (add-event (mk-invoice-ninja-email-req + (sorted-map "invoice_id" "mock_invoice_id")))) ((equal? state "CLAIM_STATE_LOEFIN_INVOICE_ISSUED") (add-event (mk-camunda-inspect-req "a1" "true"))) @@ -148,9 +148,13 @@ "Hello, this is a test email"))) ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_APPROVED") - (add-event (mk-gocardless-req - (sorted-map "amount" 100 - "currency" "USD")))) + (add-event (mk-stripe-charge-req + (sorted-map + "customer_id" "mock_customer_id" + "amount" 2000 + "currency" "usd" + "source_id" "mock_source_id" + "description" "Test Stripe charge")))) ((equal? state "CLAIM_STATE_OOEFIN_INVOICE_TRIGGERED") ; done From 305269ab29e3b7385c93915904bce6d2a530d13d Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Tue, 25 Feb 2025 15:20:24 -0800 Subject: [PATCH 09/23] wip --- api/pb/v1/oracle.pb.go | 809 ++++++++++++++++++++++++------- api/pb/v1/oracle.proto | 117 +++-- api/pb/v1/oracle.swagger.json | 20 +- api/srvpb/v1/oracle.pb.go | 10 +- api/srvpb/v1/oracle.pb.gw.go | 18 + api/srvpb/v1/oracle.swagger.json | 298 ++++++++++-- phylum/claim.lisp | 20 +- phylum/claim_test.lisp | 25 +- 8 files changed, 1058 insertions(+), 259 deletions(-) diff --git a/api/pb/v1/oracle.pb.go b/api/pb/v1/oracle.pb.go index 93d4e49..771d2fe 100644 --- a/api/pb/v1/oracle.pb.go +++ b/api/pb/v1/oracle.pb.go @@ -1,10 +1,9 @@ -// Copyright © 2024 Luther Systems, Ltd. All right reserved. - +// Copyright © 2024 Luther Systems, Ltd. All rights reserved. // API Models and Documentation. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.1 +// protoc-gen-go v1.36.4 // protoc (unknown) // source: pb/v1/oracle.proto @@ -16,6 +15,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -25,19 +25,129 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Represents a nationality using an enum for structured validation. +type Nationality int32 + +const ( + Nationality_NATIONALITY_UNSPECIFIED Nationality = 0 // Default value (should not be used) + Nationality_GB Nationality = 1 // United Kingdom + Nationality_US Nationality = 2 // United States + Nationality_FR Nationality = 3 // France + Nationality_DE Nationality = 4 // Germany +) + +// Enum value maps for Nationality. +var ( + Nationality_name = map[int32]string{ + 0: "NATIONALITY_UNSPECIFIED", + 1: "GB", + 2: "US", + 3: "FR", + 4: "DE", + } + Nationality_value = map[string]int32{ + "NATIONALITY_UNSPECIFIED": 0, + "GB": 1, + "US": 2, + "FR": 3, + "DE": 4, + } +) + +func (x Nationality) Enum() *Nationality { + p := new(Nationality) + *p = x + return p +} + +func (x Nationality) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Nationality) Descriptor() protoreflect.EnumDescriptor { + return file_pb_v1_oracle_proto_enumTypes[0].Descriptor() +} + +func (Nationality) Type() protoreflect.EnumType { + return &file_pb_v1_oracle_proto_enumTypes[0] +} + +func (x Nationality) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Nationality.Descriptor instead. +func (Nationality) EnumDescriptor() ([]byte, []int) { + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{0} +} + +// Represents the final outcome of a claim. +type Status int32 + +const ( + Status_STATUS_UNSPECIFIED Status = 0 // Default value (should not be used) + Status_STATUS_APPROVED Status = 1 // Claim was approved + Status_STATUS_DECLINED Status = 2 // Claim was declined + Status_STATUS_PAID Status = 3 // Claim has been paid out +) + +// Enum value maps for Status. +var ( + Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "STATUS_APPROVED", + 2: "STATUS_DECLINED", + 3: "STATUS_PAID", + } + Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "STATUS_APPROVED": 1, + "STATUS_DECLINED": 2, + "STATUS_PAID": 3, + } +) + +func (x Status) Enum() *Status { + p := new(Status) + *p = x + return p +} + +func (x Status) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Status) Descriptor() protoreflect.EnumDescriptor { + return file_pb_v1_oracle_proto_enumTypes[1].Descriptor() +} + +func (Status) Type() protoreflect.EnumType { + return &file_pb_v1_oracle_proto_enumTypes[1] +} + +func (x Status) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Status.Descriptor instead. +func (Status) EnumDescriptor() ([]byte, []int) { + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{1} +} + +// Represents the processing state of the claim (process progress). type ClaimState int32 const ( - ClaimState_CLAIM_STATE_UNSPECIFIED ClaimState = 0 - ClaimState_CLAIM_STATE_NEW ClaimState = 1 - ClaimState_CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS ClaimState = 2 - ClaimState_CLAIM_STATE_LOECLAIM_ID_VERIFIED ClaimState = 3 - ClaimState_CLAIM_STATE_OOECLAIM_REVIEWED ClaimState = 4 - ClaimState_CLAIM_STATE_OOECLAIM_VALIDATED ClaimState = 5 - ClaimState_CLAIM_STATE_LOEFIN_INVOICE_ISSUED ClaimState = 6 - ClaimState_CLAIM_STATE_OOEFIN_INVOICE_REVIEWED ClaimState = 7 - ClaimState_CLAIM_STATE_OOEFIN_INVOICE_APPROVED ClaimState = 8 - ClaimState_CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED ClaimState = 9 + ClaimState_CLAIM_STATE_UNSPECIFIED ClaimState = 0 // Default value (should not be used) + ClaimState_CLAIM_STATE_NEW ClaimState = 1 // Claim was created + ClaimState_CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED ClaimState = 2 // Claimant details submitted + ClaimState_CLAIM_STATE_LOECLAIM_ID_VERIFIED ClaimState = 3 // Identity verified + ClaimState_CLAIM_STATE_OOECLAIM_REVIEWED ClaimState = 4 // Claim reviewed + ClaimState_CLAIM_STATE_OOECLAIM_VALIDATED ClaimState = 5 // Claim validated + ClaimState_CLAIM_STATE_LOEFIN_INVOICE_ISSUED ClaimState = 6 // Invoice issued + ClaimState_CLAIM_STATE_OOEFIN_INVOICE_REVIEWED ClaimState = 7 // Invoice reviewed + ClaimState_CLAIM_STATE_OOEFIN_INVOICE_APPROVED ClaimState = 8 // Invoice approved + ClaimState_CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED ClaimState = 9 // Payment triggered ) // Enum value maps for ClaimState. @@ -45,7 +155,7 @@ var ( ClaimState_name = map[int32]string{ 0: "CLAIM_STATE_UNSPECIFIED", 1: "CLAIM_STATE_NEW", - 2: "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS", + 2: "CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED", 3: "CLAIM_STATE_LOECLAIM_ID_VERIFIED", 4: "CLAIM_STATE_OOECLAIM_REVIEWED", 5: "CLAIM_STATE_OOECLAIM_VALIDATED", @@ -57,7 +167,7 @@ var ( ClaimState_value = map[string]int32{ "CLAIM_STATE_UNSPECIFIED": 0, "CLAIM_STATE_NEW": 1, - "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS": 2, + "CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED": 2, "CLAIM_STATE_LOECLAIM_ID_VERIFIED": 3, "CLAIM_STATE_OOECLAIM_REVIEWED": 4, "CLAIM_STATE_OOECLAIM_VALIDATED": 5, @@ -79,11 +189,11 @@ func (x ClaimState) String() string { } func (ClaimState) Descriptor() protoreflect.EnumDescriptor { - return file_pb_v1_oracle_proto_enumTypes[0].Descriptor() + return file_pb_v1_oracle_proto_enumTypes[2].Descriptor() } func (ClaimState) Type() protoreflect.EnumType { - return &file_pb_v1_oracle_proto_enumTypes[0] + return &file_pb_v1_oracle_proto_enumTypes[2] } func (x ClaimState) Number() protoreflect.EnumNumber { @@ -92,18 +202,148 @@ func (x ClaimState) Number() protoreflect.EnumNumber { // Deprecated: Use ClaimState.Descriptor instead. func (ClaimState) EnumDescriptor() ([]byte, []int) { + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{2} +} + +// Stores details of the claimant (person making the claim). +type Claimant struct { + state protoimpl.MessageState `protogen:"open.v1"` + AccountNumber string `protobuf:"bytes,1,opt,name=account_number,json=accountNumber,proto3" json:"account_number,omitempty"` // Bank account number (string to support leading zeros) + AccountSortCode string `protobuf:"bytes,2,opt,name=account_sort_code,json=accountSortCode,proto3" json:"account_sort_code,omitempty"` // Bank sort code (string to avoid leading-zero loss) + Dob string `protobuf:"bytes,3,opt,name=dob,proto3" json:"dob,omitempty"` // Date of birth (YYYY-MM-DD) + Surname string `protobuf:"bytes,4,opt,name=surname,proto3" json:"surname,omitempty"` // Surname (last name) + Forename string `protobuf:"bytes,5,opt,name=forename,proto3" json:"forename,omitempty"` // Forename (first name) + FullAddress string `protobuf:"bytes,6,opt,name=full_address,json=fullAddress,proto3" json:"full_address,omitempty"` // Full address in a single field + AddressNumber string `protobuf:"bytes,7,opt,name=address_number,json=addressNumber,proto3" json:"address_number,omitempty"` // House/building number + AddressStreet1 string `protobuf:"bytes,8,opt,name=address_street1,json=addressStreet1,proto3" json:"address_street1,omitempty"` // Street address + AddressPostcode string `protobuf:"bytes,9,opt,name=address_postcode,json=addressPostcode,proto3" json:"address_postcode,omitempty"` // Postal code (ZIP code) + AddressPostTown string `protobuf:"bytes,10,opt,name=address_post_town,json=addressPostTown,proto3" json:"address_post_town,omitempty"` // Post town or city + Nationality Nationality `protobuf:"varint,11,opt,name=nationality,proto3,enum=pb.v1.Nationality" json:"nationality,omitempty"` // Nationality, stored as an enum + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Claimant) Reset() { + *x = Claimant{} + mi := &file_pb_v1_oracle_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Claimant) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Claimant) ProtoMessage() {} + +func (x *Claimant) ProtoReflect() protoreflect.Message { + mi := &file_pb_v1_oracle_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Claimant.ProtoReflect.Descriptor instead. +func (*Claimant) Descriptor() ([]byte, []int) { return file_pb_v1_oracle_proto_rawDescGZIP(), []int{0} } +func (x *Claimant) GetAccountNumber() string { + if x != nil { + return x.AccountNumber + } + return "" +} + +func (x *Claimant) GetAccountSortCode() string { + if x != nil { + return x.AccountSortCode + } + return "" +} + +func (x *Claimant) GetDob() string { + if x != nil { + return x.Dob + } + return "" +} + +func (x *Claimant) GetSurname() string { + if x != nil { + return x.Surname + } + return "" +} + +func (x *Claimant) GetForename() string { + if x != nil { + return x.Forename + } + return "" +} + +func (x *Claimant) GetFullAddress() string { + if x != nil { + return x.FullAddress + } + return "" +} + +func (x *Claimant) GetAddressNumber() string { + if x != nil { + return x.AddressNumber + } + return "" +} + +func (x *Claimant) GetAddressStreet1() string { + if x != nil { + return x.AddressStreet1 + } + return "" +} + +func (x *Claimant) GetAddressPostcode() string { + if x != nil { + return x.AddressPostcode + } + return "" +} + +func (x *Claimant) GetAddressPostTown() string { + if x != nil { + return x.AddressPostTown + } + return "" +} + +func (x *Claimant) GetNationality() Nationality { + if x != nil { + return x.Nationality + } + return Nationality_NATIONALITY_UNSPECIFIED +} + +// Request to create a claim. type CreateClaimRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Claimant *Claimant `protobuf:"bytes,1,opt,name=claimant,proto3" json:"claimant,omitempty"` // Details of the claimant + DateOfAccident string `protobuf:"bytes,2,opt,name=date_of_accident,json=dateOfAccident,proto3" json:"date_of_accident,omitempty"` // Date when the accident occurred (YYYY-MM-DD) + DamageAmount int64 `protobuf:"varint,3,opt,name=damage_amount,json=damageAmount,proto3" json:"damage_amount,omitempty"` // Damage amount (stored in cents to avoid floating point issues) + ClaimReason string `protobuf:"bytes,4,opt,name=claim_reason,json=claimReason,proto3" json:"claim_reason,omitempty"` // Brief description of the reason for the claim + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CreateClaimRequest) Reset() { *x = CreateClaimRequest{} - mi := &file_pb_v1_oracle_proto_msgTypes[0] + mi := &file_pb_v1_oracle_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -115,7 +355,7 @@ func (x *CreateClaimRequest) String() string { func (*CreateClaimRequest) ProtoMessage() {} func (x *CreateClaimRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[0] + mi := &file_pb_v1_oracle_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -128,20 +368,52 @@ func (x *CreateClaimRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateClaimRequest.ProtoReflect.Descriptor instead. func (*CreateClaimRequest) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{0} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateClaimRequest) GetClaimant() *Claimant { + if x != nil { + return x.Claimant + } + return nil +} + +func (x *CreateClaimRequest) GetDateOfAccident() string { + if x != nil { + return x.DateOfAccident + } + return "" +} + +func (x *CreateClaimRequest) GetDamageAmount() int64 { + if x != nil { + return x.DamageAmount + } + return 0 } +func (x *CreateClaimRequest) GetClaimReason() string { + if x != nil { + return x.ClaimReason + } + return "" +} + +// Response for creating a claim. type CreateClaimResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3" json:"exception,omitempty"` - Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3" json:"claim,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Result: + // + // *CreateClaimResponse_Exception + // *CreateClaimResponse_Claim + Result isCreateClaimResponse_Result `protobuf_oneof:"result"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateClaimResponse) Reset() { *x = CreateClaimResponse{} - mi := &file_pb_v1_oracle_proto_msgTypes[1] + mi := &file_pb_v1_oracle_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -153,7 +425,7 @@ func (x *CreateClaimResponse) String() string { func (*CreateClaimResponse) ProtoMessage() {} func (x *CreateClaimResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[1] + mi := &file_pb_v1_oracle_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -166,33 +438,61 @@ func (x *CreateClaimResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateClaimResponse.ProtoReflect.Descriptor instead. func (*CreateClaimResponse) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{1} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{2} +} + +func (x *CreateClaimResponse) GetResult() isCreateClaimResponse_Result { + if x != nil { + return x.Result + } + return nil } func (x *CreateClaimResponse) GetException() *v1.Exception { if x != nil { - return x.Exception + if x, ok := x.Result.(*CreateClaimResponse_Exception); ok { + return x.Exception + } } return nil } func (x *CreateClaimResponse) GetClaim() *Claim { if x != nil { - return x.Claim + if x, ok := x.Result.(*CreateClaimResponse_Claim); ok { + return x.Claim + } } return nil } +type isCreateClaimResponse_Result interface { + isCreateClaimResponse_Result() +} + +type CreateClaimResponse_Exception struct { + Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3,oneof"` // Exception details if an error occurred +} + +type CreateClaimResponse_Claim struct { + Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3,oneof"` // The created claim if successful +} + +func (*CreateClaimResponse_Exception) isCreateClaimResponse_Result() {} + +func (*CreateClaimResponse_Claim) isCreateClaimResponse_Result() {} + +// Request to update an existing claim. type UpdateClaimRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - Claim *Claim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` + Claim *Claim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` // The claim details with updates unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *UpdateClaimRequest) Reset() { *x = UpdateClaimRequest{} - mi := &file_pb_v1_oracle_proto_msgTypes[2] + mi := &file_pb_v1_oracle_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -204,7 +504,7 @@ func (x *UpdateClaimRequest) String() string { func (*UpdateClaimRequest) ProtoMessage() {} func (x *UpdateClaimRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[2] + mi := &file_pb_v1_oracle_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -217,7 +517,7 @@ func (x *UpdateClaimRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateClaimRequest.ProtoReflect.Descriptor instead. func (*UpdateClaimRequest) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{2} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{3} } func (x *UpdateClaimRequest) GetClaim() *Claim { @@ -227,17 +527,21 @@ func (x *UpdateClaimRequest) GetClaim() *Claim { return nil } +// Response for updating a claim. type UpdateClaimResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3" json:"exception,omitempty"` - Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3" json:"claim,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Result: + // + // *UpdateClaimResponse_Exception + // *UpdateClaimResponse_Claim + Result isUpdateClaimResponse_Result `protobuf_oneof:"result"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *UpdateClaimResponse) Reset() { *x = UpdateClaimResponse{} - mi := &file_pb_v1_oracle_proto_msgTypes[3] + mi := &file_pb_v1_oracle_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -249,7 +553,7 @@ func (x *UpdateClaimResponse) String() string { func (*UpdateClaimResponse) ProtoMessage() {} func (x *UpdateClaimResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[3] + mi := &file_pb_v1_oracle_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -262,33 +566,61 @@ func (x *UpdateClaimResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateClaimResponse.ProtoReflect.Descriptor instead. func (*UpdateClaimResponse) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{3} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{4} +} + +func (x *UpdateClaimResponse) GetResult() isUpdateClaimResponse_Result { + if x != nil { + return x.Result + } + return nil } func (x *UpdateClaimResponse) GetException() *v1.Exception { if x != nil { - return x.Exception + if x, ok := x.Result.(*UpdateClaimResponse_Exception); ok { + return x.Exception + } } return nil } func (x *UpdateClaimResponse) GetClaim() *Claim { if x != nil { - return x.Claim + if x, ok := x.Result.(*UpdateClaimResponse_Claim); ok { + return x.Claim + } } return nil } +type isUpdateClaimResponse_Result interface { + isUpdateClaimResponse_Result() +} + +type UpdateClaimResponse_Exception struct { + Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3,oneof"` // Exception details if an error occurred +} + +type UpdateClaimResponse_Claim struct { + Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3,oneof"` // The updated claim if successful +} + +func (*UpdateClaimResponse_Exception) isUpdateClaimResponse_Result() {} + +func (*UpdateClaimResponse_Claim) isUpdateClaimResponse_Result() {} + +// Request to retrieve a claim by its unique ID. type GetClaimRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` // Unique identifier of the claim to fetch unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *GetClaimRequest) Reset() { *x = GetClaimRequest{} - mi := &file_pb_v1_oracle_proto_msgTypes[4] + mi := &file_pb_v1_oracle_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -300,7 +632,7 @@ func (x *GetClaimRequest) String() string { func (*GetClaimRequest) ProtoMessage() {} func (x *GetClaimRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[4] + mi := &file_pb_v1_oracle_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -313,7 +645,7 @@ func (x *GetClaimRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClaimRequest.ProtoReflect.Descriptor instead. func (*GetClaimRequest) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{4} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{5} } func (x *GetClaimRequest) GetClaimId() string { @@ -323,17 +655,21 @@ func (x *GetClaimRequest) GetClaimId() string { return "" } +// Response containing the requested claim. type GetClaimResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3" json:"exception,omitempty"` - Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3" json:"claim,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Result: + // + // *GetClaimResponse_Exception + // *GetClaimResponse_Claim + Result isGetClaimResponse_Result `protobuf_oneof:"result"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *GetClaimResponse) Reset() { *x = GetClaimResponse{} - mi := &file_pb_v1_oracle_proto_msgTypes[5] + mi := &file_pb_v1_oracle_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -345,7 +681,7 @@ func (x *GetClaimResponse) String() string { func (*GetClaimResponse) ProtoMessage() {} func (x *GetClaimResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[5] + mi := &file_pb_v1_oracle_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -358,37 +694,67 @@ func (x *GetClaimResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClaimResponse.ProtoReflect.Descriptor instead. func (*GetClaimResponse) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{5} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{6} +} + +func (x *GetClaimResponse) GetResult() isGetClaimResponse_Result { + if x != nil { + return x.Result + } + return nil } func (x *GetClaimResponse) GetException() *v1.Exception { if x != nil { - return x.Exception + if x, ok := x.Result.(*GetClaimResponse_Exception); ok { + return x.Exception + } } return nil } func (x *GetClaimResponse) GetClaim() *Claim { if x != nil { - return x.Claim + if x, ok := x.Result.(*GetClaimResponse_Claim); ok { + return x.Claim + } } return nil } -// Claim represents an insurance claim. +type isGetClaimResponse_Result interface { + isGetClaimResponse_Result() +} + +type GetClaimResponse_Exception struct { + Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3,oneof"` // Exception details if an error occurred +} + +type GetClaimResponse_Claim struct { + Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3,oneof"` // The retrieved claim if successful +} + +func (*GetClaimResponse_Exception) isGetClaimResponse_Result() {} + +func (*GetClaimResponse_Claim) isGetClaimResponse_Result() {} + +// Represents an insurance claim, storing its lifecycle, status, and related claimant details. type Claim struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Unique ID for the claim. Immutable. Set by backend. - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` - // State of the claim. - State ClaimState `protobuf:"varint,2,opt,name=state,proto3,enum=pb.v1.ClaimState" json:"state,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` // Unique ID assigned by the backend (immutable) + State ClaimState `protobuf:"varint,2,opt,name=state,proto3,enum=pb.v1.ClaimState" json:"state,omitempty"` // The current internal processing state of the claim + Claimant *Claimant `protobuf:"bytes,3,opt,name=claimant,proto3" json:"claimant,omitempty"` // Claimant details + DateOfAccident string `protobuf:"bytes,4,opt,name=date_of_accident,json=dateOfAccident,proto3" json:"date_of_accident,omitempty"` // Date when the accident occurred (YYYY-MM-DD) + DamageAmount int64 `protobuf:"varint,5,opt,name=damage_amount,json=damageAmount,proto3" json:"damage_amount,omitempty"` // Damage amount (stored in cents to prevent floating point issues) + ClaimReason string `protobuf:"bytes,6,opt,name=claim_reason,json=claimReason,proto3" json:"claim_reason,omitempty"` // Description of why the claim was filed + Status Status `protobuf:"varint,7,opt,name=status,proto3,enum=pb.v1.Status" json:"status,omitempty"` // The final outcome of the claim + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Claim) Reset() { *x = Claim{} - mi := &file_pb_v1_oracle_proto_msgTypes[6] + mi := &file_pb_v1_oracle_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -400,7 +766,7 @@ func (x *Claim) String() string { func (*Claim) ProtoMessage() {} func (x *Claim) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[6] + mi := &file_pb_v1_oracle_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -413,7 +779,7 @@ func (x *Claim) ProtoReflect() protoreflect.Message { // Deprecated: Use Claim.ProtoReflect.Descriptor instead. func (*Claim) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{6} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{7} } func (x *Claim) GetClaimId() string { @@ -430,119 +796,223 @@ func (x *Claim) GetState() ClaimState { return ClaimState_CLAIM_STATE_UNSPECIFIED } +func (x *Claim) GetClaimant() *Claimant { + if x != nil { + return x.Claimant + } + return nil +} + +func (x *Claim) GetDateOfAccident() string { + if x != nil { + return x.DateOfAccident + } + return "" +} + +func (x *Claim) GetDamageAmount() int64 { + if x != nil { + return x.DamageAmount + } + return 0 +} + +func (x *Claim) GetClaimReason() string { + if x != nil { + return x.ClaimReason + } + return "" +} + +func (x *Claim) GetStatus() Status { + if x != nil { + return x.Status + } + return Status_STATUS_UNSPECIFIED +} + var File_pb_v1_oracle_proto protoreflect.FileDescriptor -var file_pb_v1_oracle_proto_rawDesc = []byte{ +var file_pb_v1_oracle_proto_rawDesc = string([]byte{ 0x0a, 0x12, 0x70, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x13, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x38, 0x0a, 0x12, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x6d, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, - 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x4b, - 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2a, 0xfa, 0x02, 0x0a, 0x0a, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4c, - 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4c, 0x41, 0x49, 0x4d, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, - 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, - 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x44, - 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, 0x41, 0x49, - 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, - 0x5f, 0x49, 0x44, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x21, - 0x0a, 0x1d, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, - 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, - 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, - 0x49, 0x43, 0x45, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x44, 0x10, 0x06, 0x12, 0x27, 0x0a, 0x23, - 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x46, - 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, - 0x57, 0x45, 0x44, 0x10, 0x07, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, - 0x49, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x08, 0x12, 0x28, - 0x0a, 0x24, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, - 0x45, 0x50, 0x41, 0x59, 0x5f, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, - 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x10, 0x09, 0x42, 0x79, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x2e, - 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x73, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62, 0x2f, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x05, 0x50, 0x62, 0x2e, 0x56, 0x31, 0xca, 0x02, - 0x05, 0x50, 0x62, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x11, 0x50, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x62, 0x3a, - 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa5, 0x03, 0x0a, 0x08, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x61, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x6f, + 0x72, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x6f, 0x62, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x6f, 0x62, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x6f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x6f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, + 0x31, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x73, + 0x74, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x73, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x77, + 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x50, 0x6f, 0x73, 0x74, 0x54, 0x6f, 0x77, 0x6e, 0x12, 0x34, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, + 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0xb3, + 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, + 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x61, 0x63, + 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, + 0x74, 0x65, 0x4f, 0x66, 0x41, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x7b, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x65, + 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, + 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x38, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x7b, 0x0a, 0x13, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x65, + 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x08, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x65, 0x78, + 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x24, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, + 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x91, 0x02, 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, + 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, + 0x74, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x41, 0x63, 0x63, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x5f, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x64, 0x61, + 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x25, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, + 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x2a, 0x4a, 0x0a, 0x0b, 0x4e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x17, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x49, + 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x06, 0x0a, 0x02, 0x47, 0x42, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x53, 0x10, 0x02, + 0x12, 0x06, 0x0a, 0x02, 0x46, 0x52, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x44, 0x45, 0x10, 0x04, + 0x2a, 0x5b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x50, 0x50, + 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x41, 0x49, 0x44, 0x10, 0x03, 0x2a, 0xfa, 0x02, + 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, + 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4c, 0x41, + 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x2a, + 0x0a, 0x26, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, + 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x5f, 0x43, + 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, + 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, 0x4c, 0x41, + 0x49, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, + 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x45, + 0x44, 0x10, 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, + 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x44, 0x10, 0x06, 0x12, 0x27, + 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, + 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x56, + 0x49, 0x45, 0x57, 0x45, 0x44, 0x10, 0x07, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, + 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x08, + 0x12, 0x28, 0x0a, 0x24, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x4f, 0x4f, 0x45, 0x50, 0x41, 0x59, 0x5f, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, + 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x10, 0x09, 0x42, 0x79, 0x0a, 0x09, 0x63, 0x6f, + 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, + 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62, 0x2f, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x05, 0x50, 0x62, 0x2e, 0x56, 0x31, + 0xca, 0x02, 0x05, 0x50, 0x62, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x11, 0x50, 0x62, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, + 0x62, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) var ( file_pb_v1_oracle_proto_rawDescOnce sync.Once - file_pb_v1_oracle_proto_rawDescData = file_pb_v1_oracle_proto_rawDesc + file_pb_v1_oracle_proto_rawDescData []byte ) func file_pb_v1_oracle_proto_rawDescGZIP() []byte { file_pb_v1_oracle_proto_rawDescOnce.Do(func() { - file_pb_v1_oracle_proto_rawDescData = protoimpl.X.CompressGZIP(file_pb_v1_oracle_proto_rawDescData) + file_pb_v1_oracle_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_pb_v1_oracle_proto_rawDesc), len(file_pb_v1_oracle_proto_rawDesc))) }) return file_pb_v1_oracle_proto_rawDescData } -var file_pb_v1_oracle_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pb_v1_oracle_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_pb_v1_oracle_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_pb_v1_oracle_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_pb_v1_oracle_proto_goTypes = []any{ - (ClaimState)(0), // 0: pb.v1.ClaimState - (*CreateClaimRequest)(nil), // 1: pb.v1.CreateClaimRequest - (*CreateClaimResponse)(nil), // 2: pb.v1.CreateClaimResponse - (*UpdateClaimRequest)(nil), // 3: pb.v1.UpdateClaimRequest - (*UpdateClaimResponse)(nil), // 4: pb.v1.UpdateClaimResponse - (*GetClaimRequest)(nil), // 5: pb.v1.GetClaimRequest - (*GetClaimResponse)(nil), // 6: pb.v1.GetClaimResponse - (*Claim)(nil), // 7: pb.v1.Claim - (*v1.Exception)(nil), // 8: common.v1.Exception + (Nationality)(0), // 0: pb.v1.Nationality + (Status)(0), // 1: pb.v1.Status + (ClaimState)(0), // 2: pb.v1.ClaimState + (*Claimant)(nil), // 3: pb.v1.Claimant + (*CreateClaimRequest)(nil), // 4: pb.v1.CreateClaimRequest + (*CreateClaimResponse)(nil), // 5: pb.v1.CreateClaimResponse + (*UpdateClaimRequest)(nil), // 6: pb.v1.UpdateClaimRequest + (*UpdateClaimResponse)(nil), // 7: pb.v1.UpdateClaimResponse + (*GetClaimRequest)(nil), // 8: pb.v1.GetClaimRequest + (*GetClaimResponse)(nil), // 9: pb.v1.GetClaimResponse + (*Claim)(nil), // 10: pb.v1.Claim + (*v1.Exception)(nil), // 11: common.v1.Exception } var file_pb_v1_oracle_proto_depIdxs = []int32{ - 8, // 0: pb.v1.CreateClaimResponse.exception:type_name -> common.v1.Exception - 7, // 1: pb.v1.CreateClaimResponse.claim:type_name -> pb.v1.Claim - 7, // 2: pb.v1.UpdateClaimRequest.claim:type_name -> pb.v1.Claim - 8, // 3: pb.v1.UpdateClaimResponse.exception:type_name -> common.v1.Exception - 7, // 4: pb.v1.UpdateClaimResponse.claim:type_name -> pb.v1.Claim - 8, // 5: pb.v1.GetClaimResponse.exception:type_name -> common.v1.Exception - 7, // 6: pb.v1.GetClaimResponse.claim:type_name -> pb.v1.Claim - 0, // 7: pb.v1.Claim.state:type_name -> pb.v1.ClaimState - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 0, // 0: pb.v1.Claimant.nationality:type_name -> pb.v1.Nationality + 3, // 1: pb.v1.CreateClaimRequest.claimant:type_name -> pb.v1.Claimant + 11, // 2: pb.v1.CreateClaimResponse.exception:type_name -> common.v1.Exception + 10, // 3: pb.v1.CreateClaimResponse.claim:type_name -> pb.v1.Claim + 10, // 4: pb.v1.UpdateClaimRequest.claim:type_name -> pb.v1.Claim + 11, // 5: pb.v1.UpdateClaimResponse.exception:type_name -> common.v1.Exception + 10, // 6: pb.v1.UpdateClaimResponse.claim:type_name -> pb.v1.Claim + 11, // 7: pb.v1.GetClaimResponse.exception:type_name -> common.v1.Exception + 10, // 8: pb.v1.GetClaimResponse.claim:type_name -> pb.v1.Claim + 2, // 9: pb.v1.Claim.state:type_name -> pb.v1.ClaimState + 3, // 10: pb.v1.Claim.claimant:type_name -> pb.v1.Claimant + 1, // 11: pb.v1.Claim.status:type_name -> pb.v1.Status + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_pb_v1_oracle_proto_init() } @@ -550,13 +1020,25 @@ func file_pb_v1_oracle_proto_init() { if File_pb_v1_oracle_proto != nil { return } + file_pb_v1_oracle_proto_msgTypes[2].OneofWrappers = []any{ + (*CreateClaimResponse_Exception)(nil), + (*CreateClaimResponse_Claim)(nil), + } + file_pb_v1_oracle_proto_msgTypes[4].OneofWrappers = []any{ + (*UpdateClaimResponse_Exception)(nil), + (*UpdateClaimResponse_Claim)(nil), + } + file_pb_v1_oracle_proto_msgTypes[6].OneofWrappers = []any{ + (*GetClaimResponse_Exception)(nil), + (*GetClaimResponse_Claim)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pb_v1_oracle_proto_rawDesc, - NumEnums: 1, - NumMessages: 7, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_pb_v1_oracle_proto_rawDesc), len(file_pb_v1_oracle_proto_rawDesc)), + NumEnums: 3, + NumMessages: 8, NumExtensions: 0, NumServices: 0, }, @@ -566,7 +1048,6 @@ func file_pb_v1_oracle_proto_init() { MessageInfos: file_pb_v1_oracle_proto_msgTypes, }.Build() File_pb_v1_oracle_proto = out.File - file_pb_v1_oracle_proto_rawDesc = nil file_pb_v1_oracle_proto_goTypes = nil file_pb_v1_oracle_proto_depIdxs = nil } diff --git a/api/pb/v1/oracle.proto b/api/pb/v1/oracle.proto index 2c05bb2..4a600b2 100644 --- a/api/pb/v1/oracle.proto +++ b/api/pb/v1/oracle.proto @@ -1,5 +1,4 @@ -// Copyright © 2024 Luther Systems, Ltd. All right reserved. - +// Copyright © 2024 Luther Systems, Ltd. All rights reserved. // API Models and Documentation. syntax = "proto3"; @@ -10,48 +9,102 @@ import "common/v1/exception.proto"; option go_package = "github.com/luthersystems/sandbox/api/pb/v1"; -message CreateClaimRequest {} +// Represents a nationality using an enum for structured validation. +enum Nationality { + NATIONALITY_UNSPECIFIED = 0; // Default value (should not be used) + GB = 1; // United Kingdom + US = 2; // United States + FR = 3; // France + DE = 4; // Germany + // Additional nationalities can be added as needed. +} + +// Stores details of the claimant (person making the claim). +message Claimant { + string account_number = 1; // Bank account number (string to support leading zeros) + string account_sort_code = 2; // Bank sort code (string to avoid leading-zero loss) + string dob = 3; // Date of birth (YYYY-MM-DD) + string surname = 4; // Surname (last name) + string forename = 5; // Forename (first name) + string full_address = 6; // Full address in a single field + string address_number = 7; // House/building number + string address_street1 = 8; // Street address + string address_postcode = 9; // Postal code (ZIP code) + string address_post_town = 10; // Post town or city + Nationality nationality = 11; // Nationality, stored as an enum +} + +// Represents the final outcome of a claim. +enum Status { + STATUS_UNSPECIFIED = 0; // Default value (should not be used) + STATUS_APPROVED = 1; // Claim was approved + STATUS_DECLINED = 2; // Claim was declined + STATUS_PAID = 3; // Claim has been paid out +} + +// Represents the processing state of the claim (process progress). +enum ClaimState { + CLAIM_STATE_UNSPECIFIED = 0; // Default value (should not be used) + CLAIM_STATE_NEW = 1; // Claim was created + CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED = 2;// Claimant details submitted + CLAIM_STATE_LOECLAIM_ID_VERIFIED = 3; // Identity verified + CLAIM_STATE_OOECLAIM_REVIEWED = 4; // Claim reviewed + CLAIM_STATE_OOECLAIM_VALIDATED = 5; // Claim validated + CLAIM_STATE_LOEFIN_INVOICE_ISSUED = 6; // Invoice issued + CLAIM_STATE_OOEFIN_INVOICE_REVIEWED = 7; // Invoice reviewed + CLAIM_STATE_OOEFIN_INVOICE_APPROVED = 8; // Invoice approved + CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED = 9; // Payment triggered +} + +// Request to create a claim. +message CreateClaimRequest { + Claimant claimant = 1; // Details of the claimant + string date_of_accident = 2;// Date when the accident occurred (YYYY-MM-DD) + int64 damage_amount = 3; // Damage amount (stored in cents to avoid floating point issues) + string claim_reason = 4; // Brief description of the reason for the claim +} + +// Represents an insurance claim, storing its lifecycle, status, and related claimant details. +message Claim { + string claim_id = 1; // Unique ID assigned by the backend (immutable) + ClaimState state = 2; // The current internal processing state of the claim + Claimant claimant = 3; // Claimant details + string date_of_accident = 4;// Date when the accident occurred (YYYY-MM-DD) + int64 damage_amount = 5; // Damage amount (stored in cents to prevent floating point issues) + string claim_reason = 6; // Description of why the claim was filed + Status status = 7; // The final outcome of the claim +} +// Response for creating a claim. message CreateClaimResponse { - common.v1.Exception exception = 1; - Claim claim = 2; + oneof result { + common.v1.Exception exception = 1; // Exception details if an error occurred + Claim claim = 2; // The created claim if successful + } } +// Request to update an existing claim. message UpdateClaimRequest { - Claim claim = 1; + Claim claim = 1; // The claim details with updates } +// Response for updating a claim. message UpdateClaimResponse { - common.v1.Exception exception = 1; - Claim claim = 2; + oneof result { + common.v1.Exception exception = 1; // Exception details if an error occurred + Claim claim = 2; // The updated claim if successful + } } +// Request to retrieve a claim by its unique ID. message GetClaimRequest { - string claim_id = 1; + string claim_id = 1; // Unique identifier of the claim to fetch } +// Response containing the requested claim. message GetClaimResponse { - common.v1.Exception exception = 1; - Claim claim = 2; -} - -enum ClaimState { - CLAIM_STATE_UNSPECIFIED = 0; - CLAIM_STATE_NEW = 1; - CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS = 2; - CLAIM_STATE_LOECLAIM_ID_VERIFIED = 3; - CLAIM_STATE_OOECLAIM_REVIEWED = 4; - CLAIM_STATE_OOECLAIM_VALIDATED = 5; - CLAIM_STATE_LOEFIN_INVOICE_ISSUED = 6; - CLAIM_STATE_OOEFIN_INVOICE_REVIEWED = 7; - CLAIM_STATE_OOEFIN_INVOICE_APPROVED = 8; - CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED = 9; -} - -// Claim represents an insurance claim. -message Claim { - // Unique ID for the claim. Immutable. Set by backend. - string claim_id = 1; - // State of the claim. - ClaimState state = 2; + oneof result { + common.v1.Exception exception = 1; // Exception details if an error occurred + Claim claim = 2; // The retrieved claim if successful + } } diff --git a/api/pb/v1/oracle.swagger.json b/api/pb/v1/oracle.swagger.json index fe6cf81..21d22a2 100644 --- a/api/pb/v1/oracle.swagger.json +++ b/api/pb/v1/oracle.swagger.json @@ -12,16 +12,7 @@ ], "paths": {}, "definitions": { - "protobufAny": { - "type": "object", - "properties": { - "@type": { - "type": "string" - } - }, - "additionalProperties": {} - }, - "rpcStatus": { + "googlerpcStatus": { "type": "object", "properties": { "code": { @@ -39,6 +30,15 @@ } } } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} } } } diff --git a/api/srvpb/v1/oracle.pb.go b/api/srvpb/v1/oracle.pb.go index 5ee1555..4edb9f2 100644 --- a/api/srvpb/v1/oracle.pb.go +++ b/api/srvpb/v1/oracle.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.1 +// protoc-gen-go v1.36.4 // protoc (unknown) // source: srvpb/v1/oracle.proto @@ -18,6 +18,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" + unsafe "unsafe" ) const ( @@ -29,7 +30,7 @@ const ( var File_srvpb_v1_oracle_proto protoreflect.FileDescriptor -var file_srvpb_v1_oracle_proto_rawDesc = []byte{ +var file_srvpb_v1_oracle_proto_rawDesc = string([]byte{ 0x0a, 0x15, 0x73, 0x72, 0x76, 0x70, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x73, 0x72, 0x76, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, @@ -114,7 +115,7 @@ var file_srvpb_v1_oracle_proto_rawDesc = []byte{ 0xe2, 0x02, 0x14, 0x53, 0x72, 0x76, 0x70, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x53, 0x72, 0x76, 0x70, 0x62, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var file_srvpb_v1_oracle_proto_goTypes = []any{ (*v1.GetHealthCheckRequest)(nil), // 0: healthcheck.v1.GetHealthCheckRequest @@ -151,7 +152,7 @@ func file_srvpb_v1_oracle_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_srvpb_v1_oracle_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_srvpb_v1_oracle_proto_rawDesc), len(file_srvpb_v1_oracle_proto_rawDesc)), NumEnums: 0, NumMessages: 0, NumExtensions: 0, @@ -161,7 +162,6 @@ func file_srvpb_v1_oracle_proto_init() { DependencyIndexes: file_srvpb_v1_oracle_proto_depIdxs, }.Build() File_srvpb_v1_oracle_proto = out.File - file_srvpb_v1_oracle_proto_rawDesc = nil file_srvpb_v1_oracle_proto_goTypes = nil file_srvpb_v1_oracle_proto_depIdxs = nil } diff --git a/api/srvpb/v1/oracle.pb.gw.go b/api/srvpb/v1/oracle.pb.gw.go index 2ed2ec9..88600b7 100644 --- a/api/srvpb/v1/oracle.pb.gw.go +++ b/api/srvpb/v1/oracle.pb.gw.go @@ -69,10 +69,21 @@ func local_request_SandboxService_GetHealthCheck_0(ctx context.Context, marshale } +var ( + filter_SandboxService_CreateClaim_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + func request_SandboxService_CreateClaim_0(ctx context.Context, marshaler runtime.Marshaler, client SandboxServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq v1_1.CreateClaimRequest var metadata runtime.ServerMetadata + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SandboxService_CreateClaim_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.CreateClaim(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -82,6 +93,13 @@ func local_request_SandboxService_CreateClaim_0(ctx context.Context, marshaler r var protoReq v1_1.CreateClaimRequest var metadata runtime.ServerMetadata + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SandboxService_CreateClaim_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.CreateClaim(ctx, &protoReq) return msg, metadata, err diff --git a/api/srvpb/v1/oracle.swagger.json b/api/srvpb/v1/oracle.swagger.json index 0ef9d60..80f5ade 100644 --- a/api/srvpb/v1/oracle.swagger.json +++ b/api/srvpb/v1/oracle.swagger.json @@ -76,14 +76,14 @@ "default": { "description": "An unexpected error response.", "schema": { - "$ref": "#/definitions/rpcStatus" + "$ref": "#/definitions/googlerpcStatus" } } }, "parameters": [ { "name": "claim.claimId", - "description": "Unique ID for the claim. Immutable. Set by backend.", + "description": "Unique ID assigned by the backend (immutable)", "in": "path", "required": true, "type": "string" @@ -159,13 +159,14 @@ "default": { "description": "An unexpected error response.", "schema": { - "$ref": "#/definitions/rpcStatus" + "$ref": "#/definitions/googlerpcStatus" } } }, "parameters": [ { "name": "claimId", + "description": "Unique identifier of the claim to fetch", "in": "path", "required": true, "type": "string" @@ -233,10 +234,119 @@ "default": { "description": "An unexpected error response.", "schema": { - "$ref": "#/definitions/rpcStatus" + "$ref": "#/definitions/googlerpcStatus" } } }, + "parameters": [ + { + "name": "claimant.accountNumber", + "description": "Bank account number (string to support leading zeros)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.accountSortCode", + "description": "Bank sort code (string to avoid leading-zero loss)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.dob", + "description": "Date of birth (YYYY-MM-DD)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.surname", + "description": "Surname (last name)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.forename", + "description": "Forename (first name)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.fullAddress", + "description": "Full address in a single field", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.addressNumber", + "description": "House/building number", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.addressStreet1", + "description": "Street address", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.addressPostcode", + "description": "Postal code (ZIP code)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.addressPostTown", + "description": "Post town or city", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "claimant.nationality", + "description": "Nationality, stored as an enum\n\n - NATIONALITY_UNSPECIFIED: Default value (should not be used)\n - GB: United Kingdom\n - US: United States\n - FR: France\n - DE: Germany", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "NATIONALITY_UNSPECIFIED", + "GB", + "US", + "FR", + "DE" + ], + "default": "NATIONALITY_UNSPECIFIED" + }, + { + "name": "dateOfAccident", + "description": "Date when the accident occurred (YYYY-MM-DD)", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "damageAmount", + "description": "Damage amount (stored in cents to avoid floating point issues)", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "claimReason", + "description": "Brief description of the reason for the claim", + "in": "query", + "required": false, + "type": "string" + } + ], "tags": [ "Service" ] @@ -299,7 +409,7 @@ "default": { "description": "An unexpected error response.", "schema": { - "$ref": "#/definitions/rpcStatus" + "$ref": "#/definitions/googlerpcStatus" } } }, @@ -327,23 +437,36 @@ "properties": { "state": { "$ref": "#/definitions/v1ClaimState", - "description": "State of the claim." + "title": "The current internal processing state of the claim" + }, + "claimant": { + "$ref": "#/definitions/v1Claimant", + "title": "Claimant details" + }, + "dateOfAccident": { + "type": "string", + "title": "Date when the accident occurred (YYYY-MM-DD)" + }, + "damageAmount": { + "type": "string", + "format": "int64", + "title": "Damage amount (stored in cents to prevent floating point issues)" + }, + "claimReason": { + "type": "string", + "title": "Description of why the claim was filed" + }, + "status": { + "$ref": "#/definitions/pbv1Status", + "title": "The final outcome of the claim" } }, - "description": "Claim represents an insurance claim." - } - } - }, - "protobufAny": { - "type": "object", - "properties": { - "@type": { - "type": "string" + "title": "The claim details with updates" } }, - "additionalProperties": {} + "description": "Request to update an existing claim." }, - "rpcStatus": { + "googlerpcStatus": { "type": "object", "properties": { "code": { @@ -362,26 +485,67 @@ } } }, + "pbv1Status": { + "type": "string", + "enum": [ + "STATUS_UNSPECIFIED", + "STATUS_APPROVED", + "STATUS_DECLINED", + "STATUS_PAID" + ], + "default": "STATUS_UNSPECIFIED", + "description": "Represents the final outcome of a claim.\n\n - STATUS_UNSPECIFIED: Default value (should not be used)\n - STATUS_APPROVED: Claim was approved\n - STATUS_DECLINED: Claim was declined\n - STATUS_PAID: Claim has been paid out" + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, "v1Claim": { "type": "object", "properties": { "claimId": { "type": "string", - "description": "Unique ID for the claim. Immutable. Set by backend." + "title": "Unique ID assigned by the backend (immutable)" }, "state": { "$ref": "#/definitions/v1ClaimState", - "description": "State of the claim." + "title": "The current internal processing state of the claim" + }, + "claimant": { + "$ref": "#/definitions/v1Claimant", + "title": "Claimant details" + }, + "dateOfAccident": { + "type": "string", + "title": "Date when the accident occurred (YYYY-MM-DD)" + }, + "damageAmount": { + "type": "string", + "format": "int64", + "title": "Damage amount (stored in cents to prevent floating point issues)" + }, + "claimReason": { + "type": "string", + "title": "Description of why the claim was filed" + }, + "status": { + "$ref": "#/definitions/pbv1Status", + "title": "The final outcome of the claim" } }, - "description": "Claim represents an insurance claim." + "description": "Represents an insurance claim, storing its lifecycle, status, and related claimant details." }, "v1ClaimState": { "type": "string", "enum": [ "CLAIM_STATE_UNSPECIFIED", "CLAIM_STATE_NEW", - "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS", + "CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED", "CLAIM_STATE_LOECLAIM_ID_VERIFIED", "CLAIM_STATE_OOECLAIM_REVIEWED", "CLAIM_STATE_OOECLAIM_VALIDATED", @@ -390,18 +554,72 @@ "CLAIM_STATE_OOEFIN_INVOICE_APPROVED", "CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED" ], - "default": "CLAIM_STATE_UNSPECIFIED" + "default": "CLAIM_STATE_UNSPECIFIED", + "description": "Represents the processing state of the claim (process progress).\n\n - CLAIM_STATE_UNSPECIFIED: Default value (should not be used)\n - CLAIM_STATE_NEW: Claim was created\n - CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED: Claimant details submitted\n - CLAIM_STATE_LOECLAIM_ID_VERIFIED: Identity verified\n - CLAIM_STATE_OOECLAIM_REVIEWED: Claim reviewed\n - CLAIM_STATE_OOECLAIM_VALIDATED: Claim validated\n - CLAIM_STATE_LOEFIN_INVOICE_ISSUED: Invoice issued\n - CLAIM_STATE_OOEFIN_INVOICE_REVIEWED: Invoice reviewed\n - CLAIM_STATE_OOEFIN_INVOICE_APPROVED: Invoice approved\n - CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED: Payment triggered" + }, + "v1Claimant": { + "type": "object", + "properties": { + "accountNumber": { + "type": "string", + "title": "Bank account number (string to support leading zeros)" + }, + "accountSortCode": { + "type": "string", + "title": "Bank sort code (string to avoid leading-zero loss)" + }, + "dob": { + "type": "string", + "title": "Date of birth (YYYY-MM-DD)" + }, + "surname": { + "type": "string", + "title": "Surname (last name)" + }, + "forename": { + "type": "string", + "title": "Forename (first name)" + }, + "fullAddress": { + "type": "string", + "title": "Full address in a single field" + }, + "addressNumber": { + "type": "string", + "title": "House/building number" + }, + "addressStreet1": { + "type": "string", + "title": "Street address" + }, + "addressPostcode": { + "type": "string", + "title": "Postal code (ZIP code)" + }, + "addressPostTown": { + "type": "string", + "title": "Post town or city" + }, + "nationality": { + "$ref": "#/definitions/v1Nationality", + "title": "Nationality, stored as an enum" + } + }, + "description": "Stores details of the claimant (person making the claim)." }, "v1CreateClaimResponse": { "type": "object", "properties": { "exception": { - "$ref": "#/definitions/v1Exception" + "$ref": "#/definitions/v1Exception", + "title": "Exception details if an error occurred" }, "claim": { - "$ref": "#/definitions/v1Claim" + "$ref": "#/definitions/v1Claim", + "title": "The created claim if successful" } - } + }, + "description": "Response for creating a claim." }, "v1Exception": { "type": "object", @@ -459,12 +677,15 @@ "type": "object", "properties": { "exception": { - "$ref": "#/definitions/v1Exception" + "$ref": "#/definitions/v1Exception", + "title": "Exception details if an error occurred" }, "claim": { - "$ref": "#/definitions/v1Claim" + "$ref": "#/definitions/v1Claim", + "title": "The retrieved claim if successful" } - } + }, + "description": "Response containing the requested claim." }, "v1GetHealthCheckResponse": { "type": "object", @@ -506,16 +727,31 @@ }, "description": "Health check status of an individual service." }, + "v1Nationality": { + "type": "string", + "enum": [ + "NATIONALITY_UNSPECIFIED", + "GB", + "US", + "FR", + "DE" + ], + "default": "NATIONALITY_UNSPECIFIED", + "description": "Represents a nationality using an enum for structured validation.\n\n - NATIONALITY_UNSPECIFIED: Default value (should not be used)\n - GB: United Kingdom\n - US: United States\n - FR: France\n - DE: Germany" + }, "v1UpdateClaimResponse": { "type": "object", "properties": { "exception": { - "$ref": "#/definitions/v1Exception" + "$ref": "#/definitions/v1Exception", + "title": "Exception details if an error occurred" }, "claim": { - "$ref": "#/definitions/v1Claim" + "$ref": "#/definitions/v1Claim", + "title": "The updated claim if successful" } - } + }, + "description": "Response for updating a claim." } }, "securityDefinitions": { diff --git a/phylum/claim.lisp b/phylum/claim.lisp index 3da8aba..7bcd88c 100644 --- a/phylum/claim.lisp +++ b/phylum/claim.lisp @@ -104,7 +104,7 @@ [data () claim] - [handle (resp) + [handle (resp) (let* ([state (get-state)] [resp-body (get resp "response")] [resp-err (get resp "error")] @@ -113,20 +113,10 @@ (set-exception-unexpected (format-string "unhandled response error: {}" resp-err))) (cc:infof (assoc resp-body "state" state) "handle") - (cond - ((equal? state "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS") - (add-event (mk-equifax-req (sorted-map - "account_number" "03299391" - "account_sort_code" "090127" - "dob" "1970-07-04" - "surname" "Harrison" - "forename" "Emanuel" - "full_address" "78 Cromwell Road" - "address_number" "78" - "address_street1" "Cromwell Road" - "address_postcode" "CB6 2AG" - "address_post_town" "Ely" - "nationality" "GB")))) + (cond + ((equal? state "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS") + (let* ([claimant (get resp "claimant")]) + (add-event (mk-equifax-req claimant)))) ((equal? state "CLAIM_STATE_LOECLAIM_ID_VERIFIED") (add-event (mk-camunda-start-req "a1" (sorted-map "x" "fnord")))) diff --git a/phylum/claim_test.lisp b/phylum/claim_test.lisp index 162a247..713649a 100644 --- a/phylum/claim_test.lisp +++ b/phylum/claim_test.lisp @@ -6,6 +6,26 @@ ;; overwrite return from cc:creator such that tests can complete (set 'cc:creator (lambda () "Org1MSP")) +(defun mk-test-claimant () + (sorted-map "account_number" "03299391" + "account_sort_code" "090127" + "dob" "1970-07-04" + "surname" "Harrison" + "forename" "Emanuel" + "full_address" "78 Cromwell Road" + "address_number" "78" + "address_street1" "Cromwell Road" + "address_postcode" "CB6 2AG" + "address_post_town" "Ely" + "nationality" "GB")) + +(defun populate-test-claim! (claim) + (let* ([claimant (mk-test-claimant)]) + (assoc! claim "claimant" claimant) + (assoc! claim "date_of_accident" "2023-09-28") + (assoc! claim "damage_amount" 4750) + (assoc! claim "claim_reason" "Vehicle collision damage to rear bumper and trunk"))) + (test "claims" (let* ([claim (create-claim)] [_ (assert (not (nil? claim)))]) @@ -64,8 +84,9 @@ (let* ([claim (create-claim)]) (cc:debugf (sorted-map "claim" claim) "start-new-event-loop") (assert (not (nil? claim))) - (assert (not (nil? (get claim "claim_id")))) - (trigger-claim (get claim "claim_id") (sorted-map)))) + (assert (not (nil? (get claim "claim_id")))) + (populate-test-claim! claim) + (trigger-claim (get claim "claim_id") claim))) (defun assert-no-more-events () (let* ([event-reqs (get-connector-event-reqs)]) From 46b18f8c0d3563611e6ad86b731b82e06596ef91 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Thu, 27 Feb 2025 16:49:16 -0800 Subject: [PATCH 10/23] Fix typo --- portal/start.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/portal/start.go b/portal/start.go index f492f23..ee50e1c 100644 --- a/portal/start.go +++ b/portal/start.go @@ -12,7 +12,7 @@ type startCmd struct { baseCmd ListenAddress string `short:"l" help:"Address to listen on" default:":8080" env:"SANDBOX_ORACLE_LISTEN_ADDRESS"` GatewayEndpoint string `short:"g" help:"URL for shiroclient gateway" env:"SANDBOX_ORACLE_GATEWAY_ENDPOINT"` - OLTPEndpoint string `short:"o" help:"URL for OLTP provider" env:"SANDBOX_ORACLE_OLTP_ENDPOINT"` + OTLPEndpoint string `short:"o" help:"URL for OTLP provider" env:"SANDBOX_ORACLE_OTLP_ENDPOINT"` PhylumPath string `short:"p" help:"Phylum path for in-memory mode" default:"./phylum" env:"SANDBOX_ORACLE_PHYLUM_PATH"` Verbose bool `short:"v" help:"Verbose logging" default:"false" env:"SANDBOX_ORACLE_VERBOSE"` EmulateCC bool `short:"e" help:"Enable in-memory-mode" default:"false" env:"SANDBOX_ORACLE_EMULATE_CC"` @@ -24,7 +24,7 @@ func (r *startCmd) Run() error { cfg.ServiceName = "sandbox-oracle" cfg.Version = version.Version cfg.PhylumPath = r.PhylumPath - cfg.SetOTLPEndpoint(r.OLTPEndpoint) + cfg.SetOTLPEndpoint(r.OTLPEndpoint) cfg.SetSwaggerHandler(api.SwaggerHandlerOrPanic("v1/oracle")) cfg.ListenAddress = r.ListenAddress cfg.GatewayEndpoint = r.GatewayEndpoint From f11da51d2f925793bb0395d75b7e0596ccf0cec2 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Thu, 27 Feb 2025 16:50:26 -0800 Subject: [PATCH 11/23] Bump go version --- .github/workflows/sandbox.yml | 4 ++-- common.config.mk | 2 +- go.mod | 11 ++--------- go.sum | 18 ------------------ 4 files changed, 5 insertions(+), 30 deletions(-) diff --git a/.github/workflows/sandbox.yml b/.github/workflows/sandbox.yml index dd1742a..123d6b6 100644 --- a/.github/workflows/sandbox.yml +++ b/.github/workflows/sandbox.yml @@ -11,10 +11,10 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: "1.22.x" + go-version: "1.23.x" - name: golangci-lint uses: golangci/golangci-lint-action@v4 with: - version: v1.59 + version: v1.63 - name: Run CI tests run: script -q -e -c "make citest" diff --git a/common.config.mk b/common.config.mk index cf0558e..fbc38c6 100644 --- a/common.config.mk +++ b/common.config.mk @@ -13,7 +13,7 @@ SERVICE_DIR=portal # The makefiles use docker images to build artifacts in this project. These # variables configure the images used for builds. -BUILDENV_TAG=v0.0.85 +BUILDENV_TAG=v0.0.90 # These variables control the version numbers for parts of the Luther platform # and should be kept up-to-date to leverage the latest platform features. diff --git a/go.mod b/go.mod index 67cc60a..6ad72c6 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,13 @@ module github.com/luthersystems/sandbox -go 1.22 +go 1.23 require ( buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.34.2-20240723225114-9e2ac79af3a8.2 github.com/alecthomas/kong v0.9.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 - github.com/hyperledger/fabric-gateway v1.5.1 - github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 + github.com/luthersystems/shiroclient-sdk-go v0.11.0 github.com/luthersystems/svc v0.14.2 - github.com/olekukonko/tablewriter v0.0.5 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a @@ -32,11 +30,8 @@ require ( github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect - github.com/luthersystems/shiroclient-sdk-go v0.11.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.12 // indirect - github.com/miekg/pkcs11 v1.1.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oklog/run v1.1.0 // indirect @@ -45,7 +40,6 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/rivo/uniseg v0.2.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect go.opentelemetry.io/otel v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect @@ -54,7 +48,6 @@ require ( go.opentelemetry.io/otel/sdk v1.28.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect - golang.org/x/crypto v0.25.0 // indirect golang.org/x/net v0.27.0 // indirect golang.org/x/sys v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect diff --git a/go.sum b/go.sum index 4b458a0..158ebc5 100644 --- a/go.sum +++ b/go.sum @@ -65,10 +65,6 @@ github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/hyperledger/fabric-gateway v1.5.1 h1:UPsOFeRMttoB6X9K4G7gGxZvYMD3mw2aRG3ax5BqMUA= -github.com/hyperledger/fabric-gateway v1.5.1/go.mod h1:8O73LAlilYkPecNrENq8zbXPKXT6beMRYSGVE62QXRE= -github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3 h1:Xpd6fzG/KjAOHJsq7EQXY2l+qi/y8muxBaY7R6QWABk= -github.com/hyperledger/fabric-protos-go-apiv2 v0.3.3/go.mod h1:2pq0ui6ZWA0cC8J+eCErgnMDCS1kPOEYVY+06ZAK0qE= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -94,19 +90,12 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow= -github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= -github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -120,9 +109,6 @@ github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -159,15 +145,11 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= From 2da66786b664d65e57900d6de468e7ea4ea08a47 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Fri, 28 Feb 2025 16:20:34 -0800 Subject: [PATCH 12/23] Make portal tests pass --- phylum/claim.lisp | 2 +- portal/oracle/oracle_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/phylum/claim.lisp b/phylum/claim.lisp index 7bcd88c..2f4b803 100644 --- a/phylum/claim.lisp +++ b/phylum/claim.lisp @@ -16,7 +16,7 @@ (set 'state-transitions (make-state-chain (vector - "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" + "CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED" "CLAIM_STATE_LOECLAIM_ID_VERIFIED" "CLAIM_STATE_OOECLAIM_REVIEWED" "CLAIM_STATE_OOECLAIM_VALIDATED" diff --git a/portal/oracle/oracle_test.go b/portal/oracle/oracle_test.go index 1ede233..631aa93 100644 --- a/portal/oracle/oracle_test.go +++ b/portal/oracle/oracle_test.go @@ -88,7 +88,7 @@ func TestGetAccount(t *testing.T) { }) if assert.NoError(t, err) { if assert.NotNil(t, resp) { - assert.NotNil(t, resp.Exception) + assert.NotNil(t, resp.GetException()) } } } From 9f0e84004e016443c8516cc33d614d576cbe834f Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Fri, 28 Feb 2025 16:21:02 -0800 Subject: [PATCH 13/23] Add steps image --- phylum/.gitattributes | 1 + phylum/steps.png | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 phylum/.gitattributes create mode 100644 phylum/steps.png diff --git a/phylum/.gitattributes b/phylum/.gitattributes new file mode 100644 index 0000000..ade221d --- /dev/null +++ b/phylum/.gitattributes @@ -0,0 +1 @@ +steps.png filter=lfs diff=lfs merge=lfs -text diff --git a/phylum/steps.png b/phylum/steps.png new file mode 100644 index 0000000..ec5cef6 --- /dev/null +++ b/phylum/steps.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67433d7c4a01a7dcfd3d304b830ad255bf38592ce7d1f781724f344c6f31b278 +size 166268 From c04e398c04bfd94ff4a6c1640791d8d8a71afdb9 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Fri, 28 Feb 2025 16:57:25 -0800 Subject: [PATCH 14/23] Upgrade svc --- .github/workflows/sandbox.yml | 2 +- go.mod | 16 +++++++++------- go.sum | 24 ++++++++++++------------ 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/.github/workflows/sandbox.yml b/.github/workflows/sandbox.yml index 123d6b6..9895cf4 100644 --- a/.github/workflows/sandbox.yml +++ b/.github/workflows/sandbox.yml @@ -11,7 +11,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: "1.23.x" + go-version: "1.23" - name: golangci-lint uses: golangci/golangci-lint-action@v4 with: diff --git a/go.mod b/go.mod index 6ad72c6..1d5ecee 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,20 @@ module github.com/luthersystems/sandbox -go 1.23 +go 1.23.0 + +toolchain go1.24.0 require ( - buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.34.2-20240723225114-9e2ac79af3a8.2 + buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.36.5-20250224214741-b97f9dda9589.1 github.com/alecthomas/kong v0.9.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 github.com/luthersystems/shiroclient-sdk-go v0.11.0 - github.com/luthersystems/svc v0.14.2 + github.com/luthersystems/svc v0.14.4-SNAPSHOT.1 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a google.golang.org/grpc v1.65.0 - google.golang.org/protobuf v1.34.2 + google.golang.org/protobuf v1.36.5 ) require ( @@ -48,9 +50,9 @@ require ( go.opentelemetry.io/otel/sdk v1.28.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect - golang.org/x/net v0.27.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/text v0.22.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 158ebc5..5dd6d06 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.34.2-20240723225114-9e2ac79af3a8.2 h1:5Qvw6WhcCG+JuscNjWIWlqcKUtI8gwoGt5GQV1uwzv0= -buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.34.2-20240723225114-9e2ac79af3a8.2/go.mod h1:viSD+PgypYpUnYVvl3Ai2ASZYkXC932irRD9FCu0Ut4= +buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.36.5-20250224214741-b97f9dda9589.1 h1:+YEXdfeAxFZiuQ6a+PHJicGl3MDTW6SVL55NtZJ0vyM= +buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.36.5-20250224214741-b97f9dda9589.1/go.mod h1:2hux50WWzXhYwhPd7tP3JAjTkgNKDN7CafYESiZrxXY= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/alecthomas/assert/v2 v2.6.0 h1:o3WJwILtexrEUk3cUVal3oiQY2tfgr/FHWiz/v2n4FU= @@ -79,8 +79,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/luthersystems/shiroclient-sdk-go v0.11.0 h1:cpK/6ig1dEdCGFH0NqRb4n/tjYDj+mkTvfiJVPjv5jc= github.com/luthersystems/shiroclient-sdk-go v0.11.0/go.mod h1:RjziHTEjVvVHfhbHZBllYF63NErZmcIYnsWoJEJFv/4= -github.com/luthersystems/svc v0.14.2 h1:2gZ12vr6l9q8sOENasJfC587xkwjXkQSYTeVbWzp6mU= -github.com/luthersystems/svc v0.14.2/go.mod h1:3LWI8Fko4+BIVLjI6tLZyuB24Iz8nLH5nN7iyx7b7U4= +github.com/luthersystems/svc v0.14.4-SNAPSHOT.1 h1:DkhG8tf0TiCQNgGn9PwQHFBqy/65jFW4M7MCFhl6BNw= +github.com/luthersystems/svc v0.14.4-SNAPSHOT.1/go.mod h1:nhjYfR3I1S16J6Qqqt+F+e+lDOnRUErX0oazljl3sCU= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= @@ -165,8 +165,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -187,12 +187,12 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -222,8 +222,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= From 84e4acca350a347c60342e191644e8f369787d00 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Mon, 3 Mar 2025 14:26:47 -0800 Subject: [PATCH 15/23] Remove toolchain declaration --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 1d5ecee..6f3eeee 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/luthersystems/sandbox go 1.23.0 -toolchain go1.24.0 - require ( buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.36.5-20250224214741-b97f9dda9589.1 github.com/alecthomas/kong v0.9.0 From 8a02ed9301c091bd3b1469620031a5e5f5963bd7 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Mon, 3 Mar 2025 14:32:26 -0800 Subject: [PATCH 16/23] Fix name standardization --- go.mod | 1 + go.sum | 2 ++ phylum/claim.lisp | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 6f3eeee..f05a9e6 100644 --- a/go.mod +++ b/go.mod @@ -48,6 +48,7 @@ require ( go.opentelemetry.io/otel/sdk v1.28.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect + golang.org/x/crypto v0.35.0 // indirect golang.org/x/net v0.35.0 // indirect golang.org/x/sys v0.30.0 // indirect golang.org/x/text v0.22.0 // indirect diff --git a/go.sum b/go.sum index 5dd6d06..c806f96 100644 --- a/go.sum +++ b/go.sum @@ -150,6 +150,8 @@ go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= +golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= diff --git a/phylum/claim.lisp b/phylum/claim.lisp index 2f4b803..2ef4967 100644 --- a/phylum/claim.lisp +++ b/phylum/claim.lisp @@ -52,7 +52,7 @@ (sorted-map "CLAIM_STATE_UNSPECIFIED" () "CLAIM_STATE_NEW" (event-desc-record "CLAIMS_PORTAL_UI" "input claim details") - "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS" (event-desc-record "EQUIFAX_ID_VERIFY" "verify customer identity") + "CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED" (event-desc-record "EQUIFAX_ID_VERIFY" "verify customer identity") "CLAIM_STATE_LOECLAIM_ID_VERIFIED" (event-desc-record "CAMUNDA_WORKFLOW" "collect policy details") "CLAIM_STATE_OOECLAIM_REVIEWED" (event-desc-record "POSTGRES_CLAIMS_DB" "verify policy") "CLAIM_STATE_OOECLAIM_VALIDATED" (event-desc-record "INVOICE_NINJA" "generate invoice") @@ -114,7 +114,7 @@ (format-string "unhandled response error: {}" resp-err))) (cc:infof (assoc resp-body "state" state) "handle") (cond - ((equal? state "CLAIM_STATE_LOECLAIM_COLLECTED_DETAILS") + ((equal? state "CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED") (let* ([claimant (get resp "claimant")]) (add-event (mk-equifax-req claimant)))) From c7351a15d7a9cb693d8c03229d2258515b749da2 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Thu, 6 Mar 2025 14:37:17 -0800 Subject: [PATCH 17/23] Make tests pass --- api/buf.yaml | 2 +- api/pb/v1/oracle.pb.go | 558 +++++++++++---------- api/pb/v1/oracle.proto | 95 ++-- api/srvpb/v1/oracle.pb.go | 126 ++--- api/srvpb/v1/oracle.pb.gw.go | 48 +- api/srvpb/v1/oracle.proto | 6 +- api/srvpb/v1/oracle.swagger.json | 197 ++------ api/srvpb/v1/oracle_grpc.pb.go | 34 +- phylum/claim.lisp | 6 +- phylum/claim_test.lisp | 11 +- phylum/routes.lisp | 10 +- portal/oracle/endpoints.go | 6 +- tests/e2e.postman_collection.json | 43 +- tests/example/claim.martin_collection.yaml | 27 +- 14 files changed, 534 insertions(+), 635 deletions(-) diff --git a/api/buf.yaml b/api/buf.yaml index 70a0ab1..ccfef3b 100644 --- a/api/buf.yaml +++ b/api/buf.yaml @@ -1,7 +1,7 @@ version: v2 lint: use: - - DEFAULT + - STANDARD deps: - buf.build/googleapis/googleapis - buf.build/grpc-ecosystem/grpc-gateway diff --git a/api/pb/v1/oracle.pb.go b/api/pb/v1/oracle.pb.go index 771d2fe..e07f92e 100644 --- a/api/pb/v1/oracle.pb.go +++ b/api/pb/v1/oracle.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: pb/v1/oracle.proto @@ -30,27 +30,27 @@ type Nationality int32 const ( Nationality_NATIONALITY_UNSPECIFIED Nationality = 0 // Default value (should not be used) - Nationality_GB Nationality = 1 // United Kingdom - Nationality_US Nationality = 2 // United States - Nationality_FR Nationality = 3 // France - Nationality_DE Nationality = 4 // Germany + Nationality_NATIONALITY_GB Nationality = 1 // United Kingdom + Nationality_NATIONALITY_US Nationality = 2 // United States + Nationality_NATIONALITY_FR Nationality = 3 // France + Nationality_NATIONALITY_DE Nationality = 4 // Germany ) // Enum value maps for Nationality. var ( Nationality_name = map[int32]string{ 0: "NATIONALITY_UNSPECIFIED", - 1: "GB", - 2: "US", - 3: "FR", - 4: "DE", + 1: "NATIONALITY_GB", + 2: "NATIONALITY_US", + 3: "NATIONALITY_FR", + 4: "NATIONALITY_DE", } Nationality_value = map[string]int32{ "NATIONALITY_UNSPECIFIED": 0, - "GB": 1, - "US": 2, - "FR": 3, - "DE": 4, + "NATIONALITY_GB": 1, + "NATIONALITY_US": 2, + "NATIONALITY_FR": 3, + "NATIONALITY_DE": 4, } ) @@ -333,10 +333,9 @@ func (x *Claimant) GetNationality() Nationality { // Request to create a claim. type CreateClaimRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - Claimant *Claimant `protobuf:"bytes,1,opt,name=claimant,proto3" json:"claimant,omitempty"` // Details of the claimant - DateOfAccident string `protobuf:"bytes,2,opt,name=date_of_accident,json=dateOfAccident,proto3" json:"date_of_accident,omitempty"` // Date when the accident occurred (YYYY-MM-DD) - DamageAmount int64 `protobuf:"varint,3,opt,name=damage_amount,json=damageAmount,proto3" json:"damage_amount,omitempty"` // Damage amount (stored in cents to avoid floating point issues) - ClaimReason string `protobuf:"bytes,4,opt,name=claim_reason,json=claimReason,proto3" json:"claim_reason,omitempty"` // Brief description of the reason for the claim + DateOfAccident string `protobuf:"bytes,1,opt,name=date_of_accident,json=dateOfAccident,proto3" json:"date_of_accident,omitempty"` // Date when the accident occurred (YYYY-MM-DD) + DamageAmount int64 `protobuf:"varint,2,opt,name=damage_amount,json=damageAmount,proto3" json:"damage_amount,omitempty"` // Damage amount (stored in cents to avoid floating point issues) + ClaimReason string `protobuf:"bytes,3,opt,name=claim_reason,json=claimReason,proto3" json:"claim_reason,omitempty"` // Brief description of the reason for the claim unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -371,34 +370,120 @@ func (*CreateClaimRequest) Descriptor() ([]byte, []int) { return file_pb_v1_oracle_proto_rawDescGZIP(), []int{1} } -func (x *CreateClaimRequest) GetClaimant() *Claimant { +func (x *CreateClaimRequest) GetDateOfAccident() string { + if x != nil { + return x.DateOfAccident + } + return "" +} + +func (x *CreateClaimRequest) GetDamageAmount() int64 { + if x != nil { + return x.DamageAmount + } + return 0 +} + +func (x *CreateClaimRequest) GetClaimReason() string { + if x != nil { + return x.ClaimReason + } + return "" +} + +// Represents an insurance claim, storing its lifecycle, status, and related claimant details. +type Claim struct { + state protoimpl.MessageState `protogen:"open.v1"` + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` // Unique ID assigned by the backend (immutable) + State ClaimState `protobuf:"varint,2,opt,name=state,proto3,enum=pb.v1.ClaimState" json:"state,omitempty"` // The current internal processing state of the claim + Claimant *Claimant `protobuf:"bytes,3,opt,name=claimant,proto3" json:"claimant,omitempty"` // Claimant details + DateOfAccident string `protobuf:"bytes,4,opt,name=date_of_accident,json=dateOfAccident,proto3" json:"date_of_accident,omitempty"` // Date when the accident occurred (YYYY-MM-DD) + DamageAmount int64 `protobuf:"varint,5,opt,name=damage_amount,json=damageAmount,proto3" json:"damage_amount,omitempty"` // Damage amount (stored in cents to prevent floating point issues) + ClaimReason string `protobuf:"bytes,6,opt,name=claim_reason,json=claimReason,proto3" json:"claim_reason,omitempty"` // Description of why the claim was filed + Status Status `protobuf:"varint,7,opt,name=status,proto3,enum=pb.v1.Status" json:"status,omitempty"` // The final outcome of the claim + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Claim) Reset() { + *x = Claim{} + mi := &file_pb_v1_oracle_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Claim) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Claim) ProtoMessage() {} + +func (x *Claim) ProtoReflect() protoreflect.Message { + mi := &file_pb_v1_oracle_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Claim.ProtoReflect.Descriptor instead. +func (*Claim) Descriptor() ([]byte, []int) { + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{2} +} + +func (x *Claim) GetClaimId() string { + if x != nil { + return x.ClaimId + } + return "" +} + +func (x *Claim) GetState() ClaimState { + if x != nil { + return x.State + } + return ClaimState_CLAIM_STATE_UNSPECIFIED +} + +func (x *Claim) GetClaimant() *Claimant { if x != nil { return x.Claimant } return nil } -func (x *CreateClaimRequest) GetDateOfAccident() string { +func (x *Claim) GetDateOfAccident() string { if x != nil { return x.DateOfAccident } return "" } -func (x *CreateClaimRequest) GetDamageAmount() int64 { +func (x *Claim) GetDamageAmount() int64 { if x != nil { return x.DamageAmount } return 0 } -func (x *CreateClaimRequest) GetClaimReason() string { +func (x *Claim) GetClaimReason() string { if x != nil { return x.ClaimReason } return "" } +func (x *Claim) GetStatus() Status { + if x != nil { + return x.Status + } + return Status_STATUS_UNSPECIFIED +} + // Response for creating a claim. type CreateClaimResponse struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -413,7 +498,7 @@ type CreateClaimResponse struct { func (x *CreateClaimResponse) Reset() { *x = CreateClaimResponse{} - mi := &file_pb_v1_oracle_proto_msgTypes[2] + mi := &file_pb_v1_oracle_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -425,7 +510,7 @@ func (x *CreateClaimResponse) String() string { func (*CreateClaimResponse) ProtoMessage() {} func (x *CreateClaimResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[2] + mi := &file_pb_v1_oracle_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -438,7 +523,7 @@ func (x *CreateClaimResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateClaimResponse.ProtoReflect.Descriptor instead. func (*CreateClaimResponse) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{2} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{3} } func (x *CreateClaimResponse) GetResult() isCreateClaimResponse_Result { @@ -483,28 +568,29 @@ func (*CreateClaimResponse_Exception) isCreateClaimResponse_Result() {} func (*CreateClaimResponse_Claim) isCreateClaimResponse_Result() {} // Request to update an existing claim. -type UpdateClaimRequest struct { +type AddClaimantRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - Claim *Claim `protobuf:"bytes,1,opt,name=claim,proto3" json:"claim,omitempty"` // The claim details with updates + ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` + Claimant *Claimant `protobuf:"bytes,2,opt,name=claimant,proto3" json:"claimant,omitempty"` // The claim details with updates unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *UpdateClaimRequest) Reset() { - *x = UpdateClaimRequest{} - mi := &file_pb_v1_oracle_proto_msgTypes[3] +func (x *AddClaimantRequest) Reset() { + *x = AddClaimantRequest{} + mi := &file_pb_v1_oracle_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *UpdateClaimRequest) String() string { +func (x *AddClaimantRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateClaimRequest) ProtoMessage() {} +func (*AddClaimantRequest) ProtoMessage() {} -func (x *UpdateClaimRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[3] +func (x *AddClaimantRequest) ProtoReflect() protoreflect.Message { + mi := &file_pb_v1_oracle_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -515,45 +601,52 @@ func (x *UpdateClaimRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateClaimRequest.ProtoReflect.Descriptor instead. -func (*UpdateClaimRequest) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{3} +// Deprecated: Use AddClaimantRequest.ProtoReflect.Descriptor instead. +func (*AddClaimantRequest) Descriptor() ([]byte, []int) { + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{4} } -func (x *UpdateClaimRequest) GetClaim() *Claim { +func (x *AddClaimantRequest) GetClaimId() string { if x != nil { - return x.Claim + return x.ClaimId + } + return "" +} + +func (x *AddClaimantRequest) GetClaimant() *Claimant { + if x != nil { + return x.Claimant } return nil } // Response for updating a claim. -type UpdateClaimResponse struct { +type AddClaimantResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Result: // - // *UpdateClaimResponse_Exception - // *UpdateClaimResponse_Claim - Result isUpdateClaimResponse_Result `protobuf_oneof:"result"` + // *AddClaimantResponse_Exception + // *AddClaimantResponse_Claim + Result isAddClaimantResponse_Result `protobuf_oneof:"result"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *UpdateClaimResponse) Reset() { - *x = UpdateClaimResponse{} - mi := &file_pb_v1_oracle_proto_msgTypes[4] +func (x *AddClaimantResponse) Reset() { + *x = AddClaimantResponse{} + mi := &file_pb_v1_oracle_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *UpdateClaimResponse) String() string { +func (x *AddClaimantResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateClaimResponse) ProtoMessage() {} +func (*AddClaimantResponse) ProtoMessage() {} -func (x *UpdateClaimResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[4] +func (x *AddClaimantResponse) ProtoReflect() protoreflect.Message { + mi := &file_pb_v1_oracle_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -564,51 +657,51 @@ func (x *UpdateClaimResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateClaimResponse.ProtoReflect.Descriptor instead. -func (*UpdateClaimResponse) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{4} +// Deprecated: Use AddClaimantResponse.ProtoReflect.Descriptor instead. +func (*AddClaimantResponse) Descriptor() ([]byte, []int) { + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{5} } -func (x *UpdateClaimResponse) GetResult() isUpdateClaimResponse_Result { +func (x *AddClaimantResponse) GetResult() isAddClaimantResponse_Result { if x != nil { return x.Result } return nil } -func (x *UpdateClaimResponse) GetException() *v1.Exception { +func (x *AddClaimantResponse) GetException() *v1.Exception { if x != nil { - if x, ok := x.Result.(*UpdateClaimResponse_Exception); ok { + if x, ok := x.Result.(*AddClaimantResponse_Exception); ok { return x.Exception } } return nil } -func (x *UpdateClaimResponse) GetClaim() *Claim { +func (x *AddClaimantResponse) GetClaim() *Claim { if x != nil { - if x, ok := x.Result.(*UpdateClaimResponse_Claim); ok { + if x, ok := x.Result.(*AddClaimantResponse_Claim); ok { return x.Claim } } return nil } -type isUpdateClaimResponse_Result interface { - isUpdateClaimResponse_Result() +type isAddClaimantResponse_Result interface { + isAddClaimantResponse_Result() } -type UpdateClaimResponse_Exception struct { +type AddClaimantResponse_Exception struct { Exception *v1.Exception `protobuf:"bytes,1,opt,name=exception,proto3,oneof"` // Exception details if an error occurred } -type UpdateClaimResponse_Claim struct { +type AddClaimantResponse_Claim struct { Claim *Claim `protobuf:"bytes,2,opt,name=claim,proto3,oneof"` // The updated claim if successful } -func (*UpdateClaimResponse_Exception) isUpdateClaimResponse_Result() {} +func (*AddClaimantResponse_Exception) isAddClaimantResponse_Result() {} -func (*UpdateClaimResponse_Claim) isUpdateClaimResponse_Result() {} +func (*AddClaimantResponse_Claim) isAddClaimantResponse_Result() {} // Request to retrieve a claim by its unique ID. type GetClaimRequest struct { @@ -620,7 +713,7 @@ type GetClaimRequest struct { func (x *GetClaimRequest) Reset() { *x = GetClaimRequest{} - mi := &file_pb_v1_oracle_proto_msgTypes[5] + mi := &file_pb_v1_oracle_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -632,7 +725,7 @@ func (x *GetClaimRequest) String() string { func (*GetClaimRequest) ProtoMessage() {} func (x *GetClaimRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[5] + mi := &file_pb_v1_oracle_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -645,7 +738,7 @@ func (x *GetClaimRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClaimRequest.ProtoReflect.Descriptor instead. func (*GetClaimRequest) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{5} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{6} } func (x *GetClaimRequest) GetClaimId() string { @@ -669,7 +762,7 @@ type GetClaimResponse struct { func (x *GetClaimResponse) Reset() { *x = GetClaimResponse{} - mi := &file_pb_v1_oracle_proto_msgTypes[6] + mi := &file_pb_v1_oracle_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -681,7 +774,7 @@ func (x *GetClaimResponse) String() string { func (*GetClaimResponse) ProtoMessage() {} func (x *GetClaimResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[6] + mi := &file_pb_v1_oracle_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -694,7 +787,7 @@ func (x *GetClaimResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetClaimResponse.ProtoReflect.Descriptor instead. func (*GetClaimResponse) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{6} + return file_pb_v1_oracle_proto_rawDescGZIP(), []int{7} } func (x *GetClaimResponse) GetResult() isGetClaimResponse_Result { @@ -738,99 +831,6 @@ func (*GetClaimResponse_Exception) isGetClaimResponse_Result() {} func (*GetClaimResponse_Claim) isGetClaimResponse_Result() {} -// Represents an insurance claim, storing its lifecycle, status, and related claimant details. -type Claim struct { - state protoimpl.MessageState `protogen:"open.v1"` - ClaimId string `protobuf:"bytes,1,opt,name=claim_id,json=claimId,proto3" json:"claim_id,omitempty"` // Unique ID assigned by the backend (immutable) - State ClaimState `protobuf:"varint,2,opt,name=state,proto3,enum=pb.v1.ClaimState" json:"state,omitempty"` // The current internal processing state of the claim - Claimant *Claimant `protobuf:"bytes,3,opt,name=claimant,proto3" json:"claimant,omitempty"` // Claimant details - DateOfAccident string `protobuf:"bytes,4,opt,name=date_of_accident,json=dateOfAccident,proto3" json:"date_of_accident,omitempty"` // Date when the accident occurred (YYYY-MM-DD) - DamageAmount int64 `protobuf:"varint,5,opt,name=damage_amount,json=damageAmount,proto3" json:"damage_amount,omitempty"` // Damage amount (stored in cents to prevent floating point issues) - ClaimReason string `protobuf:"bytes,6,opt,name=claim_reason,json=claimReason,proto3" json:"claim_reason,omitempty"` // Description of why the claim was filed - Status Status `protobuf:"varint,7,opt,name=status,proto3,enum=pb.v1.Status" json:"status,omitempty"` // The final outcome of the claim - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *Claim) Reset() { - *x = Claim{} - mi := &file_pb_v1_oracle_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *Claim) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Claim) ProtoMessage() {} - -func (x *Claim) ProtoReflect() protoreflect.Message { - mi := &file_pb_v1_oracle_proto_msgTypes[7] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Claim.ProtoReflect.Descriptor instead. -func (*Claim) Descriptor() ([]byte, []int) { - return file_pb_v1_oracle_proto_rawDescGZIP(), []int{7} -} - -func (x *Claim) GetClaimId() string { - if x != nil { - return x.ClaimId - } - return "" -} - -func (x *Claim) GetState() ClaimState { - if x != nil { - return x.State - } - return ClaimState_CLAIM_STATE_UNSPECIFIED -} - -func (x *Claim) GetClaimant() *Claimant { - if x != nil { - return x.Claimant - } - return nil -} - -func (x *Claim) GetDateOfAccident() string { - if x != nil { - return x.DateOfAccident - } - return "" -} - -func (x *Claim) GetDamageAmount() int64 { - if x != nil { - return x.DamageAmount - } - return 0 -} - -func (x *Claim) GetClaimReason() string { - if x != nil { - return x.ClaimReason - } - return "" -} - -func (x *Claim) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_STATUS_UNSPECIFIED -} - var File_pb_v1_oracle_proto protoreflect.FileDescriptor var file_pb_v1_oracle_proto_rawDesc = string([]byte{ @@ -863,108 +863,111 @@ var file_pb_v1_oracle_proto_rawDesc = string([]byte{ 0x50, 0x6f, 0x73, 0x74, 0x54, 0x6f, 0x77, 0x6e, 0x12, 0x34, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0xb3, + 0x79, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x86, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, + 0x5f, 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x41, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, + 0x23, 0x0a, 0x0d, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x72, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x91, 0x02, 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x61, 0x63, - 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, + 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x41, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x7b, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x65, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, - 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x38, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x7b, 0x0a, 0x13, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x7b, 0x0a, 0x13, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x08, - 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x65, 0x78, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x24, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, - 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0x91, 0x02, 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, - 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, - 0x74, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x66, 0x5f, 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x66, 0x41, 0x63, 0x63, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x5f, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x64, 0x61, - 0x6d, 0x61, 0x67, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x25, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, - 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x2a, 0x4a, 0x0a, 0x0b, 0x4e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x17, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x49, - 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x06, 0x0a, 0x02, 0x47, 0x42, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x53, 0x10, 0x02, - 0x12, 0x06, 0x0a, 0x02, 0x46, 0x52, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x44, 0x45, 0x10, 0x04, - 0x2a, 0x5b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x50, 0x50, - 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x41, 0x49, 0x44, 0x10, 0x03, 0x2a, 0xfa, 0x02, - 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, - 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4c, 0x41, - 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x2a, - 0x0a, 0x26, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, - 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x44, 0x45, 0x54, 0x41, 0x49, 0x4c, 0x53, 0x5f, 0x43, - 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, - 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, 0x4c, 0x41, - 0x49, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, - 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x45, - 0x44, 0x10, 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x4c, 0x41, 0x49, 0x4d, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, - 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x44, 0x10, 0x06, 0x12, 0x27, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x52, 0x08, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x22, 0x7b, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, + 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x48, 0x00, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x49, + 0x64, 0x22, 0x78, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x09, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x7a, 0x0a, 0x0b, 0x4e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x17, 0x4e, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x47, 0x42, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4e, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x53, 0x10, 0x02, 0x12, + 0x12, 0x0a, 0x0e, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x46, + 0x52, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x49, + 0x54, 0x59, 0x5f, 0x44, 0x45, 0x10, 0x04, 0x2a, 0x5b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, + 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x49, 0x4e, 0x45, + 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x41, + 0x49, 0x44, 0x10, 0x03, 0x2a, 0xfa, 0x02, 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x4e, 0x45, 0x57, 0x10, 0x01, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x44, 0x45, + 0x54, 0x41, 0x49, 0x4c, 0x53, 0x5f, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x4c, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x56, 0x45, 0x52, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, + 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x45, 0x44, 0x10, 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4c, + 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x43, 0x4c, 0x41, + 0x49, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x25, + 0x0a, 0x21, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, + 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x49, 0x53, 0x53, + 0x55, 0x45, 0x44, 0x10, 0x06, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, + 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x45, 0x44, 0x10, 0x07, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, - 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x52, 0x45, 0x56, - 0x49, 0x45, 0x57, 0x45, 0x44, 0x10, 0x07, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x4c, 0x41, 0x49, 0x4d, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, - 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x08, - 0x12, 0x28, 0x0a, 0x24, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x4f, 0x4f, 0x45, 0x50, 0x41, 0x59, 0x5f, 0x50, 0x41, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x10, 0x09, 0x42, 0x79, 0x0a, 0x09, 0x63, 0x6f, - 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, - 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62, 0x2f, - 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x05, 0x50, 0x62, 0x2e, 0x56, 0x31, - 0xca, 0x02, 0x05, 0x50, 0x62, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x11, 0x50, 0x62, 0x5c, 0x56, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, - 0x62, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x46, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, + 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x08, 0x12, 0x28, 0x0a, 0x24, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x4f, 0x45, 0x50, 0x41, 0x59, 0x5f, 0x50, 0x41, + 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x52, 0x49, 0x47, 0x47, 0x45, 0x52, 0x45, 0x44, 0x10, + 0x09, 0x42, 0x79, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, + 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x70, 0x62, 0x2f, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, + 0x02, 0x05, 0x50, 0x62, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x05, 0x50, 0x62, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x11, 0x50, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x62, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -987,32 +990,31 @@ var file_pb_v1_oracle_proto_goTypes = []any{ (ClaimState)(0), // 2: pb.v1.ClaimState (*Claimant)(nil), // 3: pb.v1.Claimant (*CreateClaimRequest)(nil), // 4: pb.v1.CreateClaimRequest - (*CreateClaimResponse)(nil), // 5: pb.v1.CreateClaimResponse - (*UpdateClaimRequest)(nil), // 6: pb.v1.UpdateClaimRequest - (*UpdateClaimResponse)(nil), // 7: pb.v1.UpdateClaimResponse - (*GetClaimRequest)(nil), // 8: pb.v1.GetClaimRequest - (*GetClaimResponse)(nil), // 9: pb.v1.GetClaimResponse - (*Claim)(nil), // 10: pb.v1.Claim + (*Claim)(nil), // 5: pb.v1.Claim + (*CreateClaimResponse)(nil), // 6: pb.v1.CreateClaimResponse + (*AddClaimantRequest)(nil), // 7: pb.v1.AddClaimantRequest + (*AddClaimantResponse)(nil), // 8: pb.v1.AddClaimantResponse + (*GetClaimRequest)(nil), // 9: pb.v1.GetClaimRequest + (*GetClaimResponse)(nil), // 10: pb.v1.GetClaimResponse (*v1.Exception)(nil), // 11: common.v1.Exception } var file_pb_v1_oracle_proto_depIdxs = []int32{ 0, // 0: pb.v1.Claimant.nationality:type_name -> pb.v1.Nationality - 3, // 1: pb.v1.CreateClaimRequest.claimant:type_name -> pb.v1.Claimant - 11, // 2: pb.v1.CreateClaimResponse.exception:type_name -> common.v1.Exception - 10, // 3: pb.v1.CreateClaimResponse.claim:type_name -> pb.v1.Claim - 10, // 4: pb.v1.UpdateClaimRequest.claim:type_name -> pb.v1.Claim - 11, // 5: pb.v1.UpdateClaimResponse.exception:type_name -> common.v1.Exception - 10, // 6: pb.v1.UpdateClaimResponse.claim:type_name -> pb.v1.Claim - 11, // 7: pb.v1.GetClaimResponse.exception:type_name -> common.v1.Exception - 10, // 8: pb.v1.GetClaimResponse.claim:type_name -> pb.v1.Claim - 2, // 9: pb.v1.Claim.state:type_name -> pb.v1.ClaimState - 3, // 10: pb.v1.Claim.claimant:type_name -> pb.v1.Claimant - 1, // 11: pb.v1.Claim.status:type_name -> pb.v1.Status - 12, // [12:12] is the sub-list for method output_type - 12, // [12:12] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 2, // 1: pb.v1.Claim.state:type_name -> pb.v1.ClaimState + 3, // 2: pb.v1.Claim.claimant:type_name -> pb.v1.Claimant + 1, // 3: pb.v1.Claim.status:type_name -> pb.v1.Status + 11, // 4: pb.v1.CreateClaimResponse.exception:type_name -> common.v1.Exception + 5, // 5: pb.v1.CreateClaimResponse.claim:type_name -> pb.v1.Claim + 3, // 6: pb.v1.AddClaimantRequest.claimant:type_name -> pb.v1.Claimant + 11, // 7: pb.v1.AddClaimantResponse.exception:type_name -> common.v1.Exception + 5, // 8: pb.v1.AddClaimantResponse.claim:type_name -> pb.v1.Claim + 11, // 9: pb.v1.GetClaimResponse.exception:type_name -> common.v1.Exception + 5, // 10: pb.v1.GetClaimResponse.claim:type_name -> pb.v1.Claim + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name } func init() { file_pb_v1_oracle_proto_init() } @@ -1020,15 +1022,15 @@ func file_pb_v1_oracle_proto_init() { if File_pb_v1_oracle_proto != nil { return } - file_pb_v1_oracle_proto_msgTypes[2].OneofWrappers = []any{ + file_pb_v1_oracle_proto_msgTypes[3].OneofWrappers = []any{ (*CreateClaimResponse_Exception)(nil), (*CreateClaimResponse_Claim)(nil), } - file_pb_v1_oracle_proto_msgTypes[4].OneofWrappers = []any{ - (*UpdateClaimResponse_Exception)(nil), - (*UpdateClaimResponse_Claim)(nil), + file_pb_v1_oracle_proto_msgTypes[5].OneofWrappers = []any{ + (*AddClaimantResponse_Exception)(nil), + (*AddClaimantResponse_Claim)(nil), } - file_pb_v1_oracle_proto_msgTypes[6].OneofWrappers = []any{ + file_pb_v1_oracle_proto_msgTypes[7].OneofWrappers = []any{ (*GetClaimResponse_Exception)(nil), (*GetClaimResponse_Claim)(nil), } diff --git a/api/pb/v1/oracle.proto b/api/pb/v1/oracle.proto index 4a600b2..9dc0517 100644 --- a/api/pb/v1/oracle.proto +++ b/api/pb/v1/oracle.proto @@ -11,88 +11,87 @@ option go_package = "github.com/luthersystems/sandbox/api/pb/v1"; // Represents a nationality using an enum for structured validation. enum Nationality { - NATIONALITY_UNSPECIFIED = 0; // Default value (should not be used) - GB = 1; // United Kingdom - US = 2; // United States - FR = 3; // France - DE = 4; // Germany - // Additional nationalities can be added as needed. + NATIONALITY_UNSPECIFIED = 0; // Default value (should not be used) + NATIONALITY_GB = 1; // United Kingdom + NATIONALITY_US = 2; // United States + NATIONALITY_FR = 3; // France + NATIONALITY_DE = 4; // Germany } // Stores details of the claimant (person making the claim). message Claimant { - string account_number = 1; // Bank account number (string to support leading zeros) - string account_sort_code = 2; // Bank sort code (string to avoid leading-zero loss) - string dob = 3; // Date of birth (YYYY-MM-DD) - string surname = 4; // Surname (last name) - string forename = 5; // Forename (first name) - string full_address = 6; // Full address in a single field - string address_number = 7; // House/building number - string address_street1 = 8; // Street address - string address_postcode = 9; // Postal code (ZIP code) - string address_post_town = 10; // Post town or city - Nationality nationality = 11; // Nationality, stored as an enum + string account_number = 1; // Bank account number (string to support leading zeros) + string account_sort_code = 2; // Bank sort code (string to avoid leading-zero loss) + string dob = 3; // Date of birth (YYYY-MM-DD) + string surname = 4; // Surname (last name) + string forename = 5; // Forename (first name) + string full_address = 6; // Full address in a single field + string address_number = 7; // House/building number + string address_street1 = 8; // Street address + string address_postcode = 9; // Postal code (ZIP code) + string address_post_town = 10; // Post town or city + Nationality nationality = 11; // Nationality, stored as an enum } // Represents the final outcome of a claim. enum Status { - STATUS_UNSPECIFIED = 0; // Default value (should not be used) - STATUS_APPROVED = 1; // Claim was approved - STATUS_DECLINED = 2; // Claim was declined - STATUS_PAID = 3; // Claim has been paid out + STATUS_UNSPECIFIED = 0; // Default value (should not be used) + STATUS_APPROVED = 1; // Claim was approved + STATUS_DECLINED = 2; // Claim was declined + STATUS_PAID = 3; // Claim has been paid out } // Represents the processing state of the claim (process progress). enum ClaimState { - CLAIM_STATE_UNSPECIFIED = 0; // Default value (should not be used) - CLAIM_STATE_NEW = 1; // Claim was created - CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED = 2;// Claimant details submitted - CLAIM_STATE_LOECLAIM_ID_VERIFIED = 3; // Identity verified - CLAIM_STATE_OOECLAIM_REVIEWED = 4; // Claim reviewed - CLAIM_STATE_OOECLAIM_VALIDATED = 5; // Claim validated - CLAIM_STATE_LOEFIN_INVOICE_ISSUED = 6; // Invoice issued - CLAIM_STATE_OOEFIN_INVOICE_REVIEWED = 7; // Invoice reviewed - CLAIM_STATE_OOEFIN_INVOICE_APPROVED = 8; // Invoice approved - CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED = 9; // Payment triggered + CLAIM_STATE_UNSPECIFIED = 0; // Default value (should not be used) + CLAIM_STATE_NEW = 1; // Claim was created + CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED = 2; // Claimant details submitted + CLAIM_STATE_LOECLAIM_ID_VERIFIED = 3; // Identity verified + CLAIM_STATE_OOECLAIM_REVIEWED = 4; // Claim reviewed + CLAIM_STATE_OOECLAIM_VALIDATED = 5; // Claim validated + CLAIM_STATE_LOEFIN_INVOICE_ISSUED = 6; // Invoice issued + CLAIM_STATE_OOEFIN_INVOICE_REVIEWED = 7; // Invoice reviewed + CLAIM_STATE_OOEFIN_INVOICE_APPROVED = 8; // Invoice approved + CLAIM_STATE_OOEPAY_PAYMENT_TRIGGERED = 9; // Payment triggered } // Request to create a claim. message CreateClaimRequest { - Claimant claimant = 1; // Details of the claimant - string date_of_accident = 2;// Date when the accident occurred (YYYY-MM-DD) - int64 damage_amount = 3; // Damage amount (stored in cents to avoid floating point issues) - string claim_reason = 4; // Brief description of the reason for the claim + string date_of_accident = 1; // Date when the accident occurred (YYYY-MM-DD) + int64 damage_amount = 2; // Damage amount (stored in cents to avoid floating point issues) + string claim_reason = 3; // Brief description of the reason for the claim } // Represents an insurance claim, storing its lifecycle, status, and related claimant details. message Claim { - string claim_id = 1; // Unique ID assigned by the backend (immutable) - ClaimState state = 2; // The current internal processing state of the claim - Claimant claimant = 3; // Claimant details - string date_of_accident = 4;// Date when the accident occurred (YYYY-MM-DD) - int64 damage_amount = 5; // Damage amount (stored in cents to prevent floating point issues) - string claim_reason = 6; // Description of why the claim was filed - Status status = 7; // The final outcome of the claim + string claim_id = 1; // Unique ID assigned by the backend (immutable) + ClaimState state = 2; // The current internal processing state of the claim + Claimant claimant = 3; // Claimant details + string date_of_accident = 4; // Date when the accident occurred (YYYY-MM-DD) + int64 damage_amount = 5; // Damage amount (stored in cents to prevent floating point issues) + string claim_reason = 6; // Description of why the claim was filed + Status status = 7; // The final outcome of the claim } // Response for creating a claim. message CreateClaimResponse { oneof result { common.v1.Exception exception = 1; // Exception details if an error occurred - Claim claim = 2; // The created claim if successful + Claim claim = 2; // The created claim if successful } } // Request to update an existing claim. -message UpdateClaimRequest { - Claim claim = 1; // The claim details with updates +message AddClaimantRequest { + string claim_id = 1; + Claimant claimant = 2; // The claim details with updates } // Response for updating a claim. -message UpdateClaimResponse { +message AddClaimantResponse { oneof result { common.v1.Exception exception = 1; // Exception details if an error occurred - Claim claim = 2; // The updated claim if successful + Claim claim = 2; // The updated claim if successful } } @@ -105,6 +104,6 @@ message GetClaimRequest { message GetClaimResponse { oneof result { common.v1.Exception exception = 1; // Exception details if an error occurred - Claim claim = 2; // The retrieved claim if successful + Claim claim = 2; // The retrieved claim if successful } } diff --git a/api/srvpb/v1/oracle.pb.go b/api/srvpb/v1/oracle.pb.go index 4edb9f2..4dc1820 100644 --- a/api/srvpb/v1/oracle.pb.go +++ b/api/srvpb/v1/oracle.pb.go @@ -4,7 +4,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc (unknown) // source: srvpb/v1/oracle.proto @@ -41,7 +41,7 @@ var file_srvpb_v1_oracle_proto_rawDesc = string([]byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xde, 0x03, 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xe1, 0x03, 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x85, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, @@ -57,84 +57,84 @@ var file_srvpb_v1_oracle_proto_rawDesc = string([]byte{ 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x77, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, - 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x3a, 0x01, 0x2a, 0x32, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2f, 0x7b, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0x65, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x92, 0x41, - 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, - 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2f, 0x7b, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x42, 0xaa, 0x05, 0x92, 0x41, 0xa0, 0x04, 0x12, 0x12, 0x0a, - 0x0b, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x20, 0x41, 0x50, 0x49, 0x32, 0x03, 0x31, 0x2e, - 0x30, 0x2a, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x53, 0x0a, 0x03, 0x34, 0x30, 0x30, 0x12, - 0x4c, 0x0a, 0x28, 0x42, 0x61, 0x64, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x62, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x12, 0x20, 0x0a, 0x1e, 0x1a, - 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3f, 0x0a, - 0x03, 0x34, 0x30, 0x31, 0x12, 0x38, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x1e, - 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, - 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3c, - 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x35, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x7a, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, + 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, + 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, + 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2f, 0x7b, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, + 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x16, + 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x28, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x2f, 0x7b, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x42, 0xaa, 0x05, 0x92, 0x41, 0xa0, 0x04, + 0x12, 0x12, 0x0a, 0x0b, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x20, 0x41, 0x50, 0x49, 0x32, + 0x03, 0x31, 0x2e, 0x30, 0x2a, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x53, 0x0a, 0x03, 0x34, + 0x30, 0x30, 0x12, 0x4c, 0x0a, 0x28, 0x42, 0x61, 0x64, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, + 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x12, 0x20, + 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x3f, 0x0a, 0x03, 0x34, 0x30, 0x31, 0x12, 0x38, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, + 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x52, 0x3c, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x35, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x12, 0x20, 0x0a, + 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, + 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x10, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, + 0x67, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x3b, 0x0a, 0x03, - 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x10, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x23, 0x0a, 0x03, 0x34, 0x30, 0x35, - 0x12, 0x1c, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x4b, - 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x44, 0x0a, 0x20, 0x55, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x40, 0x0a, 0x03, 0x35, - 0x30, 0x33, 0x12, 0x39, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x1e, 0x1a, - 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x65, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5a, 0x1e, 0x0a, - 0x1c, 0x0a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x12, 0x0f, 0x08, 0x02, - 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x20, 0x02, 0x0a, 0x0c, 0x63, - 0x6f, 0x6d, 0x2e, 0x73, 0x72, 0x76, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4f, 0x72, 0x61, - 0x63, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x73, 0x72, 0x76, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x53, 0x72, 0x76, - 0x70, 0x62, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x53, 0x72, 0x76, 0x70, 0x62, 0x5c, 0x56, 0x31, - 0xe2, 0x02, 0x14, 0x53, 0x72, 0x76, 0x70, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x53, 0x72, 0x76, 0x70, 0x62, 0x3a, - 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x23, 0x0a, 0x03, + 0x34, 0x30, 0x35, 0x12, 0x1c, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, + 0x07, 0x52, 0x4b, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x44, 0x0a, 0x20, 0x55, 0x6e, 0x65, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x1e, + 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, + 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x40, + 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x39, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, + 0x0a, 0x1e, 0x1a, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x5a, 0x1e, 0x0a, 0x1c, 0x0a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x12, + 0x0f, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x20, 0x02, + 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x72, 0x76, 0x70, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x0b, + 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x75, 0x74, 0x68, 0x65, 0x72, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x73, 0x72, 0x76, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x08, + 0x53, 0x72, 0x76, 0x70, 0x62, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x08, 0x53, 0x72, 0x76, 0x70, 0x62, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x14, 0x53, 0x72, 0x76, 0x70, 0x62, 0x5c, 0x56, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x53, 0x72, 0x76, + 0x70, 0x62, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var file_srvpb_v1_oracle_proto_goTypes = []any{ (*v1.GetHealthCheckRequest)(nil), // 0: healthcheck.v1.GetHealthCheckRequest (*v11.CreateClaimRequest)(nil), // 1: pb.v1.CreateClaimRequest - (*v11.UpdateClaimRequest)(nil), // 2: pb.v1.UpdateClaimRequest + (*v11.AddClaimantRequest)(nil), // 2: pb.v1.AddClaimantRequest (*v11.GetClaimRequest)(nil), // 3: pb.v1.GetClaimRequest (*v1.GetHealthCheckResponse)(nil), // 4: healthcheck.v1.GetHealthCheckResponse (*v11.CreateClaimResponse)(nil), // 5: pb.v1.CreateClaimResponse - (*v11.UpdateClaimResponse)(nil), // 6: pb.v1.UpdateClaimResponse + (*v11.AddClaimantResponse)(nil), // 6: pb.v1.AddClaimantResponse (*v11.GetClaimResponse)(nil), // 7: pb.v1.GetClaimResponse } var file_srvpb_v1_oracle_proto_depIdxs = []int32{ 0, // 0: srvpb.v1.SandboxService.GetHealthCheck:input_type -> healthcheck.v1.GetHealthCheckRequest 1, // 1: srvpb.v1.SandboxService.CreateClaim:input_type -> pb.v1.CreateClaimRequest - 2, // 2: srvpb.v1.SandboxService.UpdateClaim:input_type -> pb.v1.UpdateClaimRequest + 2, // 2: srvpb.v1.SandboxService.AddClaimant:input_type -> pb.v1.AddClaimantRequest 3, // 3: srvpb.v1.SandboxService.GetClaim:input_type -> pb.v1.GetClaimRequest 4, // 4: srvpb.v1.SandboxService.GetHealthCheck:output_type -> healthcheck.v1.GetHealthCheckResponse 5, // 5: srvpb.v1.SandboxService.CreateClaim:output_type -> pb.v1.CreateClaimResponse - 6, // 6: srvpb.v1.SandboxService.UpdateClaim:output_type -> pb.v1.UpdateClaimResponse + 6, // 6: srvpb.v1.SandboxService.AddClaimant:output_type -> pb.v1.AddClaimantResponse 7, // 7: srvpb.v1.SandboxService.GetClaim:output_type -> pb.v1.GetClaimResponse 4, // [4:8] is the sub-list for method output_type 0, // [0:4] is the sub-list for method input_type diff --git a/api/srvpb/v1/oracle.pb.gw.go b/api/srvpb/v1/oracle.pb.gw.go index 88600b7..2deb2f4 100644 --- a/api/srvpb/v1/oracle.pb.gw.go +++ b/api/srvpb/v1/oracle.pb.gw.go @@ -105,8 +105,8 @@ func local_request_SandboxService_CreateClaim_0(ctx context.Context, marshaler r } -func request_SandboxService_UpdateClaim_0(ctx context.Context, marshaler runtime.Marshaler, client SandboxServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1_1.UpdateClaimRequest +func request_SandboxService_AddClaimant_0(ctx context.Context, marshaler runtime.Marshaler, client SandboxServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq v1_1.AddClaimantRequest var metadata runtime.ServerMetadata if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { @@ -120,23 +120,23 @@ func request_SandboxService_UpdateClaim_0(ctx context.Context, marshaler runtime _ = err ) - val, ok = pathParams["claim.claim_id"] + val, ok = pathParams["claim_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "claim.claim_id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "claim_id") } - err = runtime.PopulateFieldFromPath(&protoReq, "claim.claim_id", val) + protoReq.ClaimId, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "claim.claim_id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "claim_id", err) } - msg, err := client.UpdateClaim(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.AddClaimant(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_SandboxService_UpdateClaim_0(ctx context.Context, marshaler runtime.Marshaler, server SandboxServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1_1.UpdateClaimRequest +func local_request_SandboxService_AddClaimant_0(ctx context.Context, marshaler runtime.Marshaler, server SandboxServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq v1_1.AddClaimantRequest var metadata runtime.ServerMetadata if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { @@ -150,17 +150,17 @@ func local_request_SandboxService_UpdateClaim_0(ctx context.Context, marshaler r _ = err ) - val, ok = pathParams["claim.claim_id"] + val, ok = pathParams["claim_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "claim.claim_id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "claim_id") } - err = runtime.PopulateFieldFromPath(&protoReq, "claim.claim_id", val) + protoReq.ClaimId, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "claim.claim_id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "claim_id", err) } - msg, err := server.UpdateClaim(ctx, &protoReq) + msg, err := server.AddClaimant(ctx, &protoReq) return msg, metadata, err } @@ -273,7 +273,7 @@ func RegisterSandboxServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) - mux.Handle("PATCH", pattern_SandboxService_UpdateClaim_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_SandboxService_AddClaimant_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -281,12 +281,12 @@ func RegisterSandboxServiceHandlerServer(ctx context.Context, mux *runtime.Serve inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/srvpb.v1.SandboxService/UpdateClaim", runtime.WithHTTPPathPattern("/v1/claim/{claim.claim_id}")) + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/srvpb.v1.SandboxService/AddClaimant", runtime.WithHTTPPathPattern("/v1/claim/{claim_id}/claimant")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_SandboxService_UpdateClaim_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_SandboxService_AddClaimant_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { @@ -294,7 +294,7 @@ func RegisterSandboxServiceHandlerServer(ctx context.Context, mux *runtime.Serve return } - forward_SandboxService_UpdateClaim_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_SandboxService_AddClaimant_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -408,25 +408,25 @@ func RegisterSandboxServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) - mux.Handle("PATCH", pattern_SandboxService_UpdateClaim_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_SandboxService_AddClaimant_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/srvpb.v1.SandboxService/UpdateClaim", runtime.WithHTTPPathPattern("/v1/claim/{claim.claim_id}")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/srvpb.v1.SandboxService/AddClaimant", runtime.WithHTTPPathPattern("/v1/claim/{claim_id}/claimant")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_SandboxService_UpdateClaim_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_SandboxService_AddClaimant_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_SandboxService_UpdateClaim_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_SandboxService_AddClaimant_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -460,7 +460,7 @@ var ( pattern_SandboxService_CreateClaim_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "claims"}, "")) - pattern_SandboxService_UpdateClaim_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "claim", "claim.claim_id"}, "")) + pattern_SandboxService_AddClaimant_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1", "claim", "claim_id", "claimant"}, "")) pattern_SandboxService_GetClaim_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "claim", "claim_id"}, "")) ) @@ -470,7 +470,7 @@ var ( forward_SandboxService_CreateClaim_0 = runtime.ForwardResponseMessage - forward_SandboxService_UpdateClaim_0 = runtime.ForwardResponseMessage + forward_SandboxService_AddClaimant_0 = runtime.ForwardResponseMessage forward_SandboxService_GetClaim_0 = runtime.ForwardResponseMessage ) diff --git a/api/srvpb/v1/oracle.proto b/api/srvpb/v1/oracle.proto index b63d6ac..70a5521 100644 --- a/api/srvpb/v1/oracle.proto +++ b/api/srvpb/v1/oracle.proto @@ -108,10 +108,10 @@ service SandboxService { option (google.api.http) = {post: "/v1/claims"}; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {tags: "Service"}; } - // Update claim sets claim details. - rpc UpdateClaim(pb.v1.UpdateClaimRequest) returns (pb.v1.UpdateClaimResponse) { + // Add claimant updates claim details. + rpc AddClaimant(pb.v1.AddClaimantRequest) returns (pb.v1.AddClaimantResponse) { option (google.api.http) = { - patch: "/v1/claim/{claim.claim_id}" + post: "/v1/claim/{claim_id}/claimant" body: "*" }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {tags: "Service"}; diff --git a/api/srvpb/v1/oracle.swagger.json b/api/srvpb/v1/oracle.swagger.json index 80f5ade..60963ce 100644 --- a/api/srvpb/v1/oracle.swagger.json +++ b/api/srvpb/v1/oracle.swagger.json @@ -19,15 +19,15 @@ "application/json" ], "paths": { - "/v1/claim/{claim.claimId}": { - "patch": { - "summary": "Update claim sets claim details.", - "operationId": "SandboxService_UpdateClaim", + "/v1/claim/{claimId}": { + "get": { + "summary": "Retrieve claim details.", + "operationId": "SandboxService_GetClaim", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1UpdateClaimResponse" + "$ref": "#/definitions/v1GetClaimResponse" } }, "400": { @@ -82,19 +82,11 @@ }, "parameters": [ { - "name": "claim.claimId", - "description": "Unique ID assigned by the backend (immutable)", + "name": "claimId", + "description": "Unique identifier of the claim to fetch", "in": "path", "required": true, "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/SandboxServiceUpdateClaimBody" - } } ], "tags": [ @@ -102,15 +94,15 @@ ] } }, - "/v1/claim/{claimId}": { - "get": { - "summary": "Retrieve claim details.", - "operationId": "SandboxService_GetClaim", + "/v1/claim/{claimId}/claimant": { + "post": { + "summary": "Add claimant updates claim details.", + "operationId": "SandboxService_AddClaimant", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1GetClaimResponse" + "$ref": "#/definitions/v1AddClaimantResponse" } }, "400": { @@ -166,10 +158,17 @@ "parameters": [ { "name": "claimId", - "description": "Unique identifier of the claim to fetch", "in": "path", "required": true, "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SandboxServiceAddClaimantBody" + } } ], "tags": [ @@ -239,91 +238,6 @@ } }, "parameters": [ - { - "name": "claimant.accountNumber", - "description": "Bank account number (string to support leading zeros)", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.accountSortCode", - "description": "Bank sort code (string to avoid leading-zero loss)", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.dob", - "description": "Date of birth (YYYY-MM-DD)", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.surname", - "description": "Surname (last name)", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.forename", - "description": "Forename (first name)", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.fullAddress", - "description": "Full address in a single field", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.addressNumber", - "description": "House/building number", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.addressStreet1", - "description": "Street address", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.addressPostcode", - "description": "Postal code (ZIP code)", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.addressPostTown", - "description": "Post town or city", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "claimant.nationality", - "description": "Nationality, stored as an enum\n\n - NATIONALITY_UNSPECIFIED: Default value (should not be used)\n - GB: United Kingdom\n - US: United States\n - FR: France\n - DE: Germany", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "NATIONALITY_UNSPECIFIED", - "GB", - "US", - "FR", - "DE" - ], - "default": "NATIONALITY_UNSPECIFIED" - }, { "name": "dateOfAccident", "description": "Date when the accident occurred (YYYY-MM-DD)", @@ -429,38 +343,11 @@ } }, "definitions": { - "SandboxServiceUpdateClaimBody": { + "SandboxServiceAddClaimantBody": { "type": "object", "properties": { - "claim": { - "type": "object", - "properties": { - "state": { - "$ref": "#/definitions/v1ClaimState", - "title": "The current internal processing state of the claim" - }, - "claimant": { - "$ref": "#/definitions/v1Claimant", - "title": "Claimant details" - }, - "dateOfAccident": { - "type": "string", - "title": "Date when the accident occurred (YYYY-MM-DD)" - }, - "damageAmount": { - "type": "string", - "format": "int64", - "title": "Damage amount (stored in cents to prevent floating point issues)" - }, - "claimReason": { - "type": "string", - "title": "Description of why the claim was filed" - }, - "status": { - "$ref": "#/definitions/pbv1Status", - "title": "The final outcome of the claim" - } - }, + "claimant": { + "$ref": "#/definitions/v1Claimant", "title": "The claim details with updates" } }, @@ -505,6 +392,20 @@ }, "additionalProperties": {} }, + "v1AddClaimantResponse": { + "type": "object", + "properties": { + "exception": { + "$ref": "#/definitions/v1Exception", + "title": "Exception details if an error occurred" + }, + "claim": { + "$ref": "#/definitions/v1Claim", + "title": "The updated claim if successful" + } + }, + "description": "Response for updating a claim." + }, "v1Claim": { "type": "object", "properties": { @@ -731,27 +632,13 @@ "type": "string", "enum": [ "NATIONALITY_UNSPECIFIED", - "GB", - "US", - "FR", - "DE" + "NATIONALITY_GB", + "NATIONALITY_US", + "NATIONALITY_FR", + "NATIONALITY_DE" ], "default": "NATIONALITY_UNSPECIFIED", - "description": "Represents a nationality using an enum for structured validation.\n\n - NATIONALITY_UNSPECIFIED: Default value (should not be used)\n - GB: United Kingdom\n - US: United States\n - FR: France\n - DE: Germany" - }, - "v1UpdateClaimResponse": { - "type": "object", - "properties": { - "exception": { - "$ref": "#/definitions/v1Exception", - "title": "Exception details if an error occurred" - }, - "claim": { - "$ref": "#/definitions/v1Claim", - "title": "The updated claim if successful" - } - }, - "description": "Response for updating a claim." + "description": "Represents a nationality using an enum for structured validation.\n\n - NATIONALITY_UNSPECIFIED: Default value (should not be used)\n - NATIONALITY_GB: United Kingdom\n - NATIONALITY_US: United States\n - NATIONALITY_FR: France\n - NATIONALITY_DE: Germany" } }, "securityDefinitions": { diff --git a/api/srvpb/v1/oracle_grpc.pb.go b/api/srvpb/v1/oracle_grpc.pb.go index ac2e620..5db0ad0 100644 --- a/api/srvpb/v1/oracle_grpc.pb.go +++ b/api/srvpb/v1/oracle_grpc.pb.go @@ -27,7 +27,7 @@ const _ = grpc.SupportPackageIsVersion9 const ( SandboxService_GetHealthCheck_FullMethodName = "/srvpb.v1.SandboxService/GetHealthCheck" SandboxService_CreateClaim_FullMethodName = "/srvpb.v1.SandboxService/CreateClaim" - SandboxService_UpdateClaim_FullMethodName = "/srvpb.v1.SandboxService/UpdateClaim" + SandboxService_AddClaimant_FullMethodName = "/srvpb.v1.SandboxService/AddClaimant" SandboxService_GetClaim_FullMethodName = "/srvpb.v1.SandboxService/GetClaim" ) @@ -41,8 +41,8 @@ type SandboxServiceClient interface { GetHealthCheck(ctx context.Context, in *v1.GetHealthCheckRequest, opts ...grpc.CallOption) (*v1.GetHealthCheckResponse, error) // Create claim initiates the creation of the claim. CreateClaim(ctx context.Context, in *v11.CreateClaimRequest, opts ...grpc.CallOption) (*v11.CreateClaimResponse, error) - // Update claim sets claim details. - UpdateClaim(ctx context.Context, in *v11.UpdateClaimRequest, opts ...grpc.CallOption) (*v11.UpdateClaimResponse, error) + // Add claimant updates claim details. + AddClaimant(ctx context.Context, in *v11.AddClaimantRequest, opts ...grpc.CallOption) (*v11.AddClaimantResponse, error) // Retrieve claim details. GetClaim(ctx context.Context, in *v11.GetClaimRequest, opts ...grpc.CallOption) (*v11.GetClaimResponse, error) } @@ -75,10 +75,10 @@ func (c *sandboxServiceClient) CreateClaim(ctx context.Context, in *v11.CreateCl return out, nil } -func (c *sandboxServiceClient) UpdateClaim(ctx context.Context, in *v11.UpdateClaimRequest, opts ...grpc.CallOption) (*v11.UpdateClaimResponse, error) { +func (c *sandboxServiceClient) AddClaimant(ctx context.Context, in *v11.AddClaimantRequest, opts ...grpc.CallOption) (*v11.AddClaimantResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(v11.UpdateClaimResponse) - err := c.cc.Invoke(ctx, SandboxService_UpdateClaim_FullMethodName, in, out, cOpts...) + out := new(v11.AddClaimantResponse) + err := c.cc.Invoke(ctx, SandboxService_AddClaimant_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -105,8 +105,8 @@ type SandboxServiceServer interface { GetHealthCheck(context.Context, *v1.GetHealthCheckRequest) (*v1.GetHealthCheckResponse, error) // Create claim initiates the creation of the claim. CreateClaim(context.Context, *v11.CreateClaimRequest) (*v11.CreateClaimResponse, error) - // Update claim sets claim details. - UpdateClaim(context.Context, *v11.UpdateClaimRequest) (*v11.UpdateClaimResponse, error) + // Add claimant updates claim details. + AddClaimant(context.Context, *v11.AddClaimantRequest) (*v11.AddClaimantResponse, error) // Retrieve claim details. GetClaim(context.Context, *v11.GetClaimRequest) (*v11.GetClaimResponse, error) mustEmbedUnimplementedSandboxServiceServer() @@ -125,8 +125,8 @@ func (UnimplementedSandboxServiceServer) GetHealthCheck(context.Context, *v1.Get func (UnimplementedSandboxServiceServer) CreateClaim(context.Context, *v11.CreateClaimRequest) (*v11.CreateClaimResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateClaim not implemented") } -func (UnimplementedSandboxServiceServer) UpdateClaim(context.Context, *v11.UpdateClaimRequest) (*v11.UpdateClaimResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateClaim not implemented") +func (UnimplementedSandboxServiceServer) AddClaimant(context.Context, *v11.AddClaimantRequest) (*v11.AddClaimantResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddClaimant not implemented") } func (UnimplementedSandboxServiceServer) GetClaim(context.Context, *v11.GetClaimRequest) (*v11.GetClaimResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetClaim not implemented") @@ -188,20 +188,20 @@ func _SandboxService_CreateClaim_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } -func _SandboxService_UpdateClaim_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(v11.UpdateClaimRequest) +func _SandboxService_AddClaimant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(v11.AddClaimantRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(SandboxServiceServer).UpdateClaim(ctx, in) + return srv.(SandboxServiceServer).AddClaimant(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: SandboxService_UpdateClaim_FullMethodName, + FullMethod: SandboxService_AddClaimant_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SandboxServiceServer).UpdateClaim(ctx, req.(*v11.UpdateClaimRequest)) + return srv.(SandboxServiceServer).AddClaimant(ctx, req.(*v11.AddClaimantRequest)) } return interceptor(ctx, in, info, handler) } @@ -240,8 +240,8 @@ var SandboxService_ServiceDesc = grpc.ServiceDesc{ Handler: _SandboxService_CreateClaim_Handler, }, { - MethodName: "UpdateClaim", - Handler: _SandboxService_UpdateClaim_Handler, + MethodName: "AddClaimant", + Handler: _SandboxService_AddClaimant_Handler, }, { MethodName: "GetClaim", diff --git a/phylum/claim.lisp b/phylum/claim.lisp index 2ef4967..4035410 100644 --- a/phylum/claim.lisp +++ b/phylum/claim.lisp @@ -105,8 +105,7 @@ [data () claim] [handle (resp) - (let* ([state (get-state)] - [resp-body (get resp "response")] + (let* ([resp-body (get resp "response")] [resp-err (get resp "error")] [state (get-state)]) (when resp-err @@ -115,8 +114,7 @@ (cc:infof (assoc resp-body "state" state) "handle") (cond ((equal? state "CLAIM_STATE_LOECLAIM_DETAILS_COLLECTED") - (let* ([claimant (get resp "claimant")]) - (add-event (mk-equifax-req claimant)))) + (add-event (mk-equifax-req resp))) ((equal? state "CLAIM_STATE_LOECLAIM_ID_VERIFIED") (add-event (mk-camunda-start-req "a1" (sorted-map "x" "fnord")))) diff --git a/phylum/claim_test.lisp b/phylum/claim_test.lisp index 713649a..e58d98b 100644 --- a/phylum/claim_test.lisp +++ b/phylum/claim_test.lisp @@ -19,12 +19,9 @@ "address_post_town" "Ely" "nationality" "GB")) -(defun populate-test-claim! (claim) +(defun populate-test-claimant! (claim) (let* ([claimant (mk-test-claimant)]) - (assoc! claim "claimant" claimant) - (assoc! claim "date_of_accident" "2023-09-28") - (assoc! claim "damage_amount" 4750) - (assoc! claim "claim_reason" "Vehicle collision damage to rear bumper and trunk"))) + (assoc! claim "claimant" claimant))) (test "claims" (let* ([claim (create-claim)] @@ -85,8 +82,8 @@ (cc:debugf (sorted-map "claim" claim) "start-new-event-loop") (assert (not (nil? claim))) (assert (not (nil? (get claim "claim_id")))) - (populate-test-claim! claim) - (trigger-claim (get claim "claim_id") claim))) + (populate-test-claimant! claim) + (trigger-claim (get claim "claim_id") (get claim "claimant")))) (defun assert-no-more-events () (let* ([event-reqs (get-connector-event-reqs)]) diff --git a/phylum/routes.lisp b/phylum/routes.lisp index 4cb2dda..d61833e 100644 --- a/phylum/routes.lisp +++ b/phylum/routes.lisp @@ -66,11 +66,11 @@ (defendpoint "create_claim" (req) (route-success (sorted-map "claim" (create-claim)))) -(defendpoint "update_claim" (req) - (let* ([claim-body (get req "claim")] - [claim-id (or (get claim-body "claim_id") - (set-exception-business "missing claim_id"))]) - (route-success (sorted-map "claim" (trigger-claim claim-id req))))) +(defendpoint "add_claimant" (req) + (let* ([claim-id (or (get req "claim_id") + (set-exception-business "missing claim_id"))] + [claimant (get req "claimant")]) + (route-success (sorted-map "claim" (trigger-claim claim-id claimant))))) (defendpoint-get "get_claim" (req) (let* ([claim-id (or (get req "claim_id") diff --git a/portal/oracle/endpoints.go b/portal/oracle/endpoints.go index 5d42d44..017a7b0 100644 --- a/portal/oracle/endpoints.go +++ b/portal/oracle/endpoints.go @@ -28,9 +28,9 @@ func (p *portal) CreateClaim(ctx context.Context, req *pb.CreateClaimRequest) (* return oracle.Call(p.orc, ctx, "create_claim", req, &pb.CreateClaimResponse{}, p.defaultConfigs(ctx)...) } -// UpdateClaim is an example resource update endpoint. -func (p *portal) UpdateClaim(ctx context.Context, req *pb.UpdateClaimRequest) (*pb.UpdateClaimResponse, error) { - return oracle.Call(p.orc, ctx, "update_claim", req, &pb.UpdateClaimResponse{}, p.defaultConfigs(ctx)...) +// AddClaimant is an example resource update endpoint. +func (p *portal) AddClaimant(ctx context.Context, req *pb.AddClaimantRequest) (*pb.AddClaimantResponse, error) { + return oracle.Call(p.orc, ctx, "add_claimant", req, &pb.AddClaimantResponse{}, p.defaultConfigs(ctx)...) } // GetClaim is an example query endpoint. diff --git a/tests/e2e.postman_collection.json b/tests/e2e.postman_collection.json index ab3ac3b..fe1791b 100644 --- a/tests/e2e.postman_collection.json +++ b/tests/e2e.postman_collection.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "d864fba3-eede-4113-95eb-8b8c73a53322", + "_postman_id": "b4caaf02-0ec5-48de-9a48-d69e6aec5b2d", "name": "MartinTestSuite-AUTOGENERATED", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -8,7 +8,7 @@ { "event": [ { - "id": "bf22f8af-2175-4dd4-843e-90490325c5b8", + "id": "b830c2f0-55db-4a4f-a29b-aa14c0002a26", "listen": "test", "script": { "exec": [ @@ -22,7 +22,7 @@ "})();", "" ], - "id": "5df0d659-85a4-46e9-97fa-d41eb0d32d61", + "id": "67dbd167-457e-4bdf-9ec0-1574a2523e05", "type": "text/javascript" } } @@ -31,7 +31,7 @@ { "event": [ { - "id": "9409241e-902e-4219-965f-12ab4834c4bf", + "id": "b27111df-7def-460b-a1e1-7bf0a41e4354", "listen": "test", "script": { "exec": [ @@ -51,22 +51,22 @@ "})();", "" ], - "id": "27acdf46-88e0-469d-9a89-d916f2db2209", + "id": "3228ed4d-da80-49ae-a045-40cc28cb5fc1", "type": "text/javascript" } } ], - "id": "ec0eb867-578e-408a-83fd-60cf58de6568", + "id": "569c6f19-74a1-40c8-8407-e7e541f90b5a", "name": "Create claim", "request": { "body": { "formdata": null, "mode": "raw", - "raw": "{}\n" + "raw": "{\n \"date_of_accident\": \"2024-01-15\",\n \"damage_amount\": 500000,\n \"claim_reason\": \"Car accident due to adverse weather conditions.\"\n}\n" }, "header": [ { - "id": "30d1be78-bbd2-4e6f-b8a5-385cea79d8d5", + "id": "48d04457-5876-48ea-bd21-9deaa475fe96", "key": "Content-Type", "type": "text", "value": "application/json" @@ -89,7 +89,7 @@ { "event": [ { - "id": "bd4f2da2-f5ca-4968-b663-5e49bbb911e0", + "id": "e5d3855e-de15-4579-a3a4-1b95557d54a7", "listen": "test", "script": { "exec": [ @@ -108,17 +108,17 @@ "})();", "" ], - "id": "d4812aba-907a-4713-921e-a17c08a7b7c6", + "id": "cb7d9224-761a-4345-bc7e-a07101be0744", "type": "text/javascript" } } ], - "id": "ae519391-bcaf-470f-aa9f-ceac89f6045a", + "id": "f937a882-f7c1-430a-ab12-22061fbde66c", "name": "Get claim", "request": { "header": [ { - "id": "162bdd84-085d-45b3-bcea-aed4c90bbcc2", + "id": "e9d21ad7-35e0-460d-95ff-3f34df5aceaf", "key": "Content-Type", "type": "text", "value": "application/json" @@ -142,7 +142,7 @@ { "event": [ { - "id": "9bd90a0b-3b51-4427-848a-c4f3f2cad59d", + "id": "80ff145c-2406-4282-838c-9f020765a7ed", "listen": "test", "script": { "exec": [ @@ -161,28 +161,28 @@ "})();", "" ], - "id": "b6030d82-11d9-4d0e-8f9c-52d78468352e", + "id": "0847e7ab-cbe7-48d0-ab05-66145d3e1890", "type": "text/javascript" } } ], - "id": "a2b5dd35-0513-4908-b069-3f3ad1571483", - "name": "Update claim", + "id": "c2b21b2a-9584-47bd-8689-bfb04a9d44b0", + "name": "Add claimant", "request": { "body": { "formdata": null, "mode": "raw", - "raw": "{\n \"claim\": {\n \"claim_id\": \"{{CLAIM_ID}}\"\n }\n}\n" + "raw": "{\n \"claim\": {\n \"claim_id\": \"{{CLAIM_ID}}\",\n \"claimant\": {\n \"account_number\": \"12345678\",\n \"account_sort_code\": \"12-34-56\",\n \"dob\": \"1985-06-15\",\n \"surname\": \"Doe\",\n \"forename\": \"John\",\n \"full_address\": \"123 Main Street, London, SW1A 1AA, UK\",\n \"address_number\": \"123\",\n \"address_street1\": \"Main Street\",\n \"address_postcode\": \"SW1A 1AA\",\n \"address_post_town\": \"London\",\n \"nationality\": \"NATIONALITY_GB\"\n }\n }\n}\n" }, "header": [ { - "id": "55aeace3-fd0f-4d99-8ff1-ad43ae2cb68a", + "id": "c47d5a35-9e92-4674-b420-f88ef2ba34b5", "key": "Content-Type", "type": "text", "value": "application/json" } ], - "method": "PATCH", + "method": "POST", "url": { "host": [ "{{SERVER}}" @@ -190,10 +190,11 @@ "path": [ "v1", "claim", - "{{CLAIM_ID}}" + "{{CLAIM_ID}}", + "claimant" ], "protocol": "{{SCHEME}}", - "raw": "{{SCHEME}}://{{SERVER}}/v1/claim/{{CLAIM_ID}}" + "raw": "{{SCHEME}}://{{SERVER}}/v1/claim/{{CLAIM_ID}}/claimant" } } } diff --git a/tests/example/claim.martin_collection.yaml b/tests/example/claim.martin_collection.yaml index e6b72e4..ff890ae 100644 --- a/tests/example/claim.martin_collection.yaml +++ b/tests/example/claim.martin_collection.yaml @@ -7,7 +7,11 @@ tests: method: POST path: "v1/claims" body: | - {} + { + "date_of_accident": "2024-01-15", + "damage_amount": 500000, + "claim_reason": "Car accident due to adverse weather conditions." + } test_script: | pm.test("ok", () => { let data = pm.response.json(); @@ -30,13 +34,24 @@ tests: pm.expect(data).to.have.property("claim"); pm.expect(data.claim).to.have.property("state"); }); - - name: "Update claim" - method: PATCH - path: "v1/claim/{{CLAIM_ID}}" + - name: "Add claimant" + method: POST + path: "v1/claim/{{CLAIM_ID}}/claimant" body: | { - "claim": { - "claim_id": "{{CLAIM_ID}}" + "claim_id": "{{CLAIM_ID}}", + "claimant": { + "account_number": "12345678", + "account_sort_code": "12-34-56", + "dob": "1985-06-15", + "surname": "Doe", + "forename": "John", + "full_address": "123 Main Street, London, SW1A 1AA, UK", + "address_number": "123", + "address_street1": "Main Street", + "address_postcode": "SW1A 1AA", + "address_post_town": "London", + "nationality": "NATIONALITY_GB" } } test_script: | From 30b2b9c2a78c114faed052024cef88595de1411e Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Thu, 20 Mar 2025 08:34:52 -0700 Subject: [PATCH 18/23] Bump svc --- go.mod | 16 +++++++++------- go.sum | 32 ++++++++++++++++++-------------- scripts/build.sh | 16 ++++++++-------- 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index f05a9e6..f08dd69 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( buf.build/gen/go/luthersystems/protos/protocolbuffers/go v1.36.5-20250224214741-b97f9dda9589.1 github.com/alecthomas/kong v0.9.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 - github.com/luthersystems/shiroclient-sdk-go v0.11.0 - github.com/luthersystems/svc v0.14.4-SNAPSHOT.1 + github.com/luthersystems/shiroclient-sdk-go v0.13.0 + github.com/luthersystems/svc v0.14.4 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a @@ -23,6 +23,7 @@ require ( github.com/fatih/color v1.17.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect @@ -30,8 +31,10 @@ require ( github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect + github.com/luthersystems/lutherauth-sdk-go v0.0.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oklog/run v1.1.0 // indirect @@ -48,10 +51,9 @@ require ( go.opentelemetry.io/otel/sdk v1.28.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect - golang.org/x/crypto v0.35.0 // indirect - golang.org/x/net v0.35.0 // indirect - golang.org/x/sys v0.30.0 // indirect - golang.org/x/text v0.22.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index c806f96..0da1256 100644 --- a/go.sum +++ b/go.sum @@ -39,6 +39,8 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -77,10 +79,12 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/luthersystems/shiroclient-sdk-go v0.11.0 h1:cpK/6ig1dEdCGFH0NqRb4n/tjYDj+mkTvfiJVPjv5jc= -github.com/luthersystems/shiroclient-sdk-go v0.11.0/go.mod h1:RjziHTEjVvVHfhbHZBllYF63NErZmcIYnsWoJEJFv/4= -github.com/luthersystems/svc v0.14.4-SNAPSHOT.1 h1:DkhG8tf0TiCQNgGn9PwQHFBqy/65jFW4M7MCFhl6BNw= -github.com/luthersystems/svc v0.14.4-SNAPSHOT.1/go.mod h1:nhjYfR3I1S16J6Qqqt+F+e+lDOnRUErX0oazljl3sCU= +github.com/luthersystems/lutherauth-sdk-go v0.0.7 h1:gzBdfjI8yCTTVyXbaxaq+HbwOj3gPnzraHaPeefPSYM= +github.com/luthersystems/lutherauth-sdk-go v0.0.7/go.mod h1:KDLckGEVLldjjbdFkNeBMfiKktwd7QVPlP1+Rny3knc= +github.com/luthersystems/shiroclient-sdk-go v0.13.0 h1:hq3/1NzrUesGaaR5kbuDd06o478CxAznodPY5fjYd2A= +github.com/luthersystems/shiroclient-sdk-go v0.13.0/go.mod h1:poHaVAZq9HamI6riDVGyw1ldSNkHgUsTOGh+hvIdPD0= +github.com/luthersystems/svc v0.14.4 h1:SNf10Yp/nMJIBgDDot7Wv3vaMuu3Q0rn7rE7aEPfEgU= +github.com/luthersystems/svc v0.14.4/go.mod h1:hdtanh+3k7MlDiXOHWbhNmsA0cxjxoHb8M2sy2UaZLc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= @@ -90,6 +94,8 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103 h1:Z/i1e+gTZrmcGeZyWckaLfucYG6KYOXLWo4co8pZYNY= +github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103/go.mod h1:o9YPB5aGP8ob35Vy6+vyq3P3bWe7NQWzf+JLiXCiMaE= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= @@ -150,8 +156,6 @@ go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= -golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -167,8 +171,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -189,12 +193,12 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -215,8 +219,8 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a h1:YIa/rzVqMEokBkPtydCkx1VLmv3An1Uw7w1P1m6EhOY= google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a h1:hqK4+jJZXCU4pW7jsAdGOVFIfLHQeV7LaizZKnZ84HI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988 h1:V71AcdLZr2p8dC9dbOIMCpqi4EmRl8wUwnJzXXLmbmc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/scripts/build.sh b/scripts/build.sh index 82cef13..e1ef10c 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -2,13 +2,13 @@ set -euxo pipefail -SVC_PKG="$(go list ./${SERVICE_DIR})" \ +SVC_PKG="$(go list -buildvcs=false ./${SERVICE_DIR})" \ GO_LD_FLAGS="-X ${SVC_PKG}/version.Version=${VERSION} -extldflags '-static'" -CGO_ENABLED=1 GOOS=linux CGO_LDFLAGS_ALLOW="-Wl,--no-as-needed" \ - go build -a \ - -installsuffix "${GO_BUILD_TAGS}" \ - -tags "${GO_BUILD_TAGS}" \ - -ldflags "${GO_LD_FLAGS}" \ - -o app \ - "./${SERVICE_DIR}" +CGO_ENABLED=0 GOOS=linux \ + go build -a \ + -installsuffix "${GO_BUILD_TAGS}" \ + -tags "${GO_BUILD_TAGS}" \ + -ldflags "${GO_LD_FLAGS}" \ + -o app \ + "./${SERVICE_DIR}" From 8d7bf04802e536305b6000de57540c87679ca551 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Fri, 28 Mar 2025 07:32:12 -0700 Subject: [PATCH 19/23] Bump svc --- go.mod | 2 +- go.sum | 4 ++-- portal/oracle/oracle_test.go | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index f08dd69..aee6855 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/alecthomas/kong v0.9.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 github.com/luthersystems/shiroclient-sdk-go v0.13.0 - github.com/luthersystems/svc v0.14.4 + github.com/luthersystems/svc v0.14.7 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a diff --git a/go.sum b/go.sum index 0da1256..b7434fc 100644 --- a/go.sum +++ b/go.sum @@ -83,8 +83,8 @@ github.com/luthersystems/lutherauth-sdk-go v0.0.7 h1:gzBdfjI8yCTTVyXbaxaq+HbwOj3 github.com/luthersystems/lutherauth-sdk-go v0.0.7/go.mod h1:KDLckGEVLldjjbdFkNeBMfiKktwd7QVPlP1+Rny3knc= github.com/luthersystems/shiroclient-sdk-go v0.13.0 h1:hq3/1NzrUesGaaR5kbuDd06o478CxAznodPY5fjYd2A= github.com/luthersystems/shiroclient-sdk-go v0.13.0/go.mod h1:poHaVAZq9HamI6riDVGyw1ldSNkHgUsTOGh+hvIdPD0= -github.com/luthersystems/svc v0.14.4 h1:SNf10Yp/nMJIBgDDot7Wv3vaMuu3Q0rn7rE7aEPfEgU= -github.com/luthersystems/svc v0.14.4/go.mod h1:hdtanh+3k7MlDiXOHWbhNmsA0cxjxoHb8M2sy2UaZLc= +github.com/luthersystems/svc v0.14.7 h1:ZanKYwHWBzuoECEvCHaO2HRXDAQQq/35XtEBZyzbjCs= +github.com/luthersystems/svc v0.14.7/go.mod h1:hdtanh+3k7MlDiXOHWbhNmsA0cxjxoHb8M2sy2UaZLc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= diff --git a/portal/oracle/oracle_test.go b/portal/oracle/oracle_test.go index 631aa93..44e3bf4 100644 --- a/portal/oracle/oracle_test.go +++ b/portal/oracle/oracle_test.go @@ -40,7 +40,7 @@ func TestSnapshot(t *testing.T) { // Start a new oracle, restoring state from the snapshot (twice) for i := 0; i < 2; i++ { server, stop = makeTestServerFrom(t, snap) - defer stop() + t.Cleanup(stop) req := &healthcheck.GetHealthCheckRequest{} ctx := context.Background() resp, err := server.GetHealthCheck(ctx, req) @@ -67,7 +67,7 @@ func getClaim(t *testing.T, server *portal, id string, dst **pb.Claim) bool { func TestHealthCheck(t *testing.T) { server, stop := makeTestServer(t) - defer stop() + t.Cleanup(stop) ctx := context.Background() resp, err := server.GetHealthCheck(ctx, &healthcheck.GetHealthCheckRequest{}) require.NoError(t, err) @@ -76,7 +76,7 @@ func TestHealthCheck(t *testing.T) { func TestGetAccount(t *testing.T) { server, stop := makeTestServer(t) - defer stop() + t.Cleanup(stop) var id string if !createClaim(t, server, &id) { return From 6e2d34ae89402b4c9dca19aa338d8b411d3a2be6 Mon Sep 17 00:00:00 2001 From: sam-at-luther Date: Wed, 23 Apr 2025 19:27:17 -0700 Subject: [PATCH 20/23] Test elps filter --- Makefile | 14 + README.md | 22 +- common.config.mk | 2 +- compose/grafana.yaml | 18 + compose/grafana/.gitignore | 1 + .../1759fd27b2c9f73dea05.wasm | Bin 0 -> 190779 bytes .../plugins/grafana-lokiexplore-app/386.js | 52 + .../grafana-lokiexplore-app/386.js.map | 1 + .../3d96a93cfcb32df74eef.svg | 1 + .../plugins/grafana-lokiexplore-app/470.js | 3 + .../470.js.LICENSE.txt | 10 + .../grafana-lokiexplore-app/470.js.map | 1 + .../plugins/grafana-lokiexplore-app/546.js | 2 + .../grafana-lokiexplore-app/546.js.map | 1 + .../649058283f564041551d.wasm | Bin 0 -> 201435 bytes .../plugins/grafana-lokiexplore-app/677.js | 3 + .../677.js.LICENSE.txt | 4 + .../grafana-lokiexplore-app/677.js.map | 1 + .../plugins/grafana-lokiexplore-app/82.js | 2 + .../plugins/grafana-lokiexplore-app/82.js.map | 1 + .../plugins/grafana-lokiexplore-app/826.js | 8 + .../grafana-lokiexplore-app/826.js.map | 1 + .../plugins/grafana-lokiexplore-app/854.js | 2 + .../grafana-lokiexplore-app/854.js.map | 1 + .../plugins/grafana-lokiexplore-app/919.js | 2 + .../grafana-lokiexplore-app/919.js.map | 1 + .../plugins/grafana-lokiexplore-app/944.js | 2 + .../grafana-lokiexplore-app/944.js.map | 1 + .../grafana-lokiexplore-app/CHANGELOG.md | 347 +++++++ .../plugins/grafana-lokiexplore-app/LICENSE | 661 ++++++++++++ .../grafana-lokiexplore-app/MANIFEST.txt | 66 ++ .../plugins/grafana-lokiexplore-app/README.md | 37 + .../img/drilldown-features.png | Bin 0 -> 208476 bytes .../img/explore-logs-features.jpeg | Bin 0 -> 996518 bytes .../grafana-lokiexplore-app/img/fields.png | Bin 0 -> 2825845 bytes .../grafana-lokiexplore-app/img/grot_err.svg | 78 ++ .../img/grot_err_light.svg | 78 ++ .../grafana-lokiexplore-app/img/grot_loki.svg | 272 +++++ .../grafana-lokiexplore-app/img/logo.svg | 1 + .../grafana-lokiexplore-app/img/patterns.png | Bin 0 -> 597876 bytes .../img/service_logs.jpg | Bin 0 -> 311278 bytes .../grafana-lokiexplore-app/img/table.png | Bin 0 -> 2719883 bytes .../plugins/grafana-lokiexplore-app/module.js | 3 + .../grafana-lokiexplore-app/module.js.map | 1 + .../grafana-lokiexplore-app/plugin.json | 106 ++ .../944c737f589d02ecf603.svg | 67 ++ .../grafana-pyroscope-app/CHANGELOG.md | 453 +++++++++ .../plugins/grafana-pyroscope-app/LICENSE | 661 ++++++++++++ .../grafana-pyroscope-app/MANIFEST.txt | 51 + .../plugins/grafana-pyroscope-app/README.md | 58 ++ .../e6c722427cfa8715e19d.svg | 15 + .../e79edcfbe2068fae2364.svg | 68 ++ .../img/58f0b0e1cfa063e4b662.png | Bin 0 -> 307262 bytes .../img/61b4cf746a6f58780f27.png | Bin 0 -> 3599 bytes .../img/8cdf4d2e2df8326311ab.gif | Bin 0 -> 174077 bytes .../img/9c9cdd5175734d579007.png | Bin 0 -> 4262 bytes .../img/bafee50693eb02088442.png | Bin 0 -> 3256 bytes .../img/decrease-latency.png | Bin 0 -> 3599 bytes .../img/diff-view-how-to.gif | Bin 0 -> 174077 bytes .../grafana-pyroscope-app/img/hero-image.png | Bin 0 -> 307262 bytes .../grafana-pyroscope-app/img/logo.svg | 15 + .../img/reduce-costs.png | Bin 0 -> 4262 bytes .../img/resolve-incidents.png | Bin 0 -> 3256 bytes .../plugins/grafana-pyroscope-app/module.js | 940 ++++++++++++++++++ .../module.js.LICENSE.txt | 30 + .../grafana-pyroscope-app/module.js.map | 1 + .../SceneEmptyState/ui/img/grot-404-dark.svg | 67 ++ .../SceneEmptyState/ui/img/grot-404-light.svg | 68 ++ .../plugins/grafana-pyroscope-app/plugin.json | 78 ++ .../profile-metrics/profile-metrics.json | 142 +++ .../provisioning/datasources/tempo.yaml | 9 + compose/tempo-config.yaml | 28 + compose/tempo.yaml | 16 + go.mod | 4 +- go.sum | 8 +- portal/oracle/endpoints.go | 10 + tests/e2e.postman_collection.json | 32 +- 77 files changed, 4601 insertions(+), 27 deletions(-) create mode 100644 compose/grafana.yaml create mode 100644 compose/grafana/.gitignore create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/1759fd27b2c9f73dea05.wasm create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/386.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/386.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/3d96a93cfcb32df74eef.svg create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/470.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/470.js.LICENSE.txt create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/470.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/546.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/546.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/649058283f564041551d.wasm create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/677.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/677.js.LICENSE.txt create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/677.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/82.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/82.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/826.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/826.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/854.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/854.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/919.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/919.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/944.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/944.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/CHANGELOG.md create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/LICENSE create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/MANIFEST.txt create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/README.md create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/drilldown-features.png create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/explore-logs-features.jpeg create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/fields.png create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/grot_err.svg create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/grot_err_light.svg create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/grot_loki.svg create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/logo.svg create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/patterns.png create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/service_logs.jpg create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/img/table.png create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/module.js create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/module.js.map create mode 100644 compose/grafana/plugins/grafana-lokiexplore-app/plugin.json create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/944c737f589d02ecf603.svg create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/CHANGELOG.md create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/LICENSE create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/MANIFEST.txt create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/README.md create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/e6c722427cfa8715e19d.svg create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/e79edcfbe2068fae2364.svg create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/58f0b0e1cfa063e4b662.png create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/61b4cf746a6f58780f27.png create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/8cdf4d2e2df8326311ab.gif create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/9c9cdd5175734d579007.png create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/bafee50693eb02088442.png create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/decrease-latency.png create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/diff-view-how-to.gif create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/hero-image.png create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/logo.svg create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/reduce-costs.png create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/img/resolve-incidents.png create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/module.js create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/module.js.LICENSE.txt create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/module.js.map create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/pages/ProfilesExplorerView/components/SceneByVariableRepeaterGrid/components/SceneEmptyState/ui/img/grot-404-dark.svg create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/pages/ProfilesExplorerView/components/SceneByVariableRepeaterGrid/components/SceneEmptyState/ui/img/grot-404-light.svg create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/plugin.json create mode 100644 compose/grafana/plugins/grafana-pyroscope-app/shared/infrastructure/profile-metrics/profile-metrics.json create mode 100644 compose/grafana/provisioning/datasources/tempo.yaml create mode 100644 compose/tempo-config.yaml create mode 100644 compose/tempo.yaml diff --git a/Makefile b/Makefile index 744b07b..75f14c8 100644 --- a/Makefile +++ b/Makefile @@ -198,3 +198,17 @@ explorer-clean: .PHONY: explorer-watch explorer-watch: cd ${PROJECT_REL_DIR}/explorer && make watch + +.PHONY: observability-up observability-down + + +.PHONY: observability-network observability-up observability-down + +observability-network: + docker network inspect byfn >/dev/null 2>&1 || docker network create byfn + +observability-up: observability-network + docker compose -f compose/tempo.yaml -f compose/grafana.yaml up -d --build + +observability-down: + docker compose -f compose/tempo.yaml -f compose/grafana.yaml down --volumes --remove-orphans diff --git a/README.md b/README.md index 569a4a4..79e9b9f 100644 --- a/README.md +++ b/README.md @@ -160,16 +160,30 @@ environment variable to point at an OTLP endpoint (e.g. a Grafana agent). When configured, trace spans will be created at key layers of the stack and delivered to the configured endpoint. +You can test tracing locally by setting the following env variables: + ```bash -SANDBOX_ORACLE_OTLP_ENDPOINT=http://otlp-hostname:4317 -SHIROCLIENT_GATEWAY_OTLP_TRACER_ENDPOINT=http://otlp-hostname:4317 -CHAINCODE_OTLP_TRACER_ENDPOINT=http://otlp-hostname:4317 +export SANDBOX_ORACLE_OTLP_ENDPOINT=http://tempo:4317 +export SHIROCLIENT_GATEWAY_OTLP_TRACER_ENDPOINT=http://tempo:4317 +export CHAINCODE_OTLP_TRACER_ENDPOINT=http://tempo:4317 +``` + +And bringing up observability: + ``` +make observability-up +``` + +Login to the local [grafana](http://localhost:3000/) with username: admin, +password: admin. + +Click "Explore" and select "Tempo" as the data source. Query `{}` to list +all traces. #### ELPS trace spans Phylum endpoints defined with `defendpoint` will automatically receive a span -named after the endpoint. Other functions in the phylum can be traced by adding +named after the endpoint. Other functions in the phylum can be traced by adding a special ELPS doc keyword: ```lisp diff --git a/common.config.mk b/common.config.mk index fbc38c6..44c9ee1 100644 --- a/common.config.mk +++ b/common.config.mk @@ -19,7 +19,7 @@ BUILDENV_TAG=v0.0.90 # and should be kept up-to-date to leverage the latest platform features. # See release notes: https://docs.luthersystems.com/luther/platform/release-notes #SUBSTRATE_VERSION=v2.205.6 -SUBSTRATE_VERSION=v3.0.1-SNAPSHOT.16-3df834e3 +SUBSTRATE_VERSION=v2.205.9 SHIROCLIENT_VERSION=${SUBSTRATE_VERSION} CONNECTORHUB_VERSION=${SUBSTRATE_VERSION} SHIROTESTER_VERSION=${SUBSTRATE_VERSION} diff --git a/compose/grafana.yaml b/compose/grafana.yaml new file mode 100644 index 0000000..4886dd4 --- /dev/null +++ b/compose/grafana.yaml @@ -0,0 +1,18 @@ +services: + grafana: + image: grafana/grafana:latest + ports: + - "3000:3000" + networks: + - byfn + volumes: + - ./grafana:/var/lib/grafana + - ./grafana/provisioning:/etc/grafana/provisioning + environment: + - GF_SECURITY_ADMIN_PASSWORD=admin + depends_on: + - tempo + +networks: + byfn: + external: true diff --git a/compose/grafana/.gitignore b/compose/grafana/.gitignore new file mode 100644 index 0000000..ee4bf47 --- /dev/null +++ b/compose/grafana/.gitignore @@ -0,0 +1 @@ +grafana.db diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/1759fd27b2c9f73dea05.wasm b/compose/grafana/plugins/grafana-lokiexplore-app/1759fd27b2c9f73dea05.wasm new file mode 100644 index 0000000000000000000000000000000000000000..bf1fcc0ec0f5d5b3b2a95c2118f841198a56a8b2 GIT binary patch literal 190779 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 N8oWt}2XSHZ`afq8Iye9T literal 0 HcmV?d00001 diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/386.js b/compose/grafana/plugins/grafana-lokiexplore-app/386.js new file mode 100644 index 0000000..bfe2f10 --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/386.js @@ -0,0 +1,52 @@ +"use strict";(self.webpackChunkgrafana_lokiexplore_app=self.webpackChunkgrafana_lokiexplore_app||[]).push([[386],{7709:(e,t,n)=>{n.d(t,{F:()=>o});var r=n(6089),a=n(2007),i=n(5959),s=n.n(i),l=n(3571);const o=e=>{const{isExcluded:t,isIncluded:n,onInclude:r,onExclude:i,onClear:o,titles:u,buttonFill:d,hideExclude:p}=e,g=(0,a.useStyles2)(c,n,t,p);return s().createElement("div",{className:g.container},s().createElement(a.Button,{variant:n?"primary":"secondary",fill:d,size:"sm","aria-selected":n,className:g.includeButton,onClick:n?o:r,"data-testid":l.b.exploreServiceDetails.buttonFilterInclude,title:null==u?void 0:u.include},"Include"),!p&&s().createElement(a.Button,{variant:t?"primary":"secondary",fill:d,size:"sm","aria-selected":t,className:g.excludeButton,onClick:t?o:i,title:null==u?void 0:u.exclude,"data-testid":l.b.exploreServiceDetails.buttonFilterExclude},"Exclude"))},c=(e,t,n,a)=>({container:(0,r.css)({display:"flex",justifyContent:"center"}),includeButton:(0,r.css)({borderRadius:0,borderRight:t||a?void 0:"none"}),excludeButton:(0,r.css)({borderRadius:`0 ${e.shape.radius.default} ${e.shape.radius.default} 0`,borderLeft:n?void 0:"none"})})},7191:(e,t,n)=>{n.d(t,{R:()=>l});var r=n(5959),a=n.n(r),i=n(6089),s=n(2007);const l=({children:e})=>{const t=(0,s.useStyles2)(o);return a().createElement("div",{className:t.wrap},a().createElement(s.EmptyState,{variant:"not-found",message:e?"":"An error occurred"},e&&e))},o=e=>({wrap:(0,i.css)({margin:"0 auto"})})},2661:(e,t,n)=>{n.d(t,{P:()=>nt,y:()=>tt});var r=n(5959),a=n.n(r),i=n(7781),s=n(9736),l=n(20),o=n(4351),c=n(7352),u=n(2007),d=n(6089);function p(e){const t=(0,u.useStyles2)(g);return a().createElement(a().Fragment,null,a().createElement(u.Alert,{className:t.alert,severity:"info",title:"Welcome to Grafana Logs Drilldown!",onRemove:e.onRemove},a().createElement("div",null,"Check out our"," ",a().createElement("a",{className:"external-link",target:"_blank",href:"https://grafana.com/docs/grafana-cloud/visualizations/simplified-exploration/logs/",rel:"noreferrer"},"Get started doc"),", or see"," ",a().createElement("a",{className:"external-link",target:"_blank",href:"https://github.com/grafana/explore-logs/releases",rel:"noreferrer"},"recent changes"),".",a().createElement("br",null),"Help us shape the future of the app."," ",a().createElement("a",{className:"external-link",target:"_blank",href:"https://forms.gle/1sYWCTPvD72T1dPH9",rel:"noreferrer"},"Send us feedback")," ","or engage with us on"," ",a().createElement("a",{className:"external-link",target:"_blank",href:"https://github.com/grafana/explore-logs/?tab=readme-ov-file#explore-logs",rel:"noreferrer"},"GitHub"),".")))}function g(e){return{alert:(0,d.css)({flex:"none"})}}var h=n(9598),f=n(5953),v=n(1459);const m=()=>{const e=(0,u.useStyles2)(b);return a().createElement("div",{className:e.wrapper},a().createElement("a",{href:"https://forms.gle/1sYWCTPvD72T1dPH9",className:e.feedback,title:"Share your thoughts about Logs in Grafana.",target:"_blank",rel:"noreferrer noopener"},a().createElement(u.Icon,{name:"comment-alt-message"})," Give feedback"))},b=e=>({wrapper:(0,d.css)({display:"flex",marginLeft:"auto",gap:e.spacing(1),position:"relative",top:e.spacing(-1)}),feedback:(0,d.css)({alignSelf:"center",color:e.colors.text.secondary,fontSize:e.typography.bodySmall.fontSize,"&:hover":{color:e.colors.text.link}})});class y extends s.Bs{}var S,w,O;O=function({model:e}){var t,n;const r=s.jh.getVariables(e).useState();let i=r.variables;return(null===(t=e.state.include)||void 0===t?void 0:t.length)&&(i=r.variables.filter((t=>{var n,r;return null===(n=e.state.include)||void 0===n?void 0:n.includes(null!==(r=t.state.name)&&void 0!==r?r:"")}))),(null===(n=e.state.exclude)||void 0===n?void 0:n.length)&&(i=r.variables.filter((t=>{var n,r;return!(null===(n=e.state.exclude)||void 0===n?void 0:n.includes(null!==(r=t.state.name)&&void 0!==r?r:""))}))),a().createElement(a().Fragment,null,i.map((t=>a().createElement(s.Lp,{key:t.state.key,variable:t,layout:e.state.layout}))))},(w="Component")in(S=y)?Object.defineProperty(S,w,{value:O,enumerable:!0,configurable:!0,writable:!0}):S[w]=O;var x=n(3571);const E=({onRemove:e,pattern:t,size:n="lg"})=>{const i=(0,u.useStyles2)(k),[s,l]=(0,r.useState)(!1);return a().createElement("div",{className:i.pattern,onClick:()=>l(!s),onMouseLeave:()=>l(!1)},a().createElement(u.Tag,{title:t,key:t,name:s?t:P(t,n),className:i.tag}),a().createElement(u.Button,{"aria-label":"Remove pattern","data-testid":x.b.exploreServiceDetails.buttonRemovePattern,variant:"secondary",size:"sm",className:i.removeButton,onClick:e},a().createElement(u.Icon,{name:"times"})))},C={sm:50,lg:Math.round(window.innerWidth/8)};function P(e,t){const n=e.length;if(n({pattern:(0,d.css)({display:"flex",fontFamily:"monospace",gap:e.spacing(.25),cursor:"pointer",overflow:"hidden"}),tag:(0,d.css)({borderTopRightRadius:0,borderBottomRightRadius:0,backgroundColor:e.colors.secondary.main,border:`solid 1px ${e.colors.secondary.border}`,color:e.colors.secondary.text,boxSizing:"border-box",padding:e.spacing(.25,.75),overflow:"hidden",textOverflow:"ellipsis"}),removeButton:(0,d.css)({paddingLeft:2.5,paddingRight:2.5})});var j=n(4509),F=n(7478);const L=({patterns:e,onRemove:t})=>{const n=(0,u.useStyles2)(_);if(!e||0===e.length)return null;const r=e.filter((e=>"include"===e.type)),i=e.filter((e=>"include"!==e.type)),s=n=>{(0,F.bN)(),t(e.filter((e=>e!==n))),(0,j.EE)(j.NO.service_details,j.ir.service_details.pattern_removed,{includePatternsLength:r.length-("include"===(null==n?void 0:n.type)?1:0),excludePatternsLength:i.length-("include"!==(null==n?void 0:n.type)?1:0),type:n.type})};return a().createElement("div",null,r.length>0&&a().createElement("div",{className:n.patternsContainer},a().createElement(u.Text,{variant:"bodySmall",weight:"bold","data-testid":x.b.patterns.buttonIncludedPattern},"Included pattern",e.length>1?"s":""),a().createElement("div",{className:n.patterns},r.map((e=>a().createElement(E,{key:e.pattern,pattern:e.pattern,size:"lg",onRemove:()=>s(e)}))))),i.length>0&&a().createElement("div",{className:n.patternsContainer},a().createElement(u.Text,{variant:"bodySmall",weight:"bold","data-testid":x.b.patterns.buttonExcludedPattern},"Excluded pattern",i.length>1?"s":"",":"),a().createElement("div",{className:n.patterns},i.map((e=>a().createElement(E,{key:e.pattern,pattern:e.pattern,size:i.length>1?"sm":"lg",onRemove:()=>s(e)}))))))};function _(e){return{patternsContainer:(0,d.css)({overflow:"hidden"}),patterns:(0,d.css)({display:"flex",gap:e.spacing(1),alignItems:"center",flexWrap:"wrap"})}}class T extends s.Bs{}!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(T,"Component",(({model:e})=>{const t=s.jh.getAncestor(e,nt),{controls:n,patterns:r}=t.useState(),i=s.jh.getAncestor(e,V),{lineFilterRenderer:l,levelsRenderer:o}=i.useState(),c=(0,u.useStyles2)((t=>function(e){return{firstRowWrapper:(0,d.css)({"& > div > div":{gap:"16px",label:"first-row-wrapper",[e.breakpoints.down("lg")]:{flexDirection:"column"}}}),controlsFirstRowContainer:(0,d.css)({label:"controls-first-row",display:"flex",gap:e.spacing(2),justifyContent:"space-between",alignItems:"flex-start",[e.breakpoints.down("md")]:{flexDirection:"column-reverse"}}),controlsRowContainer:(0,d.css)({"&:empty":{display:"none"},label:"controls-row",display:"flex",gap:e.spacing(2),alignItems:"flex-start",[e.breakpoints.down("lg")]:{flexDirection:"column"}}),stickyControlsContainer:(0,d.css)({position:"sticky",top:D,left:0,background:e.colors.background.canvas,zIndex:e.zIndex.navbarFixed,gap:e.spacing(0),boxShadow:e.shadows.z1}),controlsContainer:(0,d.css)({label:"controlsContainer",display:"flex",flexDirection:"column",gap:e.spacing(1),padding:e.spacing(2)}),filters:(0,d.css)({label:"filters",display:"flex"}),filtersWrap:(0,d.css)({label:"filtersWrap",display:"flex",gap:e.spacing(2),width:"calc(100% - 450)",flexWrap:"wrap",alignItems:"flex-end"}),controlsWrapper:(0,d.css)({label:"controlsWrapper",display:"flex",flexDirection:"column",marginTop:e.spacing(.375)}),timeRangeDatasource:(0,d.css)({label:"timeRangeDatasource",display:"flex",gap:e.spacing(1),flexWrap:"wrap",justifyContent:"flex-end"}),timeRange:(0,d.css)({label:"timeRange",display:"flex",flexDirection:"row",gap:e.spacing(1)})}}(t,e.state.position)));return a().createElement("div",{className:(0,d.cx)(c.controlsContainer,"sticky"===e.state.position?c.stickyControlsContainer:void 0)},a().createElement(a().Fragment,null,n&&a().createElement("div",{className:c.controlsFirstRowContainer},a().createElement("div",{className:c.filtersWrap},a().createElement("div",{className:(0,d.cx)(c.filters,c.firstRowWrapper)},n.map((e=>e instanceof s.G1?a().createElement(e.Component,{key:e.state.key,model:e}):null)))),a().createElement("div",{className:c.controlsWrapper},a().createElement(m,null),a().createElement("div",{className:c.timeRangeDatasource},n.map((e=>e.state.key===R?a().createElement(e.Component,{key:e.state.key,model:e}):null)),a().createElement("div",{className:c.timeRange},n.map((e=>e instanceof y||e instanceof s.G1?null:a().createElement(e.Component,{key:e.state.key,model:e}))))))),a().createElement("div",{className:c.controlsRowContainer},o&&a().createElement(o.Component,{model:o}),n&&a().createElement("div",{className:c.filtersWrap},a().createElement("div",{className:c.filters},n.map((e=>e instanceof y&&e.state.key===M?a().createElement(e.Component,{key:e.state.key,model:e}):null))))),a().createElement("div",{className:c.controlsRowContainer},a().createElement(L,{patterns:r,onRemove:e=>t.setState({patterns:e})})),a().createElement("div",{className:c.controlsRowContainer},l&&a().createElement(l.Component,{model:l}))))}));const D=40;var N=n(2085),$=n(9683);function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const A=`${h.s_}.interceptBannerStorageKey`,M="vars-fields-metadata",R="vars-ds";class V extends s.Bs{onActivate(){const e=(0,$.FT)();this.setState({lineFilterRenderer:new v.Y({}),levelsRenderer:new N.qV({}),variableLayout:new T({position:e===$.G3.explore?"sticky":"relative"})})}dismiss(){this.setState({interceptDismissed:!0}),localStorage.setItem(A,"true")}constructor(e){super(B(function(e){for(var t=1;t{const t=s.jh.getAncestor(e,nt),{contentScene:n}=t.useState(),{interceptDismissed:r,variableLayout:i}=e.useState();if(!n)return f.v.warn("content scene not defined"),null;const l=(0,u.useStyles2)(W);return a().createElement("div",{className:l.bodyContainer},a().createElement("div",{className:l.container},!r&&a().createElement(p,{onRemove:()=>{e.dismiss()}}),i&&a().createElement(i.Component,{model:i}),a().createElement("div",{className:l.body},n&&a().createElement(n.Component,{model:n}))))}));var z=n(173),H=n(8531),Q=n(7985),K=n(2245),G=n(4702),U=n(5553),q=n(9731),J=n(6991),Y=n(6709),X=n(5719),Z=n(3241),ee=n(6854),te=n(6464),ne=n(708);function re(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function ae(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){re(i,r,a,s,l,"next",e)}function l(e){re(i,r,a,s,l,"throw",e)}s(void 0)}))}}const ie=function(){var e=ae((function*(e,t,n,r,a,i){const s=yield(0,H.getDataSourceSrv)().get((0,X.U4)(r));if(!(s instanceof H.DataSourceWithBackend))throw f.v.error(new Error("getTagValuesProvider: Invalid datasource!")),new Error("Invalid datasource!");const o=s.languageProvider;let c=[];if(o&&o.fetchDetectedLabelValues){const r={expr:n,limit:1e3,timeRange:a,throwError:!0},s={showErrorAlert:!1};try{let n=yield o.fetchDetectedLabelValues(e.key,r,s);if(n&&(0,Z.isArray)(n)){var u;if(i===l._Y)return{replace:!0,values:n.map((e=>({text:e})))};const r=t.state.filters;let a=[];r.forEach((e=>{var t,n;const r=null!==(n=null===(t=e.valueLabels)||void 0===t?void 0:t[0])&&void 0!==n?n:e.value;(0,ne.SM)(e.operator)?r.split("|").forEach((e=>a.push(e))):a.push(r)}));const s=n.filter((e=>!a.includes(e)));if("structuredMetadata"!==(null===(u=e.meta)||void 0===u?void 0:u.parser)){if(e.value){const t=(0,U.bu)(e,i);return{replace:!0,values:s.map((e=>({text:e,value:JSON.stringify({value:e,parser:t.parser})})))}}return{replace:!0,values:s.map((t=>{var n,r;return{text:t,value:JSON.stringify({value:t,parser:null!==(r=null===(n=e.meta)||void 0===n?void 0:n.parser)&&void 0!==r?r:"mixed"})}}))}}c=s.map((e=>({text:e})))}else c=[],f.v.error(n,{msg:"fetchDetectedLabelValues error!"})}catch(e){f.v.error(e,{msg:"getDetectedFieldValuesTagValuesProvider: loki missing detected_field/.../values endpoint. Upgrade to Loki 3.3.0 or higher."}),c=[]}}else f.v.warn("getDetectedFieldValuesTagValuesProvider: fetchDetectedLabelValues is not defined in Loki datasource. Upgrade to Grafana 11.4 or higher."),c=[];return{replace:!0,values:c}}));return function(t,n,r,a,i,s){return e.apply(this,arguments)}}();function se(e,t){return le.apply(this,arguments)}function le(){return le=ae((function*(e,t){const n=yield(0,H.getDataSourceSrv)().get((0,X.U4)(e));if(!(n instanceof H.DataSourceWithBackend))throw f.v.error(new Error("getTagValuesProvider: Invalid datasource!")),new Error("Invalid datasource!");const r=n;if(r&&r.getTagValues){const n=function(e,t){let n=e.filter((e=>!((0,ne.BG)(t.operator)&&e.key===t.key)));return n.some((e=>(0,ne.BG)(e.operator)))||(n=[]),n}(new te.K(e.state.filters).getJoinedLabelsFilters(),t),i={key:t.key,filters:n};let s=yield r.getTagValues(i);if((0,Z.isArray)(s)){var a;s=s.filter((n=>!e.state.filters.filter((e=>e.key===t.key)).some((e=>{if((0,ne.SM)(e.operator)){return e.value.split("|").some((e=>e===n.text))}return e.operator===ee.w7.Equal&&e.value===n.text}))));const n=(0,o.eT)(null===(a=(0,U.S9)(e).getValue())||void 0===a?void 0:a.toString(),t.key),r=new Set(n);n.length&&s.sort(((e,t)=>(r.has(t.text)?1:-1)-(r.has(e.text)?1:-1)))}return{replace:!0,values:s}}return f.v.error(new Error("getTagValuesProvider: missing or invalid datasource!")),{replace:!0,values:[]}})),le.apply(this,arguments)}var oe=n(8502);function ce(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function ue(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){ce(i,r,a,s,l,"next",e)}function l(e){ce(i,r,a,s,l,"throw",e)}s(void 0)}))}}function de(e){return pe.apply(this,arguments)}function pe(){return pe=ue((function*(e){const t=yield(0,H.getDataSourceSrv)().get((0,X.U4)(e));if(!(t instanceof H.DataSourceWithBackend))throw f.v.error(new Error("getTagKeysProvider: Invalid datasource!")),new Error("Invalid datasource!");const n=t;if(n&&n.getTagKeys){const t={filters:new te.K(e.state.filters).getJoinedLabelsFilters()},r=yield n.getTagKeys(t),a=(Array.isArray(r)?r:[]).filter((e=>!oe.rm.includes(e.text)));return{replace:!0,values:a}}return f.v.error(new Error("getTagKeysProvider: missing or invalid datasource!")),{replace:!0,values:[]}})),pe.apply(this,arguments)}function ge(e){return he.apply(this,arguments)}function he(){return he=ue((function*({limit:e,timeRange:t,scopedVars:n,expr:r,sceneRef:a,variableType:i}){const s=yield(0,H.getDataSourceSrv)().get((0,X.U4)(a));if(!(s instanceof H.DataSourceWithBackend))throw f.v.error(new Error("getTagKeysProvider: Invalid datasource!")),new Error("Invalid datasource!");const o=s,c=o.languageProvider,u={expr:r,timeRange:t,scopedVars:n,variableType:i,sceneRef:a,limit:e},d=o&&"function"==typeof c.fetchDetectedFields&&c.fetchDetectedFields.bind(c)||function(e){return function(e,t,n){return fe.apply(this,arguments)}(o,e)};if(d&&"function"==typeof d){const e=yield d(u);if(e instanceof Error)throw f.v.error(e,{msg:"Failed to fetch detected fields"}),e;const t=e.filter((e=>i===l._Y?e.label===l.e4:i===l.sL&&e.label!==l.e4||null!==e.parsers)).map((e=>{if(i===l.sL){var t;let n=1===(null===(t=e.parsers)||void 0===t?void 0:t.length)?e.parsers[0]:"mixed";null===e.parsers&&(n="structuredMetadata");const r=e.type;return{text:e.label,value:e.label,group:n,meta:{parser:n,type:r}}}return{text:e.label,value:e.label}}));return t.sort(((e,t)=>"structuredMetadata"===e.group&&"structuredMetadata"!==t.group?-1:"structuredMetadata"!==e.group&&"structuredMetadata"===t.group?1:0)),{replace:!0,values:t}}return f.v.error(new Error("getTagKeysProvider: missing or invalid datasource!")),{replace:!0,values:[]}})),he.apply(this,arguments)}function fe(){return fe=ue((function*(e,t,n){if(!("interpolateString"in e)||"function"!=typeof(null==e?void 0:e.interpolateString))throw new Error("Datasource missing interpolateString method");const r=t.expr&&"{}"!==t.expr?e.interpolateString(t.expr,t.scopedVars):void 0;if(!r)throw new Error("fetchDetectedFields requires query expression");var a;const s=null!==(a=null==t?void 0:t.timeRange)&&void 0!==a?a:(0,i.getDefaultTimeRange)(),l=e.getTimeRangeParams(s),{start:o,end:c}=l;var u;const d={start:o,end:c,limit:null!==(u=null==t?void 0:t.limit)&&void 0!==u?u:1e3};return d.query=r,new Promise(function(){var t=ue((function*(t,r){try{t((yield e.getResource("detected_fields",d,n)).fields)}catch(e){console.error("error",e),r(e)}}));return function(e,n){return t.apply(this,arguments)}}())})),fe.apply(this,arguments)}var ve=n(7796);function me(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let be={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},ye={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},Se={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},we={option:"alt",command:"meta",return:"enter",escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},Oe=null;for(let e=1;e<20;++e)be[111+e]="f"+e;for(let e=0;e<=9;++e)be[e+96]=e.toString();function xe(e){if("keypress"===e.type){let t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return be[e.which]?be[e.which]:ye[e.which]?ye[e.which]:String.fromCharCode(e.which).toLowerCase()}function Ee(e){return"shift"===e||"ctrl"===e||"alt"===e||"meta"===e}function Ce(e,t,n){return n||(n=function(){if(!Oe){Oe={};for(let e in be){const t=parseInt(e,10);t>95&&t<112||be.hasOwnProperty(e)&&(Oe[be[e]]=e)}}return Oe}()[e]?"keydown":"keypress"),"keypress"===n&&t.length&&(n="keydown"),n}function Pe(e,t){let n,r,a,i=[];for(n=function(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus")).split("+")}(e),a=0;a{e=e||{};let t,n=!1;for(t in this._sequenceLevels)e[t]?n=!0:this._sequenceLevels[t]=0;n||(this._nextExpectedAction=!1)})),me(this,"_getMatches",((e,t,n,r,a,i)=>{let s,l,o=[],c=n.type;if(!this._callbacks[e])return[];for("keyup"===c&&Ee(e)&&(t=[e]),s=0;s{const a=t.target||t.srcElement;var i;a&&a instanceof HTMLElement&&this.stopCallback(t,a,n,r)||!1===e(t,n)&&((i=t).preventDefault?i.preventDefault():i.returnValue=!1,function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}(t))})),me(this,"_handleKey",((e,t,n)=>{let r,a=this._getMatches(e,t,n),i={},s=0,l=!1;for(r=0;r0&&e.startsWith(c)&&(i[e]=1)}else l||this._fireCallback(a[r].callback,n,a[r].combo)}var c;for(const t of null!==(c=this._callbacks[e])&&void 0!==c?c:[])t.action===n.type&&t.seq&&0===t.level&&(i[t.seq]=1);let u="keypress"===n.type&&this._ignoreNextKeypress;n.type!==this._nextExpectedAction||Ee(e)||u||this._resetSequences(i),this._ignoreNextKeypress=l&&"keydown"===n.type})),me(this,"_handleKeyEvent",(e=>{if(!(e instanceof KeyboardEvent))throw new Error("Didn't get a KeyboardEvent");const t=e;if(t.repeat)return;"number"!=typeof t.which&&(t.which=t.keyCode);let n=xe(t);n&&("keyup"!==t.type||this._ignoreNextKeyup!==n?this.handleKey(n,function(e){let t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.push("alt"),e.ctrlKey&&t.push("ctrl"),e.metaKey&&t.push("meta"),t}(t),t):this._ignoreNextKeyup=!1)})),me(this,"_resetSequenceTimer",(()=>{clearTimeout(this._resetTimer),this._resetTimer=setTimeout(this._resetSequences,1e3)})),me(this,"_bindSequence",((e,t,n,r)=>{this._sequenceLevels[e]=0;const a=t=>()=>{this._nextExpectedAction=t,++this._sequenceLevels[e],this._resetSequenceTimer()},i=t=>{this._fireCallback(n,t,e),"keyup"!==r&&(this._ignoreNextKeyup=xe(t)),this._resetSequenceTimer()};for(let n=0;n{this._directMap[e+":"+n]=t;let i,s=(e=e.replace(/\s+/g," ")).split(" ");if(s.length>1)return void this._bindSequence(e,s,t,n);i=Pe(e,n),this._callbacks[i.key]=this._callbacks[i.key]||[];const l={type:i.action,metaKey:!1,ctrlKey:!1};this._getMatches(i.key,i.modifiers,l,r,e,a);const o={callback:t,modifiers:i.modifiers,action:i.action,seq:r,level:a,combo:e};this._callbacks[i.key][r?"unshift":"push"](o)})),me(this,"_bindMultiple",((e,t,n)=>{for(let r=0;r(e=e instanceof Array?e:[e],this._bindMultiple(e,t,n),self))),me(this,"unbind",((e,t)=>this.bind(e,(function(){}),t))),me(this,"bindGlobal",((e,t,n)=>{if(this.bind(e,t,n),e instanceof Array)for(let t=0;t{if(this.unbind(e,t),e instanceof Array)for(let t=0;t{let n=this;return n._directMap[e+":"+t]&&n._directMap[e+":"+t]({},e),n})),me(this,"reset",(()=>(this._callbacks={},this._directMap={},this))),me(this,"stopCallback",((e,t,n,r)=>{if(this._globalCallbacks[n]||r&&this._globalCallbacks[r])return!1;if((" "+t.className+" ").indexOf(" mousetrap ")>-1)return!1;if(ke(t,this.target))return!1;if("composedPath"in e&&"function"==typeof e.composedPath){let n=e.composedPath()[0];n!==e.target&&n instanceof HTMLElement&&(t=n)}return Boolean("INPUT"===t.tagName||"SELECT"===t.tagName||"TEXTAREA"===t.tagName||"isContentEditable"in t&&t.isContentEditable)})),me(this,"handleKey",((...e)=>this._handleKey(...e))),me(this,"addKeycodes",(e=>{for(let t in e)e.hasOwnProperty(t)&&(be[t]=e[t]);Oe=null})),this.target=e,this.target.addEventListener("keypress",(e=>{e instanceof KeyboardEvent&&this._handleKeyEvent(e)})),this.target.addEventListener("keydown",(e=>{e instanceof KeyboardEvent&&this._handleKeyEvent(e)})),this.target.addEventListener("keyup",(e=>{e instanceof KeyboardEvent&&this._handleKeyEvent(e)}))}}(document);class Fe{addBinding(e){je.bind(e.key,(t=>{t.preventDefault(),t.stopPropagation(),t.returnValue=!1,e.onTrigger()}),"keydown"),this._binds.push(e)}removeAll(){this._binds.forEach((e=>{je.unbind(e.key,e.type)})),this._binds=[]}constructor(){!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"_binds",[])}}var Le=n(5700),_e=n(8428);function Te(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function De(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){Te(i,r,a,s,l,"next",e)}function l(e){Te(i,r,a,s,l,"throw",e)}s(void 0)}))}}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const $e=(0,H.getAppEvents)();function Ie(e){const t=new Fe;let n=null;const r=$e.subscribe(i.SetPanelAttentionEvent,(e=>{"string"==typeof e.payload.panelId&&(n=e.payload.panelId)}));function a(e,t){return()=>{const r=s.jh.findObject(e,(e=>e.state.key===n&&e.isActive));r&&r instanceof s.Eb&&t(r)}}return t.addBinding({key:"p l",onTrigger:a(e,Me)}),t.addBinding({key:"a l",onTrigger:function(e,t){return()=>{s.jh.findAllObjects(e,(e=>e instanceof s.Eb&&e.isActive)).forEach((e=>{e&&e instanceof s.Eb&&t(e)}))}}(e,Me)}),t.addBinding({key:"p x",onTrigger:a(e,function(){var e=De((function*(e){const t=(0,Le.iD)(e);t&&H.locationService.push(t)}));return function(t){return e.apply(this,arguments)}}())}),t.addBinding({key:"t c",onTrigger:()=>{!function(e){const t=window.__grafanaSceneContext;window.__grafanaSceneContext=e}(s.jh.getTimeRange(e)),$e.publish(new Re)}}),t.addBinding({key:"t v",onTrigger:()=>{const t=new Ve({updateUrl:!1});e.publishEvent(t),$e.publish(t)}}),t.addBinding({key:"d r",onTrigger:()=>s.jh.getTimeRange(e).onRefresh()}),t.addBinding({key:"t z",onTrigger:()=>{Be(e)}}),t.addBinding({key:"ctrl+z",onTrigger:()=>{Be(e)}}),t.addBinding({key:"t a",onTrigger:()=>{const t=(0,X.m0)(e);null==t||t.toAbsolute()}}),t.addBinding({key:"t left",onTrigger:()=>{Ae(e,"left")}}),t.addBinding({key:"t right",onTrigger:()=>{Ae(e,"right")}}),()=>{t.removeAll(),r.unsubscribe()}}function Be(e){const t=(0,X.m0)(e);null==t||t.onZoom()}function Ae(e,t){const n=(0,X.m0)(e);n&&("left"===t&&n.onMoveBackward(),"right"===t&&n.onMoveForward())}function Me(e){const t=e.state.options;var n;null!=(n=t)&&"object"==typeof n&&"legend"in n&&"boolean"==typeof t.legend.showLegend&&e.onOptionsChange({legend:{showLegend:!t.legend.showLegend}})}class Re extends i.BusEventBase{}Ne(Re,"type","copy-time");class Ve extends i.BusEventWithPayload{}function We(){return(We=De((function*(){const e=yield navigator.clipboard.readText();let t;try{t=JSON.parse(e);const n=(0,_e.OK)(t);if(n)return{isError:!1,range:n}}catch(e){}return{range:e,isError:!0}}))).apply(this,arguments)}Ne(Ve,"type","paste-time");var ze=n(4532),He=n(5548),Qe=n(1532),Ke=n(6838),Ge=n(2499),Ue=n(1792);const qe=()=>{const e=(0,u.useStyles2)(Je),t=(0,u.useTheme2)();return a().createElement("div",{className:e.wrap},a().createElement("div",{className:e.graphicContainer},a().createElement(Ue.A,{src:(t.isDark,"/public/plugins/grafana-lokiexplore-app/img/grot_loki.svg")})),a().createElement("div",{className:e.text},a().createElement("h3",{className:e.title},"Welcome to Grafana Logs Drilldown"),a().createElement("p",null,"We noticed there is no Loki datasource configured.",a().createElement("br",null),"Add a"," ",a().createElement("a",{className:"external-link",href:i.locationUtil.assureBaseUrl("/connections/datasources/new")},"Loki datasource")," ","to view logs."),a().createElement("br",null),a().createElement("p",null,"Click"," ",a().createElement("a",{href:"https://grafana.com/docs/grafana/latest/explore/simplified-exploration/logs/",target:"_blank",className:"external-link",rel:"noreferrer"},"here")," ","to learn more...")))},Je=e=>({graphicContainer:(0,d.css)({display:"flex",justifyContent:"center",margin:"0 auto",width:"200px",height:"250px",padding:e.spacing(1),[e.breakpoints.up("md")]:{alignSelf:"flex-end",width:"300px",height:"auto",padding:e.spacing(1)},[e.breakpoints.up("lg")]:{alignSelf:"flex-end",width:"400px",height:"auto",padding:e.spacing(1)}}),text:(0,d.css)({display:"flex",justifyContent:"center",alignItems:"center",flexDirection:"column"}),title:(0,d.css)({marginBottom:"1.5rem"}),wrap:(0,d.css)({[e.breakpoints.up("md")]:{margin:"4rem auto auto auto",flexDirection:"row"},padding:"2rem",margin:"0 auto auto auto",display:"flex",alignItems:"center",flexDirection:"column",textAlign:"center"})});function Ye(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function Xe(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){Ye(i,r,a,s,l,"next",e)}function l(e){Ye(i,r,a,s,l,"throw",e)}s(void 0)}))}}function Ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function et(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const tt="showLogsButtonScene";class nt extends s.Bs{onActivate(){const e={};this.setVariableProviders();var t;(s.jh.findByKeyAndType(this,tt,ve.H).setState({hidden:!1}),this.state.contentScene)||(e.contentScene=function(e){if((0,$.FT)()===$.G3.explore)return new z.y({});return new c.Mn({drillDownLabel:e})}(null===(t=this.state.routeMatch)||void 0===t?void 0:t.params.breakdownLabel));this.setTagProviders(),this.setState(e),this.updatePatterns(this.state,(0,U.Ku)(this)),this.resetVariablesIfNotInUrl((0,U.ir)(this),(0,U.n5)(l.mB)),this.resetVariablesIfNotInUrl((0,U.iw)(this),(0,U.n5)(l._Y)),this._subs.add(this.subscribeToState((e=>{this.updatePatterns(e,(0,U.Ku)(this))})));const n=s.jh.getTimeRange(this);this._subs.add(n.subscribeToState(this.limitMaxInterval(n))),this._subs.add(this.subscribeToEvent(Ve,this.subscribeToPasteTimeEvent));const r=(0,U.ir)(this).state.filters,a=(0,U.oY)(this).state.filters,i=(0,U.YS)(this);i.updateFilters([...a,...r]),this._subs.add(i.subscribeToState(this.subscribeToCombinedFieldsVariable));const o=Ie(this);return()=>{o()}}setTagProviders(){this.setLabelsProviders()}setLabelsProviders(){const e=(0,U.cR)(this);e._getOperators=()=>(0,He.Ht)(e),e.setState({getTagKeysProvider:de,getTagValuesProvider:se})}limitMaxInterval(e){return(t,n)=>{const{jsonData:r}=Y.plugin.meta;if(null==r?void 0:r.interval)try{var a;const l=i.rangeUtil.intervalToSeconds(null!==(a=null==r?void 0:r.interval)&&void 0!==a?a:"");if(!l)return;const o=t.value.to.diff(t.value.from,"seconds");if(o>l){if(o<=n.value.to.diff(n.value.from,"seconds"))e.setState({value:n.value,from:n.from,to:n.to});else{const t=new s.JZ(J.sp);e.setState({value:t.state.value,from:t.state.from,to:t.state.to})}(0,H.getAppEvents)().publish({type:i.AppEvents.alertWarning.name,payload:["Time range interval exceeds maximum interval configured by the administrator."]}),(0,j.EE)("all","interval_too_long",{attempted_duration_seconds:o,configured_max_interval:l})}}catch(e){console.error(e)}}}setVariableProviders(){const e=(0,U.iw)(this),t=(0,U.YS)(this);t._getOperators=()=>(0,He.Ht)(t),e.setState({getTagValuesProvider:this.getLevelsTagValuesProvider(),getTagKeysProvider:this.getLevelsTagKeysProvider()}),t.setState({getTagKeysProvider:this.getCombinedFieldsTagKeysProvider(),getTagValuesProvider:this.getCombinedFieldsTagValuesProvider()})}getCombinedFieldsTagKeysProvider(){return(e,t)=>{const n=(0,U.oY)(this),r=(0,U.ir)(this),a=(0,Ke.O)(l.sL),i=n.state.filters.filter((e=>e.key!==t)),o=r.state.filters.filter((e=>e.key!==t)),c=this.renderVariableFilters(l.mB,o),u=this.renderVariableFilters(l._P,i),d=a.replace(l.Gd,c).replace(l.w0,u);return ge({expr:s.jh.interpolate(this,d),sceneRef:this,timeRange:s.jh.getTimeRange(this).state.value,variableType:l.sL})}}getCombinedFieldsTagValuesProvider(){return(e,t)=>{const n=(0,Ke.O)(l.sL),r=(0,U.oY)(this),a=(0,U.ir)(this),i=r.state.filters.filter((e=>e.key!==t.key&&(0,ne.BG)(e.operator))),o=a.state.filters.filter((e=>e.key!==t.key&&(0,ne.BG)(e.operator))),c=this.renderVariableFilters(l.mB,o),u=this.renderVariableFilters(l._P,i),d=n.replace(l.Gd,c).replace(l.w0,u),p=s.jh.interpolate(this,d);return ie(t,e,p,this,s.jh.getTimeRange(this).state.value,l.sL)}}getLevelsTagKeysProvider(){return(e,t)=>{const n=e.state.filters.filter((e=>e.key!==t)),r=this.renderVariableFilters(l._Y,n),a=(0,Ke.O)(l._Y).replace(l.Gd,r);return ge({expr:s.jh.interpolate(this,a),sceneRef:this,timeRange:s.jh.getTimeRange(this).state.value,variableType:l._Y})}}getLevelsTagValuesProvider(){return(e,t)=>{const n=e.state.filters.filter((e=>e.key!==t.key&&e.operator===ee.w7.Equal)),r=this.renderVariableFilters(l._Y,n),a=(0,Ke.O)(l._Y).replace(l.Gd,r),i=s.jh.interpolate(this,a);return ie(t,e,i,this,s.jh.getTimeRange(this).state.value,l._Y)}}renderVariableFilters(e,t){if(e===l.mB)return(0,Q.ZX)(t);if(e===l._P)return(0,Q.E3)(t);if(e===l._Y)return(0,Q.E3)(t);{const e=new Error("getFieldsTagValuesProvider only supports fields, metadata, and levels");throw f.v.error(e),e}}resetVariablesIfNotInUrl(e,t){const n=H.locationService.getLocation();null===new URLSearchParams(n.search).get(t)&&e.setState({filters:[]})}updatePatterns(e,t){var n;const r=(0,Ge.M)(null!==(n=e.patterns)&&void 0!==n?n:[]);t.changeValueTo(r)}getUrlState(){return{patterns:JSON.stringify(this.state.patterns)}}updateFromUrl(e){const t={};e.patterns&&"string"==typeof e.patterns&&(t.patterns=JSON.parse(e.patterns)),this.setState(t)}constructor(e){var t,n;const{variablesScene:r,unsub:a}=function(e,t){const n=new s.H9({name:l.MB,datasource:l.eL,layout:"combobox",label:"Labels",allowCustomValue:!0,filters:null!=t?t:[],expressionBuilder:Q.VW,hide:K.zL.dontHide,key:"adhoc_service_filter",onAddCustomValue:Q.c0});n._getOperators=function(){return ze.II};const r=new s.H9({name:l.mB,label:"Detected fields",applyMode:"manual",layout:"combobox",expressionBuilder:Q.ZX,hide:K.zL.hideVariable,allowCustomValue:!0});r._getOperators=()=>ze.II;const a=new s.H9({name:l._P,label:"Metadata",applyMode:"manual",layout:"combobox",expressionBuilder:e=>(0,Q.E3)(e),hide:K.zL.hideVariable,allowCustomValue:!0});a._getOperators=()=>ze.II;const i=new s.H9({name:l.sL,label:"Fields",applyMode:"manual",layout:"combobox",hide:K.zL.hideVariable,allowCustomValue:!0,onAddCustomValue:Q.PP,skipUrlSync:!0}),c=new s.H9({name:l._Y,label:"Error levels",applyMode:"manual",layout:"vertical",expressionBuilder:Q._q,hide:K.zL.hideVariable,supportsMultiValueOperators:!0}),u=new s.H9({name:l.NW,hide:K.zL.hideVariable,getTagKeysProvider:()=>Promise.resolve({replace:!0,values:[]}),getTagValuesProvider:()=>Promise.resolve({replace:!0,values:[]}),expressionBuilder:Q.CY,layout:"horizontal"});u._getOperators=()=>ze.eb;const d=new s.mI({name:l.EY,label:"Data source",value:e,pluginId:"loki"}),p=d.subscribeToState((e=>{const t=`${e.value}`;e.value&&(0,o.ke)(t)}));return{variablesScene:new s.Pj({variables:[d,n,r,c,a,i,new s.yP({name:l.uw,value:"",hide:K.zL.hideVariable}),new s.H9({name:l.WM,hide:K.zL.hideVariable,expressionBuilder:Q.CY}),u,new G.m({name:l.QE,value:l.YN,skipUrlSync:!0,hide:K.zL.hideVariable,options:[{value:l.YN,label:l.YN}]})]}),unsub:p}}(null!==(n=(0,o.QB)())&&void 0!==n?n:"grafanacloud-logs",e.initialFilters),c=[new s.G1({key:"vars-row__datasource-labels-timepicker-button",direction:"row",children:[new s.vA({body:new y({key:"vars-labels",layout:"vertical",include:[l.MB]})}),new ve.H({key:tt,disabled:!0})]}),new y({key:"vars-metadata",layout:"vertical",include:[l._P]}),new y({key:"vars-fields",layout:"vertical",include:[l.mB]}),new y({key:R,layout:"horizontal",include:[l.EY]}),new y({key:M,layout:"vertical",include:[l.sL]}),new s.KE({key:"vars-timepicker"}),new s.WM({key:"vars-refresh"})];var u,d,p;"explore"===(0,$.FT)()&&H.config.featureToggles.exploreLogsAggregatedMetrics&&c.push(new q.s({key:"vars-toolbar",isOpen:!1})),super(et(function(e){for(var t=1;t{if(!(0,Qe.B)(e.filters,null==t?void 0:t.filters)){const t=e.filters.filter((e=>(0,oe.OH)(e))),n=e.filters.filter((e=>!(0,oe.OH)(e)));(0,U.ir)(this).updateFilters(n),(0,U.oY)(this).updateFilters(t)}})),Ze(this,"subscribeToPasteTimeEvent",Xe((function*(){const e=yield function(){return We.apply(this,arguments)}();if(e.isError)return;const n=s.jh.getTimeRange(t),r="string"==typeof e.range.to?e.range.to:void 0,a="string"==typeof e.range.from?e.range.from:void 0,l=i.rangeUtil.convertRawToRange(e.range);n&&l?n.setState({value:l,to:r,from:a}):f.v.error(new Error("Invalid time range from clipboard"),{msg:"Invalid time range from clipboard",sceneTimeRange:typeof n,to:null!=r?r:"",from:null!=a?a:""})}))),this._subs.add(a),this.addActivationHandler(this.onActivate.bind(this)),(0,X.hJ)(this).then((e=>{this.setState({ds:e})}))}}Ze(nt,"Component",(({model:e})=>{const{body:t}=e.useState();return(0,U.S9)(e).state.options.length?t?a().createElement(t.Component,{model:t}):a().createElement(u.LoadingPlaceholder,{text:"Loading..."}):a().createElement(qe,null)}))},2085:(e,t,n)=>{n.d(t,{dm:()=>b,kz:()=>v,qV:()=>m});var r=n(9736),a=n(5959),i=n.n(a),s=n(5553),l=n(6089),o=n(2007),c=n(20),u=n(6854),d=n(3571),p=n(7478);function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e){for(var t=1;t{this.onFilterChange()})))}onFilterChange(){const e=(0,s.iw)(this);this.setState({options:e.state.filters.map((e=>{var t,n;return{text:null!==(n=null===(t=e.valueLabels)||void 0===t?void 0:t[0])&&void 0!==n?n:e.value,selected:!0,value:e.value}}))})}constructor(e){super(f(h({},e),{isLoading:!1,visible:!1,key:v,isOpen:!1})),g(this,"getTagValues",(()=>{var e,t;this.setState({isLoading:!0});const n=(0,s.iw)(this);var r;const a=null==n||null===(t=n.state)||void 0===t||null===(e=t.getTagValuesProvider)||void 0===e?void 0:e.call(t,n,null!==(r=n.state.filters[0])&&void 0!==r?r:{key:c.e4});null==a||a.then((e=>{Array.isArray(e.values)&&this.setState({isLoading:!1,options:e.values.map((e=>{var t;return{text:e.text,value:null!==(t=e.value)&&void 0!==t?t:e.text,selected:n.state.filters.some((t=>t.value===e.text))}}))})}))})),g(this,"updateFilters",((e,t)=>{var n;const r=(0,s.iw)(this),a=null===(n=this.state.options)||void 0===n?void 0:n.filter((e=>e.selected));var i;r.updateFilters(null!==(i=null==a?void 0:a.map((e=>({key:c.e4,operator:u.w7.Equal,value:e.text}))))&&void 0!==i?i:[],{skipPublish:e,forcePublish:t})})),g(this,"onChangeOptions",(e=>{var t;(0,p.bN)(),this.setState({options:null===(t=this.state.options)||void 0===t?void 0:t.map((t=>e.some((e=>e.value===t.value))?f(h({},t),{selected:!0}):f(h({},t),{selected:!1})))}),this.state.isOpen?this.updateFilters(!0):this.updateFilters(!1)})),g(this,"openSelect",(e=>{this.setState({isOpen:e})})),g(this,"onCloseMenu",(()=>{this.openSelect(!1),this.updateFilters(!1,!0)})),this.addActivationHandler(this.onActivate.bind(this))}}function b(e){const t=r.jh.findObject(e,(e=>e instanceof m));t instanceof m&&t.onFilterChange()}g(m,"Component",(({model:e})=>{const{options:t,isLoading:n,visible:a,isOpen:l}=e.useState(),c=(0,o.useStyles2)(y);return(0,s.iw)(e).useState(),a?i().createElement("div",{"data-testid":d.b.variables.levels.inputWrap,className:c.wrapper},i().createElement(r.Zx,{layout:"vertical",label:"Log levels"}),i().createElement(o.MultiSelect,{"aria-label":"Log level filters",prefix:i().createElement(o.Icon,{size:"lg",name:"filter"}),placeholder:"All levels",className:c.control,onChange:e.onChangeOptions,onCloseMenu:()=>e.onCloseMenu(),onOpenMenu:e.getTagValues,onFocus:()=>e.openSelect(!0),menuShouldPortal:!0,isOpen:l,isLoading:n,isClearable:!0,blurInputOnSelect:!1,closeMenuOnSelect:!1,openMenuOnFocus:!0,showAllSelectedWhenOpen:!0,hideSelectedOptions:!1,value:null==t?void 0:t.filter((e=>e.selected)),options:null==t?void 0:t.map((e=>({value:e.value,label:e.text})))})):null}));const y=()=>({control:(0,l.css)({flex:"1"}),wrapper:(0,l.css)({flex:"0 0 auto",whiteSpace:"nowrap"})})},1459:(e,t,n)=>{n.d(t,{Y:()=>w,F:()=>O});var r=n(9736),a=n(5959),i=n.n(a),s=n(5553),l=n(6854),o=n(4509),c=n(3241),u=n(6089),d=n(2007),p=n(72);function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function f({onClick:e,props:t}){const[n,r]=(0,a.useState)(!1),s=(0,d.useStyles2)(v);return i().createElement(i().Fragment,null,i().createElement("span",null,i().createElement("div",{className:s.titleWrap},i().createElement("span",null,"Line filter"),i().createElement(d.IconButton,{onClick:e,name:"times",size:"xs","aria-label":"Remove line filter"})),i().createElement("span",{className:s.collapseWrap},i().createElement(p._,h(function(e){for(var t=1;tr(!1),name:"table-collapse-all"}))))}const v=e=>({titleWrap:(0,u.css)({display:"flex",fontSize:e.typography.bodySmall.fontSize,marginBottom:e.spacing(.5),gap:e.spacing(1)}),collapseWrap:(0,u.css)({display:"flex"}),collapseBtn:(0,u.css)({marginLeft:e.spacing(1)})});var m=n(7478);function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t{"Enter"===e.key&&((0,m.bN)(),this.updateVariableLineFilter(n,S(y({},n),{value:t})))})),b(this,"onRegexToggle",(e=>{let t;switch(e.operator){case l.cK.match:t=l.cK.regex;break;case l.cK.negativeMatch:t=l.cK.negativeRegex;break;case l.cK.regex:t=l.cK.match;break;case l.cK.negativeRegex:t=l.cK.negativeMatch;break;default:throw new Error("Invalid operator!")}this.updateFilter(e,S(y({},e),{operator:t}),!1)})),b(this,"onToggleExclusive",(e=>{let t;switch(e.operator){case l.cK.match:t=l.cK.negativeMatch;break;case l.cK.negativeMatch:t=l.cK.match;break;case l.cK.regex:t=l.cK.negativeRegex;break;case l.cK.negativeRegex:t=l.cK.regex;break;default:throw new Error("Invalid operator!")}this.updateFilter(e,S(y({},e),{operator:t}),!1)})),b(this,"onCaseSensitiveToggle",(e=>{const t=e.key===l.ld.caseSensitive?l.ld.caseInsensitive:l.ld.caseSensitive;this.updateFilter(e,S(y({},e),{key:t}),!1)})),b(this,"onInputChange",((e,t)=>{this.updateFilter(t,S(y({},t),{value:e.target.value}),!0)})),b(this,"removeFilter",(e=>{(0,m.bN)();const t=(0,s.Gk)(this),n=t.state.filters.filter((t=>void 0!==t.keyLabel&&t.keyLabel!==e.keyLabel));t.setState({filters:n})})),b(this,"updateVariableLineFilter",((e,t,n=!1,r=!1)=>{const a=(0,s.Gk)(this),i=a.state.filters.filter((t=>void 0!==t.keyLabel&&t.keyLabel!==e.keyLabel));a.updateFilters([{keyLabel:e.keyLabel,key:t.key,operator:t.operator,value:t.value},...i],{skipPublish:n,forcePublish:r}),(0,o.EE)(o.NO.service_details,o.ir.service_details.search_string_in_variables_changed,{searchQueryLength:e.value.length,containsLevel:e.value.toLowerCase().includes("level"),operator:t.operator,caseSensitive:t.key})})),b(this,"updateVariableDebounced",(0,c.debounce)(((e,t,n=!1,r=!1)=>{this.updateVariableLineFilter(e,t,n,r)}),1e3))}}function O(e){e.sort(((e,t)=>{var n,r;return parseInt(null!==(n=e.keyLabel)&&void 0!==n?n:"0",10)-parseInt(null!==(r=t.keyLabel)&&void 0!==r?r:"0",10)}))}function x(e){return{lineFiltersWrap:(0,u.css)({label:"lineFiltersWrap",display:"flex",flexWrap:"wrap",gap:`${e.spacing(.25)} ${e.spacing(2)}`})}}b(w,"Component",(({model:e})=>{const t=(0,s.Gk)(e),{filters:n}=t.useState(),r=(0,d.useStyles2)(x);return O(n),n.length?i().createElement("div",{className:r.lineFiltersWrap},n.map((t=>{const n={lineFilter:t.value,regex:t.operator===l.cK.regex||t.operator===l.cK.negativeRegex,caseSensitive:t.key===l.ld.caseSensitive,exclusive:e.isFilterExclusive(t),handleEnter:(n,r)=>e.handleEnter(n,t.value,t),setExclusive:()=>e.onToggleExclusive(t),updateFilter:(n,r)=>e.updateFilter(t,S(y({},t),{value:n}),r),onRegexToggle:()=>e.onRegexToggle(t),onInputChange:n=>e.onInputChange(n,t),onCaseSensitiveToggle:()=>e.onCaseSensitiveToggle(t)};return i().createElement(f,{key:t.keyLabel,onClick:()=>e.removeFilter(t),props:n})}))):null}))},7796:(e,t,n)=>{n.d(t,{H:()=>g});var r=n(9736),a=n(2007),i=n(5959),s=n.n(i),l=n(6089),o=n(7478),c=n(5553),u=n(3571),d=n(708);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class g extends r.Bs{onActivate(){const e=(0,c.cR)(this),t=e.state.filters.some((e=>(0,d.BG)(e.operator)));this.setState({disabled:!t}),e.subscribeToState((e=>{const t=e.filters.some((e=>(0,d.BG)(e.operator)));this.setState({disabled:!t})}))}constructor(e){super(function(e){for(var t=1;t{const e=(0,c.cR)(this).state.filters.find((e=>(0,d.BG)(e.operator)));return e?(0,o.k9)(e.key,e.value):""})),this.addActivationHandler(this.onActivate.bind(this))}}function h(e){return{button:(0,l.css)({[e.breakpoints.down("lg")]:{alignSelf:"flex-end"},[e.breakpoints.down("md")]:{marginTop:e.spacing(1),alignSelf:"flex-start"},alignSelf:"flex-start",marginTop:"22px"})}}p(g,"Component",(({model:e})=>{const{disabled:t,hidden:n}=e.useState(),r=(0,a.useStyles2)(h);if(!0===n)return null;const i=e.getLink();return s().createElement(a.LinkButton,{"data-testid":u.b.index.header.showLogsButton,disabled:t||!i,fill:"outline",className:r.button,href:i},"Show logs")}))},9731:(e,t,n)=>{n.d(t,{s:()=>f});var r=n(9736),a=n(2007),i=n(5959),s=n.n(i),l=n(6089),o=n(8531),c=n(4509),u=n(173),d=n(2533),p=n(3571);function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const h=`${d.id}.serviceSelection.aggregatedMetrics`;class f extends r.Bs{constructor(e){const t=localStorage.getItem(h),n=o.config.featureToggles.exploreLogsAggregatedMetrics&&"false"!==t;var r;super(function(e){for(var t=1;t{const e=!this.state.options.aggregatedMetrics.active;(0,c.EE)(c.NO.service_selection,c.ir.service_selection.aggregated_metrics_toggled,{enabled:e}),localStorage.setItem(h,e.toString()),this.setState({options:{aggregatedMetrics:{active:e,disabled:this.state.options.aggregatedMetrics.disabled,userOverride:e}}})})),g(this,"onToggleOpen",(e=>{this.setState({isOpen:e})}))}}function v(e){return{popover:(0,l.css)({display:"flex",padding:e.spacing(2),flexDirection:"column",background:e.colors.background.primary,boxShadow:e.shadows.z3,borderRadius:e.shape.radius.default,border:`1px solid ${e.colors.border.weak}`,zIndex:1,marginRight:e.spacing(2)}),heading:(0,l.css)({fontWeight:e.typography.fontWeightMedium,paddingBottom:e.spacing(2)}),options:(0,l.css)({display:"grid",gridTemplateColumns:"1fr 50px",rowGap:e.spacing(1),columnGap:e.spacing(2),alignItems:"center"})}}g(f,"Component",(({model:e})=>{const{isOpen:t,options:n}=e.useState(),r=(0,a.useStyles2)(v),i=()=>s().createElement("div",{className:r.popover,onClick:e=>e.stopPropagation()},s().createElement("div",{className:r.heading},"Query options"),s().createElement("div",{className:r.options},s().createElement("div",{title:"Aggregated metrics will return service queries results much more quickly, but with lower resolution"},"Aggregated metrics"),s().createElement("span",{title:n.aggregatedMetrics.disabled?`Aggregated metrics can only be enabled for queries starting after ${u.X.toLocaleString()}`:""},s().createElement(a.Switch,{label:"Toggle aggregated metrics","data-testid":p.b.index.aggregatedMetricsToggle,value:n.aggregatedMetrics.active,disabled:n.aggregatedMetrics.disabled,onChange:e.toggleAggregatedMetricsOverride}))));return n.aggregatedMetrics?s().createElement(a.Dropdown,{overlay:i,placement:"bottom",onVisibleChange:e.onToggleOpen},s().createElement(a.ToolbarButton,{icon:"cog",variant:"canvas",isOpen:t,"data-testid":p.b.index.aggregatedMetricsMenu})):s().createElement(s().Fragment,null)}))},6991:(e,t,n)=>{n.d(t,{Oo:()=>h,c:()=>g,sp:()=>d});var r=n(9736),a=n(9683),i=n(7781),s=n(2661),l=n(7478),o=n(5953),c=n(5002),u=n(9598);const d={from:"now-15m",to:"now"};function p(e){return new r.P1({body:new s.P({$timeRange:new r.JZ(d),routeMatch:e})})}function g(){return new r.jD({title:"Grafana Logs Drilldown",url:(0,u._F)(a.G3.explore),layout:i.PageLayoutType.Custom,preserveUrlKeys:a.Zt,routePath:`${a.G3.explore}/*`,getScene:e=>p(e),drilldowns:[{routePath:a.HU.logs,getPage:(e,t)=>f(e,t,a.G3.logs),defaultRoute:!0},{routePath:a.HU.labels,getPage:(e,t)=>f(e,t,a.G3.labels)},{routePath:a.HU.patterns,getPage:(e,t)=>f(e,t,a.G3.patterns)},{routePath:a.HU.fields,getPage:(e,t)=>f(e,t,a.G3.fields)},{routePath:a.KL.label,getPage:(e,t)=>v(e,t,a._J.label)},{routePath:a.KL.field,getPage:(e,t)=>v(e,t,a._J.field)},{routePath:"*",getPage:()=>h()}]})}function h(){return new r.jD({title:"",url:i.urlUtil.renderUrl(u.Gy,void 0),getScene:()=>new r.P1({body:new r.G1({direction:"column",children:[]})}),hideFromBreadcrumbs:!0,routePath:"*",$behaviors:[()=>{(0,l.Ns)()}]})}function f(e,t,n){const{labelName:s,labelValue:l}=(0,a.XJ)(e);return new r.jD({title:(0,c.Zr)(n),layout:i.PageLayoutType.Custom,url:a.bw[n](l,s),routePath:a.HU[n],preserveUrlKeys:a.tm,getParentPage:()=>t,getScene:e=>p(e)})}function v(e,t,n){const{labelName:s,labelValue:l,breakdownLabel:u}=(0,a.XJ)(e);if(!u){const e=new Error("Breakdown value missing!");throw o.v.error(e,{msg:"makeBreakdownValuePage: Breakdown value missing!",labelName:s,labelValue:l,breakdownLabel:null!=u?u:""}),e}return new r.jD({title:(0,c.Zr)(u),layout:i.PageLayoutType.Custom,url:a.mC[n](l,s,u),routePath:a.KL[n],preserveUrlKeys:a.tm,getParentPage:()=>t,getScene:e=>p(e)})}},5700:(e,t,n)=>{n.d(t,{ls:()=>A,Ci:()=>M,GD:()=>R,iD:()=>V,K_:()=>K});var r=n(9736),a=n(5959),i=n.n(a),s=n(7781),l=n(8531),o=n(2007),c=n(5719),u=(n(3571),n(4509)),d=n(4351),p=n(8428),g=n(2165);const h=(e,t,n=!1)=>{t||(t=(0,c.u9)(e)),t=t.replace(/\s+/g," ").trimEnd();const a=(0,c.U4)(e),i=r.jh.getTimeRange(e).state.value,o=(0,d.N$)(e),u=(0,d.k5)(),h=function(){const e=new URLSearchParams(window.location.search).get("urlColumns");if(e)try{const t=(0,p.aJ)(JSON.parse(e));let n={};for(const e in t)n[e]=t[e];return n}catch(e){console.error(e)}return}(),f=JSON.stringify({"loki-explore":{range:(0,s.toURLRange)(i.raw),queries:[{refId:"logs",expr:t,datasource:a}],panelsState:{logs:{displayedFields:o,visualisationType:u,columns:h,labelFieldName:"table"===u?g.bz:void 0}},datasource:a}});var v;const m=null!==(v=l.config.appSubUrl)&&void 0!==v?v:"",b=s.urlUtil.renderUrl(`${m}/explore`,{panes:f,schemaVersion:1});return n&&window.open(b,"_blank"),b};var f=n(2661),v=n(5953),m=n(7389);const b=n.p+"3d96a93cfcb32df74eef.svg";function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e){for(var t=1;t{(0,c.hJ)(this).then((e=>{this.setState({ds:e})})),this._subs.add(this.subscribeToState(((e,t)=>{this.state.queries.length||this.getQueries(),!this.state.context&&this.state.queries.length&&this.getContext()})))})),y(this,"getQueries",(()=>{const e=r.jh.getData(this),t=(0,c.UX)(e,(e=>e instanceof r.dt),r.dt);if(t){const e=this.state.frame?x(this.state.frame):null,n=t.state.queries.map((n=>{var a;return w(S({},n),{expr:r.jh.interpolate(t,n.expr),legendFormat:(null==e?void 0:e.name)?`{{ ${e.name} }}`:r.jh.interpolate(t,n.legendFormat),datasource:null!==(a=n.datasource)&&void 0!==a?a:void 0})}));JSON.stringify(n)!==JSON.stringify(this.state.queries)&&this.setState({queries:n})}})),y(this,"getFieldConfig",(()=>{var e;const t=(0,c.UX)(this,(e=>e instanceof r.Eb),r.Eb),n=r.jh.getData(this),a=null==n||null===(e=n.state.data)||void 0===e?void 0:e.series;let i=null==t?void 0:t.state.fieldConfig;if(i&&(null==a?void 0:a.length))for(const e of a)for(const t of e.fields){const e=Object.keys(t.config).map((e=>({id:e,value:t.config[e]}))),n=i.overrides.find((e=>{var n,r;return e.matcher.options===(null!==(r=null!==(n=t.config.displayNameFromDS)&&void 0!==n?n:t.config.displayName)&&void 0!==r?r:t.name)&&"byName"===e.matcher.id}));var s,l;if(!n)i.overrides.unshift({matcher:{id:"byName",options:null!==(l=null!==(s=t.config.displayNameFromDS)&&void 0!==s?s:t.config.displayName)&&void 0!==l?l:t.name},properties:e});n&&JSON.stringify(n.properties)!==JSON.stringify(e)&&(n.properties=e)}return i})),y(this,"getContext",(()=>{const e=this.getFieldConfig(),{queries:t,ds:n,labelName:a,fieldName:i,type:s}=this.state,l=r.jh.getTimeRange(this);if(!l||!t||!(null==n?void 0:n.uid))return;const o={origin:"Grafana Logs Drilldown",type:null!=s?s:"timeseries",queries:t,timeRange:S({},l.state.value),datasource:{uid:n.uid},url:window.location.href,id:`${JSON.stringify(t)}${a}${i}`,title:`${a}${i?` > ${i}`:""}`,logoPath:b,drillDownLabel:i,fieldConfig:e};JSON.stringify(o)!==JSON.stringify(this.state.context)&&this.setState({context:o})})),this.addActivationHandler(this.onActivate)}}y(O,"Component",(({model:e})=>{const{context:t}=e.useState(),{links:n}=(0,l.usePluginLinks)({extensionPointId:m.R6.MetricInvestigation,context:t});return i().createElement(i().Fragment,null,n.filter((e=>"grafana-investigations-app"===e.pluginId&&e.onClick)).map((e=>{var t;return i().createElement(o.IconButton,{tooltip:e.description,"aria-label":"extension-link-to-open-exploration",key:e.id,name:null!==(t=e.icon)&&void 0!==t?t:"panel-add",onClick:t=>{e.onClick&&e.onClick(t)}})})))}));const x=e=>{var t,n;const r=null!==(n=null===(t=e.fields[1])||void 0===t?void 0:t.labels)&&void 0!==n?n:{};if(1!==Object.keys(r).length)return;const a=Object.keys(r)[0];return{name:a,value:r[a]}};var E=n(1475),C=n(7813),P=n(5865),k=n(2969),j=n(6887),F=n(6089),L=n(1269);function _(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function T(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){_(i,r,a,s,l,"next",e)}function l(e){_(i,r,a,s,l,"throw",e)}s(void 0)}))}}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function N(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const $="Add to investigation",I="investigations_divider",B="Investigations";var A=function(e){return e.timeseries="timeseries",e.histogram="histogram",e}({}),M=function(e){return e.collapsed="Collapse",e.expanded="Expand",e}({});class R extends r.Bs{addItem(e){this.state.body&&this.state.body.addItem(e)}setItems(e){this.state.body&&this.state.body.setItems(e)}constructor(e){var t;super(N(function(e){for(var t=1;t{var e,t,n,a,i,s,l;const o=[{text:"Navigation",type:"group"},{text:"Explore",iconClassName:"compass",href:V(this),onClick:()=>W(),shortcut:"p x"}];let u;try{u=r.jh.getAncestor(this,r.Eb)}catch(e){return void this.setState({body:new r.Lw({items:o})})}var p;(this.setState({investigationsButton:new O({labelName:(null===(e=this.state.investigationOptions)||void 0===e?void 0:e.getLabelName)?null===(t=this.state.investigationOptions)||void 0===t?void 0:t.getLabelName():null===(n=this.state.investigationOptions)||void 0===n?void 0:n.labelName,fieldName:null===(a=this.state.investigationOptions)||void 0===a?void 0:a.fieldName,frame:null===(i=this.state.investigationOptions)||void 0===i?void 0:i.frame,type:null===(s=this.state.investigationOptions)||void 0===s?void 0:s.type})}),this.state.addInvestigationsLink)&&(null===(p=this.state.investigationsButton)||void 0===p||p.activate());(this.state.panelType||(null==u?void 0:u.state.collapsible))&&function(e){e.push({text:"",type:"divider"}),e.push({text:"Visualization",type:"group"})}(o),(null==u?void 0:u.state.collapsible)&&function(e,t){const n=r.jh.getAncestor(t,r.Eb);e.push({text:n.state.collapsed?"Expand":"Collapse",iconClassName:n.state.collapsed?"table-collapse-all":"table-expand-all",onClick:()=>{const e=n.state.collapsed?"Expand":"Collapse",a=r.jh.getAncestor(t,r.G1);(0,P.Zb)(a,e),n.setState({collapsed:!n.state.collapsed}),(0,d.IW)("collapsed",e)}})}(o,this),this.state.panelType&&function(e,t){e.push({text:"histogram"!==t.state.panelType?"Histogram":"Time series",iconClassName:"histogram"!==t.state.panelType?"graph-bar":"chart-line",onClick:()=>{const e=r.jh.getAncestor(t,r.xK),n=r.jh.getAncestor(t,r.Eb).clone(),a=r.jh.getData(t).clone(),i=t.clone(),s=Array.isArray(n.state.headerActions)?n.state.headerActions.map((e=>e.clone())):n.state.headerActions;let l;l="histogram"!==t.state.panelType?r.d0.timeseries().setOverrides(E.jC):r.d0.histogram(),e.setState({body:l.setMenu(i).setTitle(n.state.title).setHeaderActions(s).setData(a).build()});const o="timeseries"!==t.state.panelType?"timeseries":"histogram";(0,d.IW)("panelType",o),i.setState({panelType:o});const u=(0,c.UX)(e,(e=>e instanceof C.E),C.E);u&&u.rebuildAvgFields(),z(o)}})}(o,this),this.setState({body:new r.Lw({items:o})});var g=this;this._subs.add(null===(l=this.state.investigationsButton)||void 0===l?void 0:l.subscribeToState(T((function*(){yield function(e){return Q.apply(this,arguments)}(g)}))))}))}}D(R,"Component",(({model:e})=>{const{body:t}=e.useState();return t?i().createElement(t.Component,{model:t}):i().createElement(i().Fragment,null)}));const V=e=>{const t=r.jh.getAncestor(e,f.P),n=r.jh.getData(e);let a=n instanceof r.dt?n:(0,c.oh)(n)[0];if(!a){const t=r.jh.findObject(e,(e=>e instanceof k.u||e instanceof j.u));if(t){const e=r.jh.getData(t);a=e instanceof r.dt?e:(0,c.oh)(e)[0]}else v.v.error(new Error("Unable to locate query runner!"),{msg:"PanelMenu - getExploreLink: Unable to locate query runner!"})}const i=a.state.queries[0].expr,s=r.jh.interpolate(e,i);return h(t,s)},W=()=>{(0,u.EE)(u.NO.all,u.ir.all.open_in_explore_menu_clicked)},z=e=>{(0,u.EE)(u.NO.service_details,u.ir.service_details.change_viz_type,{newVizType:e})},H=function(){var e=T((function*(e){const t=m.R6.MetricInvestigation,n=e.state.context;if(void 0!==l.getPluginLinkExtensions){return(0,l.getPluginLinkExtensions)({extensionPointId:t,context:n}).extensions[0]}if(void 0!==l.getObservablePluginLinks){return(yield(0,L.firstValueFrom)((0,l.getObservablePluginLinks)({extensionPointId:t,context:n})))[0]}}));return function(t){return e.apply(this,arguments)}}();function Q(){return(Q=T((function*(e){const t=e.state.investigationsButton;if(t){var n;const o=yield H(t);var r;const c=null!==(r=null===(n=e.state.body)||void 0===n?void 0:n.state.items)&&void 0!==r?r:[],u=c.find((e=>e.text===$));var a,i,s,l;if(o)if(u){if(u)null===(a=e.state.body)||void 0===a||a.setItems(c.filter((e=>!1===[I,B,$].includes(e.text))))}else null===(i=e.state.body)||void 0===i||i.addItem({text:I,type:"divider"}),null===(s=e.state.body)||void 0===s||s.addItem({text:B,type:"group"}),null===(l=e.state.body)||void 0===l||l.addItem({text:$,iconClassName:"plus-square",onClick:e=>o.onClick&&o.onClick(e)})}}))).apply(this,arguments)}const K=e=>({panelWrapper:(0,F.css)({width:"100%",height:"100%",label:"panel-wrapper",position:"absolute",display:"flex"})})},9405:(e,t,n)=>{n.d(t,{Of:()=>S,Qt:()=>k,XI:()=>O,hi:()=>x,oR:()=>L,ts:()=>j,u7:()=>C,vn:()=>P});var r=n(5959),a=n.n(r),i=n(7781),s=n(9736),l=n(4509),o=n(20),c=n(7709),u=n(7352),d=n(376),p=n(5553),g=n(6854),h=n(696),f=n(1532),v=n(5953),m=n(8502),b=n(7478);function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class S extends i.BusEventBase{constructor(e,t,n,r){super(),y(this,"source",void 0),y(this,"operator",void 0),y(this,"key",void 0),y(this,"value",void 0),this.source=e,this.operator=t,this.key=n,this.value=r}}y(S,"type","add-filter");class w extends i.BusEventBase{constructor(e,t,n){super(),y(this,"key",void 0),y(this,"value",void 0),y(this,"operator",void 0),this.key=e,this.value=t,this.operator=n}}function O(e,t,n){const r="="===e.operator?"include":"exclude";k(e.key,e.value,r,t,n)}function x(e,t,n,r,a){const i=T(n,e,t);let s=i.state.filters.filter((t=>{const i=(0,p.z2)(n,t);return r&&a?!(t.key===e&&i.value===r&&t.operator===a):r?!(t.key===e&&i.value===r):a?!(t.key===e&&t.operator===a):!(t.key===e)}));t.publishEvent(new w(e,r,a),!0),i.setState({filters:s})}y(w,"type","add-filter");const E=e=>e===g.w7.gt||e===g.w7.gte?"greater":e===g.w7.lt||e===g.w7.lte?"lesser":void 0;function C(e,t,n,r){r||(r=F(e,t));const a=T(r,e,t),i=n?E(n):void 0;let s=a.state.filters.filter((t=>!(t.key===e&&(E(t.operator)===i||t.operator===g.w7.NotEqual))));a.setState({filters:s})}function P(e,t,n,r,a){const i=E(n);a||(a=F(e,r));const s=T(a,e,r);let l;a===o.mB&&(l=JSON.stringify({value:t,parser:(0,d.Ri)(e,r)}));let c=s.state.filters.filter((t=>!(t.key===e&&(E(t.operator)===i||t.operator===g.w7.NotEqual))));c=[...c,{key:e,operator:n,value:l||t,valueLabels:[t]}],s.setState({filters:c}),r.publishEvent(new S("filterButton",n,e,t),!0)}function k(e,t,n,r,a){(0,b.bN)(),a===o.MB&&(0,h._J)(e,t,r);const i=T(a,e,r);let s,l=t;a===o.mB?s=JSON.stringify({value:t,parser:(0,d.Ri)(e,r)}):a===o._Y&&"exclude"===n&&(l=`!${t}`);let c=i.state.filters.filter((r=>{const i=(0,p.z2)(a,r);return"include"===n?!(r.key===e&&r.operator===g.w7.NotEqual):"exclude"===n?!(r.key===e&&r.operator===g.w7.Equal):!(r.key===e&&i.value===t)}));const u=c.length!==i.state.filters.length;("include"===n||"exclude"===n||!u&&"toggle"===n)&&(c=[...c,{key:e,operator:"exclude"===n?g.w7.NotEqual:g.w7.Equal,value:s||t,valueLabels:[l]}]),i.setState({filters:c}),r.publishEvent(new S("filterButton",n,e,t),!0)}function j(e,t){return e===o.e4?o._Y:t}function F(e,t){var n,r;return(null===(r=(0,u.TG)(t))||void 0===r||null===(n=r.fields)||void 0===n?void 0:n.find((t=>t.name===e)))?o.MB:o.mB}class L extends s.Bs{onActivate(){const e=_(this.state.frame);if(e){const t=T(this.state.variableName,e.name,this);this.setFilterState(t),this._subs.add(t.subscribeToState(((e,n)=>{(0,f.B)(e.filters,n.filters)||this.setFilterState(t)})))}}setFilterState(e){const t=_(this.state.frame);if(!t)return void this.setState({isIncluded:!1,isExcluded:!1});const n=e.state.filters.find((e=>{const n=(0,m.OH)(t),r=(0,p.z2)(n?o._P:o.mB,e);return e.key===t.name&&r.value===t.value}));n?this.setState({isIncluded:n.operator===g.w7.Equal,isExcluded:n.operator===g.w7.NotEqual}):this.setState({isIncluded:!1,isExcluded:!1})}constructor(e){super(e),y(this,"onClick",(e=>{const t=_(this.state.frame);if(!t)return;k(t.name,t.value,e,this,this.state.variableName);const n=T(this.state.variableName,t.name,this);(0,l.EE)(l.NO.service_details,l.ir.service_details.add_to_filters_in_breakdown_clicked,{filterType:this.state.variableName,key:t.name,action:e,filtersLength:(null==n?void 0:n.state.filters.length)||0})})),this.addActivationHandler(this.onActivate.bind(this))}}y(L,"Component",(({model:e})=>{const{hideExclude:t,isExcluded:n,isIncluded:r}=e.useState();return a().createElement(c.F,{buttonFill:"outline",isIncluded:null!=r&&r,isExcluded:null!=n&&n,onInclude:()=>e.onClick("include"),onClear:()=>e.onClick("clear"),onExclude:()=>e.onClick("exclude"),hideExclude:t})}));const _=e=>{var t,n;const r=null!==(n=null===(t=e.fields[1])||void 0===t?void 0:t.labels)&&void 0!==n?n:{};if(1!==Object.keys(r).length)return void v.v.warn("getFilter: unexpected empty labels");const a=Object.keys(r)[0];return{name:a,value:r[a]}},T=(e,t,n)=>e===o.mB||e===o._P?(0,p.YS)(n):(0,p.bY)(j(t,e),n)},8313:(e,t,n)=>{n.d(t,{G:()=>f,x:()=>g});var r=n(9736),a=n(5959),i=n.n(a),s=n(158),l=n(9284),o=n(8072),c=n(6830),u=n(7781),d=n(5953);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class g extends u.BusEventBase{}p(g,"type","breakdown-search-reset");const h={};class f extends r.Bs{filterValues(e){const t=r.jh.findObject(this,(e=>e instanceof o.O||e instanceof c.J6));if(t instanceof o.O||t instanceof c.J6){h[this.cacheKey]=e;const n=r.jh.findDescendents(t,s.h);null==n||n.forEach((t=>{t.state.body.isActive&&t.filterByString(e)}))}else d.v.warn("unable to find Breakdown scene",{typeofBody:typeof t,filter:e})}constructor(e){var t;super({filter:null!==(t=h[e])&&void 0!==t?t:""}),p(this,"cacheKey",void 0),p(this,"onValueFilterChange",(e=>{this.setState({filter:e.target.value}),this.filterValues(e.target.value)})),p(this,"clearValueFilter",(()=>{this.setState({filter:""}),this.filterValues("")})),p(this,"reset",(()=>{this.setState({filter:""}),h[this.cacheKey]=""})),this.cacheKey=e}}p(f,"Component",(({model:e})=>{const{filter:t}=e.useState();return i().createElement(l.D,{value:t,onChange:e.onValueFilterChange,onClear:e.clearValueFilter,placeholder:"Search for value"})}))},158:(e,t,n)=>{n.d(t,{h:()=>y});var r=n(5959),a=n.n(r),i=n(7781),s=n(9736),l=n(2601),o=n(9193),c=n(1049),u=n(2007),d=n(6089),p=n(8313),g=n(1269),h=n(6081),f=n(5865),v=n(5953);function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}class y extends s.Bs{performRepeat(e){const t=[],n=(0,l.sortSeries)(e.series,this.sortBy,this.direction);for(let e=0;ee.isActive&&e.state.key===f.s$));if(n[0]instanceof s.G1){const t=s.jh.findDescendents(n[0],s.Eb)[0];t instanceof s.Eb?t.setState({$data:new s.Es({transformations:[()=>{return t=e[0],e=>e.pipe((0,g.map)((e=>{if(!t||!t.length)return e;let n=[];return e.forEach((e=>{const r=(0,c.ee)(e);t.includes(r)&&n.push(e)})),n})));var t}]})}):v.v.warn("filterSummaryChart: VizPanel not found",{typeofPanel:typeof t})}else v.v.warn("filterSummaryChart: SceneFlexItem not found",{typeofGraphParent:typeof n})}}constructor(e){var{sortBy:t,direction:n,getFilter:r}=e;super(b(e,["sortBy","direction","getFilter"])),m(this,"unfilteredChildren",[]),m(this,"sortBy",void 0),m(this,"direction",void 0),m(this,"sortedSeries",[]),m(this,"getFilter",void 0),m(this,"sort",((e,t)=>{const n=s.jh.getData(this);this.sortBy=e,this.direction=t,n.state.data&&this.performRepeat(n.state.data)})),m(this,"iterateFrames",(e=>{if(s.jh.getData(this).state.data)for(let t=0;t{let t=[];this.iterateFrames(((e,n)=>{const r=(0,c.ee)(e[n]);t.push(r)})),(0,o.X)(t,e,(e=>{e&&e[0]?this.filterFrames((t=>{const n=(0,c.ee)(t);return e[0].includes(n)})):this.filterFrames((()=>!0)),this.filterSummaryChart(e)}))})),m(this,"filterFrames",(e=>{const t=[];if(this.iterateFrames(((n,r)=>{e(n[r])&&t.push(this.unfilteredChildren[r])})),0===t.length){const e=this.getFilter();this.state.body.setState({children:[S(e,this.clearFilter)]})}else this.state.body.setState({children:t})})),m(this,"clearFilter",(()=>{this.publishEvent(new p.x,!0)})),this.sortBy=t,this.direction=n,this.getFilter=r,this.addActivationHandler((()=>{const e=s.jh.getData(this);this._subs.add(e.subscribeToState(((e,t)=>{var n,r,a,s;((null===(n=e.data)||void 0===n?void 0:n.state)===i.LoadingState.Done||(null===(r=e.data)||void 0===r?void 0:r.state)===i.LoadingState.Streaming&&e.data.series.length>(null!==(s=null===(a=t.data)||void 0===a?void 0:a.series.length)&&void 0!==s?s:0))&&this.performRepeat(e.data)}))),e.state.data&&this.performRepeat(e.state.data)}))}}function S(e,t){return new s.G1({direction:"row",children:[new s.vA({body:new s.dM({reactNode:a().createElement("div",{className:w.alertContainer},a().createElement(u.Alert,{title:"",severity:"info",className:w.noResultsAlert},"No values found matching “",e,"”",a().createElement(u.Button,{className:w.clearButton,onClick:t},"Clear filter")))})})]})}m(y,"Component",(({model:e})=>{const{body:t}=e.useState();return a().createElement(t.Component,{model:t})}));const w={alertContainer:(0,d.css)({flexGrow:1,display:"flex",justifyContent:"center",alignItems:"center"}),noResultsAlert:(0,d.css)({minWidth:"30vw",flexGrow:0}),clearButton:(0,d.css)({marginLeft:"1.5rem"})}},713:(e,t,n)=>{n.d(t,{a:()=>c});var r=n(9736),a=n(7191),i=n(2007),s=n(5959),l=n.n(s),o=n(6830);class c extends r.Bs{static Component({model:e}){const{type:t}=e.useState();return l().createElement(a.R,null,l().createElement(i.Alert,{title:"",severity:"warning"},"We did not find any ",t," for the given timerange. Please"," ",l().createElement("a",{className:o.ZI.link,href:"https://forms.gle/1sYWCTPvD72T1dPH9",target:"_blank",rel:"noopener noreferrer"},"let us know")," ","if you think this is a mistake."))}}},7243:(e,t,n)=>{n.d(t,{f:()=>p,u:()=>d});var r=n(6089),a=n(5959),i=n.n(a),s=n(2007),l=n(3571),o=n(7985);function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}function d({options:e,value:t,onChange:n,label:r}){const l=(0,s.useStyles2)(g),[o,c]=(0,a.useState)(!1),u=e.map((e=>({label:e.label,value:e.value})));return i().createElement(s.InlineField,{className:l.selectWrapper,label:r},i().createElement(s.Select,{options:u,value:t,onOpenMenu:()=>c(!0),onCloseMenu:()=>c(!1),onChange:e=>n(e.value),className:l.select,prefix:o?void 0:i().createElement(s.Icon,{name:"search"})}))}function p({options:e,value:t,onChange:n,label:r,selectOption:d,isLoading:p,initialFilter:h}){var f;const v=(0,s.useStyles2)(g),[m,b]=(0,a.useState)(!1),[y,S]=(0,a.useState)(h),w=e.map((e=>({label:e.label,value:e.value}))),O=y&&t&&(null===(f=y.value)||void 0===f?void 0:f.includes(t))?[y,...w]:w,x=null==O?void 0:O.find((e=>e.value===t));return i().createElement(s.InlineField,{className:v.serviceSceneSelectWrapper,label:r},i().createElement(s.Select,{isLoading:p,"data-testid":l.b.exploreServiceSearch.search,placeholder:"Search values",options:O,isClearable:!0,value:t,onOpenMenu:()=>b(!0),onCloseMenu:()=>b(!1),allowCustomValue:!0,prefix:m||(null==x?void 0:x.__isNew__)?void 0:i().createElement(s.Icon,{name:"search"}),onChange:(e,t)=>(null==e?void 0:e.__isNew__)||(null==e?void 0:e.icon)?(S(u(function(e){for(var t=1;t{const r=t;return"input-change"===r.action?n(e):"menu-close"===r.action&&r.prevInputValue?(S({value:(0,o.vC)(r.prevInputValue),label:r.prevInputValue,icon:"filter",__isNew__:!0}),n(r.prevInputValue)):void 0}}))}function g(e){return{input:(0,r.css)({marginBottom:0}),select:(0,r.css)({maxWidth:e.spacing(64),minWidth:e.spacing(20)}),selectWrapper:(0,r.css)({label:"field-selector-select-wrapper",maxWidth:e.spacing(62.5),minWidth:e.spacing(20),marginRight:e.spacing.x1,marginBottom:0}),serviceSceneSelectWrapper:(0,r.css)({label:"service-select-wrapper",maxWidth:e.spacing(62.5),minWidth:e.spacing(20),marginRight:e.spacing.x1,marginBottom:0})}}},2969:(e,t,n)=>{n.d(t,{u:()=>F});var r,a,i,s=n(9736),l=n(7985),o=n(4351),c=n(7781),u=n(6081),d=n(1475),p=n(158),g=n(2007),h=n(376),f=n(1049),v=n(20),m=n(5959),b=n.n(m),y=n(6830),S=n(7352),w=n(2601),O=n(5553),x=n(5700),E=n(5865),C=n(1532),P=n(5953);function k(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function j(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){k(i,r,a,s,l,"next",e)}function l(e){k(i,r,a,s,l,"throw",e)}s(void 0)}))}}class F extends s.Bs{static Selector({model:e}){const{body:t}=e.useState();return t instanceof u.U?b().createElement(b().Fragment,null,t&&b().createElement(u.U.Selector,{model:t})):b().createElement(b().Fragment,null)}getTagKey(){const e=(0,O.Hj)(this);return String(e.state.value)}onActivate(){var e;const t=this.buildQuery();this.setState({body:this.build(t),$data:this.buildQueryRunner()}),this._subs.add(null===(e=this.state.$data)||void 0===e?void 0:e.subscribeToState((e=>{this.onValuesDataQueryChange(e,t)}))),this.runQuery(),this.setSubscriptions()}buildQueryRunner(){const e=this.buildQuery();return(0,d.rS)([e],{runQueriesMode:"manual"})}buildQuery(){const e=this.getTagKey(),t=(0,O.ir)(this),n=(0,S.rD)(this),r=(0,h.Jl)(e,t,n),{variableName:a,filterExpression:i}=this.removeFieldLabelFromVariableInterpolation(),o=s.jh.interpolate(this,r.replace(`\${${a}}`,i));return(0,l.l)(o,{legendFormat:`{{${e}}}`,refId:e})}setSubscriptions(){this._subs.add(s.jh.getTimeRange(this).subscribeToState((()=>{this.runQuery()}))),this._subs.add((0,O.Gk)(this).subscribeToState(((e,t)=>{(0,C.B)(e.filters,t.filters)||this.runQuery()}))),this._subs.add((0,O.Ku)(this).subscribeToState(((e,t)=>{e.value!==t.value&&this.runQuery()}))),this._subs.add((0,O.cR)(this).subscribeToState(((e,t)=>{(0,C.B)(e.filters,t.filters)||this.runQuery()}))),this._subs.add((0,O.iw)(this).subscribeToState(((e,t)=>{(0,C.B)(e.filters,t.filters)||this.runQuery()})));const{parser:e}=this.getParserForThisField();"structuredMetadata"!==e?this.setFieldParserSubscriptions():this.setMetadataParserSubscriptions()}setMetadataParserSubscriptions(){const e=this.getTagKey();var t=this;this._subs.add((0,O.ir)(this).subscribeToState(function(){var e=j((function*(e,n){(0,C.B)(e.filters,n.filters)||t.runQuery()}));return function(t,n){return e.apply(this,arguments)}}()));var n=this;this._subs.add((0,O.oY)(this).subscribeToState(function(){var t=j((function*(t,r){(0,C.B)(t.filters.filter((t=>t.key!==e)),r.filters.filter((t=>t.key!==e)))||n.runQuery()}));return function(e,n){return t.apply(this,arguments)}}()))}setFieldParserSubscriptions(){const e=this.getTagKey();var t=this;this._subs.add((0,O.oY)(this).subscribeToState(function(){var e=j((function*(e,n){(0,C.B)(e.filters,n.filters)||t.runQuery()}));return function(t,n){return e.apply(this,arguments)}}()));var n=this;this._subs.add((0,O.ir)(this).subscribeToState(function(){var t=j((function*(t,r){(0,C.B)(t.filters.filter((t=>t.key!==e)),r.filters.filter((t=>t.key!==e)))||n.runQuery()}));return function(e,n){return t.apply(this,arguments)}}()))}rebuildQuery(){var e;const t=this.buildQuery();null===(e=this.getSceneQueryRunner())||void 0===e||e.setState({queries:[t]})}runQuery(){this.rebuildQuery();const e=this.getSceneQueryRunner();null==e||e.runQueries()}getSceneQueryRunner(){if(this.state.$data){const e=s.jh.findDescendents(this.state.$data,s.dt);if(1!==e.length){const e=new Error("Unable to find query runner in value breakdown!");throw P.v.error(e,{msg:"FieldValuesBreakdownScene: Unable to find query runner in value breakdown!"}),e}return e[0]}P.v.warn("FieldValuesBreakdownScene: Query is attempting to execute, but query runner is undefined!")}removeFieldLabelFromVariableInterpolation(){const e=this.getTagKey();let t,n;if("structuredMetadata"===this.getQueryParser()){const r=(0,O.oY)(this);n=v._P,t=(0,l.E3)(r.state.filters,[e])}else{n=v.mB;const r=(0,O.ir)(this);t=(0,l.ZX)(r.state.filters,[e])}return{filterExpression:t,variableName:n}}onValuesDataQueryChange(e,t){var n,r;(null===(n=e.data)||void 0===n?void 0:n.state)===c.LoadingState.Done&&this.state.body instanceof s.dM&&this.setState({body:this.build(t)}),(null===(r=e.data)||void 0===r?void 0:r.state)===c.LoadingState.Error&&this.setErrorState(e.data.errors)}setErrorState(e){this.setState({body:new s.dM({reactNode:b().createElement(g.Alert,{title:"Something went wrong with your request",severity:"error"},null==e?void 0:e.map(((e,t)=>b().createElement("div",{key:t},e.status&&b().createElement(b().Fragment,null,b().createElement("strong",null,"Status"),": ",e.status," ",b().createElement("br",null)),e.message&&b().createElement(b().Fragment,null,b().createElement("strong",null,"Message"),": ",e.message," ",b().createElement("br",null)),e.traceId&&b().createElement(b().Fragment,null,b().createElement("strong",null,"TraceId"),": ",e.traceId)))))})})}build(e){const{optionValue:t,parser:n}=this.getParserForThisField(),{sortBy:r,direction:a}=(0,o.vs)("fields",w.DEFAULT_SORT_BY,"desc"),i=s.jh.getAncestor(this,y.J6),l=()=>{var e;return null!==(e=i.state.search.state.filter)&&void 0!==e?e:""};return new u.U({options:[{value:"single",label:"Single"},{value:"grid",label:"Grid"},{value:"rows",label:"Rows"}],active:"grid",layouts:[new s.G1({direction:"column",children:[new s.dM({reactNode:b().createElement(y.J6.LabelsMenu,{model:i})}),new s.vA({minHeight:300,body:s.d0.timeseries().setTitle(t).setShowMenuAlways(!0).setMenu(new x.GD({})).build()})]}),new s.G1({direction:"column",children:[new s.dM({reactNode:b().createElement(y.J6.LabelsMenu,{model:i})}),new E.s7({title:t,type:"field",tagKey:this.getTagKey()}),new s.dM({reactNode:b().createElement(y.J6.ValuesMenu,{model:i})}),new p.h({body:new s.gF({templateColumns:y.OK,autoRows:"200px",children:[new s.vA({body:new s.dM({reactNode:b().createElement(g.LoadingPlaceholder,{text:"Loading..."})})})],isLazy:!0}),getLayoutChild:(0,h.Zp)(f.ee,(null==e?void 0:e.expr.includes("count_over_time"))?g.DrawStyle.Bars:g.DrawStyle.Line,"structuredMetadata"===n?v._P:v.mB,s.jh.getAncestor(this,y.J6).state.sort,t),sortBy:r,direction:a,getFilter:l})]}),new s.G1({direction:"column",children:[new s.dM({reactNode:b().createElement(y.J6.LabelsMenu,{model:i})}),new E.s7({title:t,type:"field",tagKey:this.getTagKey()}),new s.dM({reactNode:b().createElement(y.J6.ValuesMenu,{model:i})}),new p.h({body:new s.gF({templateColumns:"1fr",autoRows:"200px",children:[new s.vA({body:new s.dM({reactNode:b().createElement(g.LoadingPlaceholder,{text:"Loading..."})})})],isLazy:!0}),getLayoutChild:(0,h.Zp)(f.ee,(null==e?void 0:e.expr.includes("count_over_time"))?g.DrawStyle.Bars:g.DrawStyle.Line,"structuredMetadata"===n?v._P:v.mB,s.jh.getAncestor(this,y.J6).state.sort,t),sortBy:r,direction:a,getFilter:l})]})]})}getParserForThisField(){const e=(0,O.Hj)(this),t=String(e.state.value);return{optionValue:t,parser:(0,h.Ri)(t,this)}}getParserForFields(){return(0,h.k$)((0,O.ir)(this))}getQueryParser(){const{parser:e}=this.getParserForThisField(),t=this.getParserForFields();return e===t?t:void 0===e?"mixed":"structuredMetadata"===e?t:"structuredMetadata"===t?e:"mixed"}constructor(e){super(e),this.addActivationHandler(this.onActivate.bind(this))}}i=({model:e})=>{const{body:t}=e.useState(),n=(0,g.useStyles2)(x.K_);return t?b().createElement("span",{className:n.panelWrapper},t&&b().createElement(t.Component,{model:t})):b().createElement(g.LoadingPlaceholder,{text:"Loading..."})},(a="Component")in(r=F)?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i},7813:(e,t,n)=>{n.d(t,{E:()=>x});var r=n(9736),a=n(20),i=n(7985),s=n(1475),l=n(2007),o=n(6081),c=n(6830),u=n(7352),d=n(5959),p=n.n(d),g=n(2606),h=n(9683),f=n(7781),v=n(376),m=n(5553),b=n(5700),y=n(5953),S=n(4351),w=n(4059);function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class x extends r.Bs{updateChildren(e,t=void 0){var n;const a=(0,u.UO)(e),i=(0,u.nU)(e),s=(0,u.dB)(e),l=this.calculateCardinalityMap(e);null===(n=this.state.body)||void 0===n||n.state.layouts.forEach((e=>{if(e instanceof r.gF){const n=new Set(null==i?void 0:i.values),o=e.state.children;for(let l=0;le));o.push(...this.buildChildren(c)),o.sort(this.sortChildren(l)),o.map((e=>{this.subscribeToPanel(e)})),e.setState({children:o})}else y.v.warn("Layout is not SceneCSSGridLayout")}))}sortChildren(e){return(t,n)=>{const r=t.state.body,a=n.state.body;var i;const s=null!==(i=e.get(r.state.title))&&void 0!==i?i:0;var l;return(null!==(l=e.get(a.state.title))&&void 0!==l?l:0)-s}}calculateCardinalityMap(e){const t=(0,u.UO)(e),n=new Map;if(null==t?void 0:t.length)for(let e=0;e<(null==t?void 0:t.length);e++){const r=t.fields[0].values[e],a=t.fields[1].values[e];n.set(r,a)}return n}onActivate(){var e;this.setState({body:this.build()});const t=r.jh.getAncestor(this,u.Mn);void 0===t.state.fieldsCount&&this.updateFieldCount(),this._subs.add(null===(e=t.state.$detectedFieldsData)||void 0===e?void 0:e.subscribeToState(this.onDetectedFieldsChange)),this._subs.add(this.subscribeToFieldsVar())}subscribeToFieldsVar(){return(0,m.ir)(this).subscribeToState(((e,t)=>{const n=r.jh.getAncestor(this,u.Mn),a=e.filters.map((e=>(0,m.bu)(e).parser)),i=t.filters.map((e=>(0,m.bu)(e).parser)),s=(0,v.Qg)(a);if(s!==(0,v.Qg)(i)){var l;const e=null===(l=n.state.$detectedFieldsData)||void 0===l?void 0:l.state;e&&this.updateChildren(e,s)}}))}build(){var e;const t=(0,m.Hj)(this).state.options.map((e=>String(e.value)));r.jh.getAncestor(this,c.J6).state.search.reset();const n=this.buildChildren(t),a=r.jh.getAncestor(this,u.Mn),i=this.calculateCardinalityMap(null===(e=a.state.$detectedFieldsData)||void 0===e?void 0:e.state);n.sort(this.sortChildren(i));const s=n.map((e=>e.clone()));return[...n,...s].map((e=>{this.subscribeToPanel(e)})),new o.U({options:[{value:"grid",label:"Grid"},{value:"rows",label:"Rows"}],active:"grid",layouts:[new r.gF({templateColumns:c.OK,autoRows:"200px",children:n,isLazy:!0}),new r.gF({templateColumns:"1fr",autoRows:"200px",children:s,isLazy:!0})]})}subscribeToPanel(e){const t=e.state.body;var n;t&&this._subs.add(null==t||null===(n=t.state.$data)||void 0===n?void 0:n.getResultsStream().subscribe((t=>{t.data.errors&&t.data.errors.length>0&&(e.setState({isHidden:!0}),this.updateFieldCount())})))}rebuildAvgFields(){const e=(0,u.rD)(this),t=this.getActiveGridLayouts(),n=[];var a;const i=null!==(a=(0,S.ex)("panelType",[b.ls.histogram,b.ls.timeseries]))&&void 0!==a?a:b.ls.timeseries;null==t||t.state.children.forEach((t=>{if(t instanceof r.xK&&!t.state.isHidden){const a=r.jh.findDescendents(t,r.Eb);if(a.length){const r=a[0].state.title,s=(0,v.ph)(r,e);if((0,v.JI)(s)){const t=this.buildChild(r,e,i);t&&n.push(t)}else n.push(t)}}})),n.length&&(null==t||t.setState({children:n}))}buildChildren(e){const t=[],n=(0,u.rD)(this);var r;const i=null!==(r=(0,S.ex)("panelType",[b.ls.timeseries,b.ls.histogram]))&&void 0!==r?r:b.ls.timeseries;for(const r of e){if(r===a.To||!r)continue;const e=this.buildChild(r,n,i);e&&t.push(e)}return t}buildChild(e,t,n){if(e===a.To||!e)return;const i=(0,v.ph)(e,t),o=this.getQueryRunnerForPanel(e,t,i);let c;const u=[];(0,v.JI)(i)?(c="histogram"===n?r.d0.histogram():r.d0.timeseries(),c.setTitle(e).setData(o).setMenu(new b.GD({investigationOptions:{labelName:e},panelType:n})),u.push(new g.X({labelName:String(e),hideValueDrilldown:!0,fieldType:h._J.field}))):(c=r.d0.timeseries().setTitle(e).setData(o).setMenu(new b.GD({investigationOptions:{labelName:e}})).setCustomFieldConfig("stacking",{mode:l.StackingMode.Normal}).setCustomFieldConfig("fillOpacity",100).setCustomFieldConfig("lineWidth",0).setCustomFieldConfig("pointSize",0).setCustomFieldConfig("drawStyle",l.DrawStyle.Bars).setOverrides(s.jC),u.push(new g.X({labelName:String(e),fieldType:h._J.field}))),c.setHeaderActions(u),c.setSeriesLimit(w.l),c.setShowMenuAlways(!0);const d=c.build();return new r.xK({body:d})}getQueryRunnerForPanel(e,t,n){const r=(0,m.ir)(this),a=(0,v.Jl)(e,r,t),l=(0,i.l)(a,{legendFormat:(0,v.JI)(n)?e:`{{${e}}}`,refId:e});return(0,s.rS)([l])}getActiveGridLayouts(){var e,t,n;return null!==(n=null===(e=this.state.body)||void 0===e?void 0:e.state.layouts.find((e=>e.isActive)))&&void 0!==n?n:null===(t=this.state.body)||void 0===t?void 0:t.state.layouts[0]}updateFieldCount(){var e,t;const n=this.getActiveGridLayouts(),a=null==n?void 0:n.state.children,i=null==a?void 0:a.filter((e=>!e.state.isHidden));var s;null===(e=(t=r.jh.getAncestor(this,c.J6).state).changeFieldCount)||void 0===e||e.call(t,null!==(s=null==i?void 0:i.length)&&void 0!==s?s:0)}static Selector({model:e}){const{body:t}=e.useState();return p().createElement(p().Fragment,null,t&&p().createElement(o.U.Selector,{model:t}))}constructor(e){super(e),O(this,"onDetectedFieldsChange",(e=>{var t;(null===(t=e.data)||void 0===t?void 0:t.state)===f.LoadingState.Done&&this.updateChildren(e)})),this.addActivationHandler(this.onActivate.bind(this))}}O(x,"Component",(({model:e})=>{const{body:t}=e.useState(),n=(0,l.useStyles2)(b.K_);return t?p().createElement("span",{className:n.panelWrapper},t&&p().createElement(t.Component,{model:t})):p().createElement(l.LoadingPlaceholder,{text:"Loading..."})}))},6830:(e,t,n)=>{n.d(t,{J6:()=>N,OK:()=>D,ZI:()=>$});var r=n(6089),a=n(5959),i=n.n(a),s=n(7781),l=n(9736),o=n(2007),c=n(4509),u=n(4351),d=n(20),p=n(1532),g=n(4702),h=n(7478),f=n(9683),v=n(2601),m=n(2661),b=n(7352),y=n(8313),S=n(158),w=n(7813),O=n(7243),x=n(2969),E=n(6081),C=n(1049),P=n(5659),k=n(8502),j=n(713),F=n(5553),L=n(6779),_=n(5548);function T(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const D="repeat(auto-fit, minmax(400px, 1fr))";class N extends l.Bs{onActivate(){var e,t,n;const r=(0,F.Hj)(this),a=l.jh.getAncestor(this,b.Mn);this.setState({loading:(null===(t=a.state.$detectedLabelsData)||void 0===t||null===(e=t.state.data)||void 0===e?void 0:e.state)!==s.LoadingState.Done}),this._subs.add(this.subscribeToEvent(y.x,(()=>{this.state.search.clearValueFilter()}))),this._subs.add(this.subscribeToEvent(C.gf,this.handleSortByChange)),this._subs.add(r.subscribeToState(this.variableChanged)),this._subs.add((0,F.cR)(this).subscribeToState(((e,t)=>{const n=(0,F.Hj)(this);let{labelName:r}=(0,f.W6)();const a=e.filters.find((e=>e.key===r)),i=t.filters.find((e=>e.key===r));n.state.value===d.To&&a!==i&&this.setState({loading:!0,body:void 0})}))),this._subs.add(null===(n=a.state.$detectedFieldsData)||void 0===n?void 0:n.subscribeToState(((e,t)=>{var n,r,a;(null===(n=e.data)||void 0===n?void 0:n.state)===s.LoadingState.Done&&((null===(r=e.data.series)||void 0===r?void 0:r[0])&&this.updateOptions(null===(a=e.data.series)||void 0===a?void 0:a[0]))})));const i=(0,b.rD)(this);i&&this.updateOptions(i),(0,f.NX)(this)}updateOptions(e){if(!e||!e.length){const e=l.jh.getAncestor(this,m.P);let r;var t,n;if((0,_.mE)(e).length>1)null===(t=(n=this.state).changeFieldCount)||void 0===t||t.call(n,0),r=new L.W({clearCallback:()=>(0,_.rA)(this)});else r=new j.a({type:"fields"});return void this.setState({loading:!1,body:r})}const r=l.jh.getAncestor(this,b.Mn);var a;(0,F.Hj)(this).setState({options:(0,k.rd)(e.fields[0].values.map((e=>String(e)))),loading:!1,value:null!==(a=r.state.drillDownLabel)&&void 0!==a?a:d.To}),this.setState({loading:!1})}updateBody(e){const t=(0,F.Hj)(this);if(!t.state.options||!t.state.options.length)return;const n={};if(t.state.options&&t.state.options.length<=1){const e=l.jh.getAncestor(this,m.P);var r,a;if((0,_.mE)(e).length>1)null===(r=(a=this.state).changeFieldCount)||void 0===r||r.call(a,0),n.body=new L.W({clearCallback:()=>(0,_.rA)(this)});else n.body=new j.a({type:"fields"})}else e.value===d.To&&this.state.body instanceof x.u?n.body=new w.E({}):e.value!==d.To&&this.state.body instanceof w.E?n.body=new x.u({}):(void 0===this.state.body||this.state.body instanceof j.a||this.state.body instanceof L.W)&&(n.body=e.value===d.To?new w.E({}):new x.u({}));this.setState(n)}constructor(e){var t,n,r,a;super(function(e){for(var t=1;t{(e.value!==t.value||!(0,p.B)(e.options,t.options)||void 0===this.state.body||this.state.body instanceof j.a||this.state.body instanceof L.W)&&this.updateBody(e)})),T(this,"handleSortByChange",(e=>{if("fields"!==e.target)return;const t=this.state.body;var n;t instanceof x.u&&t.state.body instanceof E.U&&(null===(n=t.state.body)||void 0===n||n.state.layouts.forEach((n=>{l.jh.findDescendents(t,S.h).forEach((t=>t.sort(e.sortBy,e.direction)))})));(0,c.EE)(c.NO.service_details,c.ir.service_details.value_breakdown_sort_change,{target:"fields",criteria:e.sortBy,direction:e.direction})})),T(this,"onFieldSelectorChange",(e=>{if(!e)return;const t=(0,F.Hj)(this),{sortBy:n,direction:r}=(0,u.vs)("fields",v.DEFAULT_SORT_BY,"desc");(0,c.EE)(c.NO.service_details,c.ir.service_details.select_field_in_breakdown_clicked,{field:e,previousField:t.getValueText(),view:"fields",sortBy:n,sortByDirection:r});const a=l.jh.getAncestor(this,b.Mn);(0,h.fg)(f._J.field,e,a)})),this.addActivationHandler(this.onActivate.bind(this))}}T(N,"LabelsMenu",(({model:e})=>{const{body:t,loading:n,search:r}=e.useState(),a=(0,o.useStyles2)(I),s=(0,F.Hj)(e),{options:l,value:c}=s.useState();return i().createElement("div",{className:a.labelsMenuWrapper},t instanceof w.E&&i().createElement(w.E.Selector,{model:t}),t instanceof x.u&&i().createElement(x.u.Selector,{model:t}),t instanceof x.u&&i().createElement(r.Component,{model:r}),!n&&l.length>1&&i().createElement(O.u,{label:"Field",options:l,value:String(c),onChange:e.onFieldSelectorChange}))})),T(N,"ValuesMenu",(({model:e})=>{const{loading:t,sort:n}=e.useState(),r=(0,o.useStyles2)(I),a=(0,F.Hj)(e),{value:s}=a.useState();return i().createElement("div",{className:r.valuesMenuWrapper},!t&&s!==d.To&&i().createElement(i().Fragment,null,i().createElement(n.Component,{model:n})))})),T(N,"Component",(({model:e})=>{const{body:t,loading:n,blockingMessage:r}=e.useState(),a=(0,o.useStyles2)(I);return i().createElement("div",{className:a.container},i().createElement(P.O,{isLoading:n,blockingMessage:r},t instanceof w.E&&e&&i().createElement(N.LabelsMenu,{model:e}),i().createElement("div",{className:a.content},t&&i().createElement(t.Component,{model:t}))))}));const $={link:(0,r.css)({textDecoration:"underline"}),button:(0,r.css)({marginLeft:"1.5rem"})};function I(e){return{container:(0,r.css)({flexGrow:1,display:"flex",minHeight:"100%",flexDirection:"column",gap:e.spacing(1)}),content:(0,r.css)({flexGrow:1,display:"flex",paddingTop:e.spacing(0)}),labelsMenuWrapper:(0,r.css)({flexGrow:0,display:"flex",alignItems:"top",justifyContent:"space-between",flexDirection:"row-reverse",gap:e.spacing(2)}),valuesMenuWrapper:(0,r.css)({flexGrow:0,display:"flex",alignItems:"top",gap:e.spacing(2),flexDirection:"row"})}}},8072:(e,t,n)=>{n.d(t,{O:()=>A});var r=n(6089),a=n(5959),i=n.n(a),s=n(7781),l=n(9736),o=n(2007),c=n(4509),u=n(9683),d=n(20),p=n(158),g=n(7243),h=n(5659),f=n(8502),v=n(8313),m=n(4351),b=n(1049),y=n(7352),S=n(4702),w=n(7478),O=n(1532),x=n(6887),E=n(6081),C=n(1475),P=n(2606),k=n(42),j=n(5553),F=n(5700),L=n(4059);function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class T extends l.Bs{onActivate(){var e;const t=(0,j.ir)(this),n=l.jh.getAncestor(this,y.Mn).state.$detectedLabelsData;this.state.body?(null==n||null===(e=n.state.data)||void 0===e?void 0:e.state)===s.LoadingState.Done&&this.update(null==n?void 0:n.state.data.series[0]):this.setState({body:this.build()}),this._subs.add(null==n?void 0:n.subscribeToState(((e,t)=>{var n;(null===(n=e.data)||void 0===n?void 0:n.state)===s.LoadingState.Done&&this.update(e.data.series[0])}))),this._subs.add(t.subscribeToState((()=>{this.updateQueriesOnFieldsVariableChange()})))}getPanelByIndex(e,t){const n=e.state.children[t].state.body;return{panel:n,title:n.state.title}}update(e){var t;const n=(0,j.P4)(this).state.options.filter((e=>e.value!==d.To)).map((e=>e.label));null===(t=this.state.body)||void 0===t||t.state.layouts.forEach((t=>{let r=[];const a=t,i=new Set(n),s=a.state.children;for(let e=0;e({label:e,value:e})));s.push(...this.buildChildren(l));const o=this.calculateCardinalityMap(e);s.sort(this.sortChildren(o)),a.setState({children:s})}))}calculateCardinalityMap(e){const t=new Map;if(null==e?void 0:e.length)for(let n=0;n<(null==e?void 0:e.fields.length);n++){const r=e.fields[n].name,a=e.fields[n].values[0];t.set(r,a)}return t}build(){var e;const t=(0,j.P4)(this);l.jh.getAncestor(this,A).state.search.reset();const n=this.buildChildren(t.state.options),r=l.jh.getAncestor(this,y.Mn).state.$detectedLabelsData;if((null==r||null===(e=r.state.data)||void 0===e?void 0:e.state)===s.LoadingState.Done){const e=this.calculateCardinalityMap(null==r?void 0:r.state.data.series[0]);n.sort(this.sortChildren(e))}const a=n.map((e=>e.clone()));return new E.U({options:[{value:"grid",label:"Grid"},{value:"rows",label:"Rows"}],active:"grid",layouts:[new l.gF({isLazy:!0,templateColumns:k.di,autoRows:"200px",children:n}),new l.gF({isLazy:!0,templateColumns:"1fr",autoRows:"200px",children:a})]})}buildChildren(e){const t=[];for(const n of e){const{value:e}=n,r=String(e);if(e===d.To||!e)continue;const a=(0,k.oj)(this,String(n.value),String(n.value)),i=(0,C.rS)([a]);t.push(new l.xK({body:l.d0.timeseries().setTitle(r).setData(i).setHeaderActions([new P.X({labelName:r,fieldType:u._J.label})]).setCustomFieldConfig("stacking",{mode:o.StackingMode.Normal}).setCustomFieldConfig("fillOpacity",100).setCustomFieldConfig("lineWidth",0).setCustomFieldConfig("pointSize",0).setCustomFieldConfig("drawStyle",o.DrawStyle.Bars).setHoverHeader(!1).setShowMenuAlways(!0).setOverrides(C.jC).setMenu(new F.GD({investigationOptions:{labelName:r}})).setSeriesLimit(L.l).build()}))}return t}sortChildren(e){return(t,n)=>{const r=t.state.body,a=n.state.body;if(r.state.title===d.e4)return-1;if(a.state.title===d.e4)return 1;var i;const s=null!==(i=e.get(r.state.title))&&void 0!==i?i:0;var l;return(null!==(l=e.get(a.state.title))&&void 0!==l?l:0)-s}}static Selector({model:e}){const{body:t}=e.useState();return i().createElement(i().Fragment,null,t&&i().createElement(E.U.Selector,{model:t}))}constructor(e){super(function(e){for(var t=1;t{var e;null===(e=this.state.body)||void 0===e||e.state.layouts.forEach((e=>{const t=e;for(let e=0;e{const{body:t}=e.useState(),n=(0,o.useStyles2)(F.K_);return t?i().createElement("span",{className:n.panelWrapper},t&&i().createElement(t.Component,{model:t})):i().createElement(o.LoadingPlaceholder,{text:"Loading..."})}));var D=n(2601),N=n(713);function $(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function I(e){for(var t=1;t{this.state.search.clearValueFilter()}))),this._subs.add(this.subscribeToEvent(b.gf,this.handleSortByChange)),this._subs.add(null===(a=i.state.$detectedLabelsData)||void 0===a?void 0:a.subscribeToState(this.onDetectedLabelsDataChange)),this._subs.add((0,j.cR)(this).subscribeToState(((e,t)=>{this.onLabelsVariableChange(e,t)}))),this._subs.add(o.subscribeToState(((e,t)=>{this.onGroupByVariableChange(e,t)})));const c=(0,y.TG)(this);c&&this.updateOptions(c),(0,u.NX)(this)}onGroupByVariableChange(e,t){(e.value!==t.value||!(0,O.B)(e.options,t.options)||void 0===this.state.body||this.state.body instanceof N.a)&&this.updateBody()}onLabelsVariableChange(e,t){let{labelName:n}=(0,u.W6)();n===d.ky&&(n=d.OX);const r=(0,j.P4)(this),a=e.filters.find((e=>e.key===n)),i=t.filters.find((e=>e.key===n));r.state.value===d.To&&a!==i&&this.setState({loading:!0,body:void 0,error:void 0})}updateOptions(e){if(!e||!e.length)return void this.setState({loading:!1,body:new N.a({type:"labels"})});const t=(0,j.P4)(this),n=(0,f.dD)(e.fields.map((e=>e.name)));var r;t.setState({loading:!1,options:n,value:null!==(r=this.state.value)&&void 0!==r?r:d.To})}updateBody(){const e=(0,j.P4)(this);if(!e.state.options||!e.state.options.length)return;const t={loading:!1,blockingMessage:void 0,error:!1};e.hasAllValue()&&this.state.body instanceof x.u?t.body=new T({}):!e.hasAllValue()&&this.state.body instanceof T?t.body=new x.u({}):void 0===this.state.body?e.state.options.length>0?t.body=e.hasAllValue()?new T({}):new x.u({}):t.body=new N.a({type:"labels"}):this.state.body instanceof N.a&&e.state.options.length>0&&(t.body=e.hasAllValue()?new T({}):new x.u({})),this.setState(I({},t))}constructor(e){var t,n,r;super(B(I({},e),{$variables:null!==(r=e.$variables)&&void 0!==r?r:new l.Pj({variables:[new S.m({name:d.Jg,defaultToAll:!1,includeAll:!0,value:null!==(t=e.value)&&void 0!==t?t:d.To,options:null!==(n=e.options)&&void 0!==n?n:[]})]}),loading:!0,sort:new b.wd({target:"labels"}),search:new v.G("labels"),value:e.value})),$(this,"_variableDependency",new l.Sh(this,{variableNames:[d.MB]})),$(this,"onDetectedLabelsDataChange",((e,t)=>{var n,r,a,i,l,o,c,u,d;if((null===(n=e.data)||void 0===n?void 0:n.state)===s.LoadingState.Done&&(null===(r=e.data.series)||void 0===r?void 0:r[0])&&!(0,O.B)(null===(i=e.data.series)||void 0===i||null===(a=i[0])||void 0===a?void 0:a.fields,null===(c=t.data)||void 0===c||null===(o=c.series)||void 0===o||null===(l=o[0])||void 0===l?void 0:l.fields))this.updateOptions(null===(d=e.data.series)||void 0===d?void 0:d[0]);else if((null===(u=e.data)||void 0===u?void 0:u.state)===s.LoadingState.Done){(0,j.P4)(this).setState({loading:!1})}})),$(this,"handleSortByChange",(e=>{if("labels"!==e.target)return;const t=this.state.body;if(t instanceof x.u){l.jh.findDescendents(t,p.h).forEach((t=>{t.sort(e.sortBy,e.direction)}))}(0,c.EE)(c.NO.service_details,c.ir.service_details.value_breakdown_sort_change,{target:"labels",criteria:e.sortBy,direction:e.direction})})),$(this,"onChange",(e=>{if(!e)return;const t=(0,j.P4)(this);t.changeValueTo(e);const{sortBy:n,direction:r}=(0,m.vs)("labels",D.DEFAULT_SORT_BY,"desc");(0,c.EE)(c.NO.service_details,c.ir.service_details.select_field_in_breakdown_clicked,{label:e,previousLabel:t.getValueText(),view:"labels",sortBy:n,sortByDirection:r});const a=l.jh.getAncestor(this,y.Mn);(0,w.fg)(u._J.label,e,a)})),this.addActivationHandler(this.onActivate.bind(this))}}function M(e){return{container:(0,r.css)({flexGrow:1,display:"flex",minHeight:"100%",flexDirection:"column",gap:e.spacing(1)}),content:(0,r.css)({flexGrow:1,display:"flex",paddingTop:e.spacing(0)}),labelsMenuWrapper:(0,r.css)({flexGrow:0,display:"flex",alignItems:"top",justifyContent:"space-between",flexDirection:"row-reverse",gap:e.spacing(2)}),valuesMenuWrapper:(0,r.css)({flexGrow:0,display:"flex",alignItems:"top",gap:e.spacing(2),flexDirection:"row"})}}$(A,"LabelsMenu",(({model:e})=>{const{body:t,loading:n,search:r}=e.useState(),a=(0,j.P4)(e),{options:s,value:l}=a.useState(),c=(0,o.useStyles2)(M);return i().createElement("div",{className:c.labelsMenuWrapper},t instanceof x.u&&i().createElement(x.u.Selector,{model:t}),t instanceof T&&i().createElement(T.Selector,{model:t}),t instanceof x.u&&i().createElement(r.Component,{model:r}),!n&&s.length>0&&i().createElement(g.u,{label:"Label",options:s,value:String(l),onChange:e.onChange}))})),$(A,"ValuesMenu",(({model:e})=>{const{loading:t,sort:n}=e.useState(),r=(0,j.P4)(e),{value:a}=r.useState(),s=(0,o.useStyles2)(M);return i().createElement("div",{className:s.valuesMenuWrapper},!t&&a!==d.To&&i().createElement(i().Fragment,null,i().createElement(n.Component,{model:n})))})),$(A,"Component",(({model:e})=>{const{body:t,loading:n,blockingMessage:r,error:a}=e.useState(),s=(0,o.useStyles2)(M);return i().createElement("div",{className:s.container},i().createElement(h.O,{isLoading:n,blockingMessage:r},a&&i().createElement(o.Alert,{title:"",severity:"warning"},"The labels are not available at this moment. Try using a different time range or check again later."),t instanceof T&&e&&i().createElement(A.LabelsMenu,{model:e}),i().createElement("div",{className:s.content},t&&i().createElement(t.Component,{model:t}))))}))},6887:(e,t,n)=>{n.d(t,{u:()=>N});var r=n(9736),a=n(6081),i=n(1049),s=n(2007),l=n(1475),o=n(4351),c=n(7781),u=n(158),d=n(376),p=n(20),g=n(5959),h=n.n(g),f=n(8072),v=n(2601),m=n(42),b=n(8531),y=n(5553),S=n(5700),w=n(6779),O=n(713),x=n(2661),E=n(5548),C=n(5865),P=n(7985),k=n(5953),j=n(1532);function F(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function L(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){F(i,r,a,s,l,"next",e)}function l(e){F(i,r,a,s,l,"throw",e)}s(void 0)}))}}function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T(e){for(var t=1;t{this.onValuesDataQueryChange(e)}))),this._subs.add((0,y.P4)(this).subscribeToState((e=>{e.value===p.To&&this.setState({$data:void 0,body:void 0})}))),this._subs.add(r.jh.getTimeRange(this).subscribeToState((()=>{this.runQuery()}))),this._subs.add((0,y.ir)(this).subscribeToState(((e,t)=>{(0,j.B)(e.filters,t.filters)||this.runQuery()}))),this._subs.add((0,y.oY)(this).subscribeToState(((e,t)=>{(0,j.B)(e.filters,t.filters)||this.runQuery()}))),this._subs.add((0,y.Gk)(this).subscribeToState(((e,t)=>{(0,j.B)(e.filters,t.filters)||this.runQuery()}))),this._subs.add((0,y.Ku)(this).subscribeToState(((e,t)=>{e.value!==t.value&&this.runQuery()})));const t=this.getTagKey();var n=this;this._subs.add((0,y.cR)(this).subscribeToState(function(){var e=L((function*(e,r){(0,j.B)(e.filters.filter((e=>t===p.e4&&e.key!==t)),r.filters.filter((e=>t===p.e4&&e.key!==t)))||n.runQuery()}));return function(t,n){return e.apply(this,arguments)}}()));var a=this;this._subs.add((0,y.iw)(this).subscribeToState(function(){var e=L((function*(e,n){(0,j.B)(e.filters.filter((e=>t!==p.e4&&e.key!==t)),n.filters.filter((e=>t!==p.e4&&e.key!==t)))||a.runQuery()}));return function(t,n){return e.apply(this,arguments)}}()))}rebuildQuery(){var e;null===(e=this.getSceneQueryRunner())||void 0===e||e.setState({queries:[this.buildQuery()]})}runQuery(){this.rebuildQuery();const e=this.getSceneQueryRunner();null==e||e.runQueries()}getSceneQueryRunner(){if(this.state.$data){const e=r.jh.findDescendents(this.state.$data,r.dt);if(1!==e.length){const e=new Error("Unable to find query runner in value breakdown!");throw k.v.error(e,{msg:"LabelValuesBreakdownScene: Unable to find query runner in value breakdown!"}),e}return e[0]}k.v.warn("LabelValuesBreakdownScene: Query is attempting to execute, but query runner is undefined!")}removeValueLabelFromVariableInterpolation(){const e=this.getTagKey();let t,n;if(e===p.e4){const r=(0,y.iw)(this);n=p._Y,t=(0,P._q)(r.state.filters,[e])}else{const r=(0,y.cR)(this);n=p.MB,t=(0,P.VW)(r.state.filters,[e])}return{filterExpression:t,variableName:n}}getTagKey(){const e=(0,y.P4)(this);return String(e.state.value)}onValuesDataQueryChange(e){this.setEmptyStates(e),this.setErrorStates(e)}setErrorStates(e){var t,n;if((null==e||null===(t=e.data)||void 0===t?void 0:t.errors)&&(null===(n=e.data)||void 0===n?void 0:n.state)!==c.LoadingState.Done){var r;const t=this.state.errors;null==e||null===(r=e.data)||void 0===r||r.errors.forEach((e=>{const n=`${e.status}_${e.traceId}_${e.message}`;void 0===t[n]&&(t[n]=D(T({},e),{displayed:!1}))})),this.setState({errors:t}),this.showErrorToast(this.state.errors)}}setEmptyStates(e){var t;if((null===(t=e.data)||void 0===t?void 0:t.state)===c.LoadingState.Done)if(e.data.series.length>0&&!(this.state.body instanceof a.U))this.setState({body:this.build()});else if(0===e.data.series.length){const e=r.jh.getAncestor(this,x.P);(0,E.mE)(e).length>1?this.setState({body:new w.W({clearCallback:()=>(0,E.rA)(this)})}):this.setState({body:new O.a({type:"fields"})})}}getActiveLayout(){const e=this.state.body;if(e instanceof a.U){const t=null==e?void 0:e.state.layouts.find((e=>e.isActive));if(t instanceof r.G1)return t}}activeLayoutContainsNoPanels(){const e=this.getActiveLayout();if(e){return r.jh.findDescendents(e,u.h).some((e=>{const t=e.state.body.state.children[0];return t instanceof r.vA||t instanceof r.dM}))}return!1}build(){const e=(0,y.P4)(this).state,t=String(null==e?void 0:e.value),n=r.jh.getAncestor(this,f.O);let c=r.d0.timeseries();c=c.setCustomFieldConfig("stacking",{mode:s.StackingMode.Normal}).setCustomFieldConfig("fillOpacity",100).setCustomFieldConfig("lineWidth",0).setCustomFieldConfig("pointSize",0).setCustomFieldConfig("drawStyle",s.DrawStyle.Bars).setShowMenuAlways(!0).setOverrides(l.jC).setMenu(new S.GD({})).setTitle(t);const g=c.build(),{sortBy:b,direction:w}=(0,o.vs)("labels",v.DEFAULT_SORT_BY,"desc"),O=()=>{var e;return null!==(e=n.state.search.state.filter)&&void 0!==e?e:""};return new a.U({options:[{value:"single",label:"Single"},{value:"grid",label:"Grid"},{value:"rows",label:"Rows"}],active:"grid",layouts:[new r.G1({direction:"column",children:[new r.dM({reactNode:h().createElement(f.O.LabelsMenu,{model:n})}),new r.vA({minHeight:300,body:g})]}),new r.G1({direction:"column",children:[new r.dM({reactNode:h().createElement(f.O.LabelsMenu,{model:n})}),new C.s7({title:t,levelColor:!0,tagKey:this.getTagKey(),type:"label"}),new r.dM({reactNode:h().createElement(f.O.ValuesMenu,{model:n})}),new u.h({body:new r.gF({isLazy:!0,templateColumns:m.di,autoRows:"200px",children:[new r.vA({body:new r.dM({reactNode:h().createElement(s.LoadingPlaceholder,{text:"Loading..."})})})]}),getLayoutChild:(0,d.Zp)(i.ee,s.DrawStyle.Bars,p.MB,r.jh.getAncestor(this,f.O).state.sort,t),sortBy:b,direction:w,getFilter:O})]}),new r.G1({direction:"column",children:[new r.dM({reactNode:h().createElement(f.O.LabelsMenu,{model:n})}),new C.s7({title:t,levelColor:!0,tagKey:this.getTagKey(),type:"label"}),new r.dM({reactNode:h().createElement(f.O.ValuesMenu,{model:n})}),new u.h({body:new r.gF({templateColumns:"1fr",autoRows:"200px",children:[new r.vA({body:new r.dM({reactNode:h().createElement(s.LoadingPlaceholder,{text:"Loading..."})})})]}),getLayoutChild:(0,d.Zp)(i.ee,s.DrawStyle.Bars,p.MB,r.jh.getAncestor(this,f.O).state.sort,t),sortBy:b,direction:w,getFilter:O})]})]})}showErrorToast(e){const t=(0,b.getAppEvents)();let n=[];for(const t in e){const r=e[t];r.displayed||(n.push(r),r.displayed=!0)}n.length&&(this.activeLayoutContainsNoPanels()||t.publish({type:c.AppEvents.alertError.name,payload:null==n?void 0:n.map(((e,t)=>this.renderError(t,e)))}),this.setState({errors:e}))}renderError(e,t){return h().createElement("div",{key:e},t.status&&h().createElement(h().Fragment,null,h().createElement("strong",null,"Status"),": ",t.status," ",h().createElement("br",null)),t.message&&h().createElement(h().Fragment,null,h().createElement("strong",null,"Message"),": ",t.message," ",h().createElement("br",null)),t.traceId&&h().createElement(h().Fragment,null,h().createElement("strong",null,"TraceId"),": ",t.traceId))}static Selector({model:e}){const{body:t}=e.useState();return h().createElement(h().Fragment,null,t&&t instanceof a.U&&h().createElement(a.U.Selector,{model:t}))}constructor(e){super(D(T({},e),{errors:{}})),this.addActivationHandler(this.onActivate.bind(this))}}_(N,"Component",(({model:e})=>{const{body:t}=e.useState(),n=(0,s.useStyles2)(S.K_);return t?h().createElement("span",{className:n.panelWrapper},t&&h().createElement(t.Component,{model:t})):h().createElement(s.LoadingPlaceholder,{text:"Loading..."})}))},6081:(e,t,n)=>{n.d(t,{U:()=>g});var r=n(5959),a=n.n(r),i=n(9736),s=n(2007),l=n(4509),o=n(9683),c=n(6089),u=n(4351);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}class g extends i.Bs{constructor(e){var t;super(p(function(e){for(var t=1;tthis.state.options.every((e=>"single"!==e.value)))),d(this,"updateLayout",(()=>{const e=(0,u.Dy)();e&&("single"===e&&this.isTopLevelLayoutType()?this.setState({active:"grid"}):this.setState({active:"grid"===e||"rows"===e||"single"===e?e:"grid"}))})),d(this,"onLayoutChange",(e=>{(0,l.EE)(l.NO.service_details,l.ir.service_details.layout_type_changed,{layout:e,view:(0,o.FT)()}),(0,u.zu)(e),this.setState({active:e})})),d(this,"onActivate",(()=>{this.updateLayout()})),this.addActivationHandler(this.onActivate.bind(this))}}d(g,"Selector",(function({model:e}){const{active:t,options:n}=e.useState(),r=(0,s.useStyles2)(h);return a().createElement(s.Field,{className:r.field},a().createElement(s.RadioButtonGroup,{options:n,value:t,onChange:e.onLayoutChange}))})),d(g,"Component",(({model:e})=>{const{layouts:t,options:n,active:r}=e.useState(),i=n.findIndex((e=>e.value===r));if(-1===i)return null;const s=t[i];return a().createElement(s.Component,{model:s})}));const h=e=>({field:(0,c.css)({marginBottom:0})})},6779:(e,t,n)=>{n.d(t,{W:()=>p});var r,a,i,s=n(9736),l=n(7191),o=n(2007),c=n(5959),u=n.n(c),d=n(6830);class p extends s.Bs{}i=({model:e})=>{const{clearCallback:t}=e.useState();return u().createElement(l.R,null,u().createElement(o.Alert,{title:"",severity:"info"},"No labels match these filters."," ",u().createElement(o.Button,{className:d.ZI.button,onClick:()=>t()},"Clear filters")," "))},(a="Component")in(r=p)?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i},5865:(e,t,n)=>{n.d(t,{Zb:()=>y,s$:()=>w,s7:()=>b});var r=n(9736),a=n(5700),i=n(2007),s=n(1475),l=n(4351),o=n(5959),c=n.n(o),u=n(5553),d=n(5570),p=n(4509),g=n(7781),h=n(20),f=n(5953),v=n(42);function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class b extends r.Bs{onActivate(){var e;const t=null!==(e=(0,l.ex)("collapsed",[a.Ci.collapsed,a.Ci.expanded]))&&void 0!==e?e:a.Ci.expanded,n=function(e,t){var n;const o=null!==(n=(0,l.ex)("collapsed",[a.Ci.collapsed,a.Ci.expanded]))&&void 0!==n?n:a.Ci.expanded,c=r.d0.timeseries().setTitle(e).setMenu(new a.GD({})).setCollapsible(!0).setCollapsed(o===a.Ci.collapsed).setCustomFieldConfig("stacking",{mode:i.StackingMode.Normal}).setCustomFieldConfig("fillOpacity",100).setCustomFieldConfig("lineWidth",0).setCustomFieldConfig("pointSize",0).setCustomFieldConfig("drawStyle",i.DrawStyle.Bars).setShowMenuAlways(!0).setSeriesLimit(100);(null==t?void 0:t.levelColor)&&c.setOverrides(s.jC);return c.build()}(this.state.title,{levelColor:this.state.levelColor}),o=S(t);n.setState({extendPanelContext:(e,t)=>this.extendTimeSeriesLegendBus(t)}),this.setState({body:new r.G1({key:w,minHeight:o,height:o,maxHeight:o,wrap:"nowrap",children:[new r.vA({body:n})]})}),this._subs.add(n.subscribeToState(((e,t)=>{if(e.collapsed!==t.collapsed){y(r.jh.getAncestor(n,r.G1),e.collapsed?a.Ci.collapsed:a.Ci.expanded),(0,l.IW)("collapsed",e.collapsed?a.Ci.collapsed:a.Ci.expanded)}})))}initLegendOptions(e,t,n){e&&("label"===this.state.type?t===h.e4?(0,s.C6)(n,e,this):(0,s.dO)(t,n,e,this):(0,s.Nr)(t,n,e,this))}getQuerySubscription(e,t,n){return t.subscribeToState(((t,r)=>{var a;(null===(a=t.data)||void 0===a?void 0:a.state)===g.LoadingState.Done&&("label"===this.state.type?e===h.e4?(0,s.C6)(n,t.data.series,this):(0,s.dO)(e,n,t.data.series,this):(0,s.Nr)(e,n,t.data.series,this))}))}getFieldsVariableLegendSyncSubscription(e,t){return null==t?void 0:t.subscribeToState((()=>{var t,n;const a=null===(t=this.state.body)||void 0===t?void 0:t.state.children[0];if(!(a instanceof r.vA))throw new Error("Cannot find sceneFlexItem");const i=a.state.body;if(!(i instanceof r.Eb))throw new Error("ValueSummary - getFieldsVariableLegendSyncSubscription: Cannot find VizPanel");const l=null===(n=r.jh.getData(this).state.data)||void 0===n?void 0:n.series;l?(0,s.Nr)(e,i,l,this):f.v.warn("ValueSummary - getFieldsVariableLegendSyncSubscription: missing dataframe!")}))}getLabelsVariableLegendSyncSubscription(e){const t=e===h.e4,n=t?(0,u.iw)(this):(0,u.cR)(this);return null==n?void 0:n.subscribeToState((()=>{var n,a;const i=null===(n=this.state.body)||void 0===n?void 0:n.state.children[0];if(!(i instanceof r.vA))throw new Error("Cannot find sceneFlexItem");const l=i.state.body;if(!(l instanceof r.Eb))throw new Error("ValueSummary - getLabelsVariableLegendSyncSubscription: Cannot find VizPanel");const o=null===(a=r.jh.getData(this).state.data)||void 0===a?void 0:a.series;o?t?(0,s.C6)(l,o,this):(0,s.dO)(e,l,o,this):f.v.warn("ValueSummary - getLabelsVariableLegendSyncSubscription: missing dataframe!")}))}constructor(e){super(e),m(this,"extendTimeSeriesLegendBus",(e=>{var t,n;const a=r.jh.getData(this),i=null===(t=a.state.data)||void 0===t?void 0:t.series,s=this.state.tagKey,l=null===(n=this.state.body)||void 0===n?void 0:n.state.children[0];if(!(l instanceof r.vA))throw new Error("Cannot find sceneFlexItem");const o=l.state.body;if(!(o instanceof r.Eb))throw new Error("Cannot find VizPanel");this.initLegendOptions(i,s,o),"label"===this.state.type?this._subs.add(this.getLabelsVariableLegendSyncSubscription(s)):(this._subs.add(this.getFieldsVariableLegendSyncSubscription(s,(0,u.ir)(this))),this._subs.add(this.getFieldsVariableLegendSyncSubscription(s,(0,u.oY)(this)))),this._subs.add(this.getQuerySubscription(s,a,o)),e.onToggleSeriesVisibility=(e,t)=>{let n;n="label"===this.state.type?s===h.e4?(0,d.PE)(e,this):(0,v.R7)(s,e,this):(0,v.zr)(s,e,this),(0,p.EE)(p.NO.service_details,p.ir.service_details.label_in_panel_summary_clicked,{label:e,action:n})}})),this.addActivationHandler(this.onActivate.bind(this))}}function y(e,t){const n=S(t);e.setState({minHeight:n,height:n,maxHeight:n})}function S(e){return e===a.Ci.collapsed?35:300}m(b,"Component",(({model:e})=>{const{body:t}=e.useState();return t?c().createElement("div",null,c().createElement(t.Component,{model:t})):null}));const w="value_summary_panel"},9284:(e,t,n)=>{n.d(t,{D:()=>c});var r=n(6089),a=n(2007),i=n(5959),s=n.n(i);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}const c=e=>{var{value:t,onChange:n,placeholder:r,onClear:i,suffix:c}=e,d=o(e,["value","onChange","placeholder","onClear","suffix"]);const p=(0,a.useStyles2)(u);return s().createElement(a.Input,function(e){for(var t=1;t({suffixWrapper:(0,r.css)({gap:e.spacing(.5),display:"inline-flex"}),clearIcon:(0,r.css)({cursor:"pointer"})})},2606:(e,t,n)=>{n.d(t,{X:()=>$});var r=n(9736),a=n(7352),i=n(7478),s=n(9683),l=n(2007),o=n(5959),c=n.n(o),u=n(9405),d=n(20),p=n(7781),g=n(5553),h=n(6854),f=n(6089),v=n(3241),m=n(5953),b=n(3571);function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var S=function(e){return e.ns="ns",e.us="µs",e.ms="ms",e.s="s",e.m="m",e.h="h",e}(S||{});var w=function(e){return e.B="B",e.KB="KB",e.MB="MB",e.GB="GB",e.TB="TB",e}(w||{});class O extends r.Bs{onActivate(){const e=(0,g.bY)((0,u.ts)(this.state.labelName,this.state.variableType),this).state.filters.filter((e=>e.key===this.state.labelName)),t=e.find((e=>e.operator===h.w7.gte||e.operator===h.w7.gt)),n=e.find((e=>e.operator===h.w7.lte||e.operator===h.w7.lt));let r={};if("duration"===this.state.fieldType||"bytes"===this.state.fieldType){if(t){const e=x((0,g.bu)(t).value,this.state.fieldType);e&&(r.gt=e.value,r.gtu=e.unit,r.gte=t.operator===h.w7.gte)}if(n){const e=x((0,g.bu)(n).value,this.state.fieldType);e&&(r.lt=e.value,r.ltu=e.unit,r.lte=n.operator===h.w7.lte)}}else{if(t){const e=(0,g.bu)(t).value;r.gt=Number(e),r.gtu="",r.gte=t.operator===h.w7.gte}if(n){const e=(0,g.bu)(n).value;r.lt=Number(e),r.ltu="",r.lte=n.operator===h.w7.lte}}0!==Object.keys(r).length&&(r.hasExistingFilter=!0),this.setState(r)}onSubmit(){this.state.gt?(0,u.vn)(this.state.labelName,this.state.gt.toString()+this.state.gtu,this.state.gte?h.w7.gte:h.w7.gt,this,this.state.variableType):(0,u.u7)(this.state.labelName,this,this.state.gte?h.w7.gte:h.w7.gt,this.state.variableType),this.state.lt?(0,u.vn)(this.state.labelName,this.state.lt.toString()+this.state.ltu,this.state.lte?h.w7.lte:h.w7.lt,this,this.state.variableType):(0,u.u7)(this.state.labelName,this,this.state.lte?h.w7.lte:h.w7.lt,this.state.variableType);r.jh.getAncestor(this,$).togglePopover()}constructor(e){let t;const n=e.fieldType;if("bytes"===n)t={ltu:"B",gtu:"B"};else if("duration"===n)t={ltu:"s",gtu:"s"};else{if("float"!==n)throw new Error(`field type incorrectly defined: ${n}`);t={ltu:"",gtu:""}}super(function(e){for(var t=1;t{const t=void 0===this.state.gt&&void 0===this.state.lt;"Enter"!==e.key||t||this.onSubmit()})),this.addActivationHandler(this.onActivate.bind(this))}}function x(e,t){if("duration"===t){const t=Object.values(S).find((t=>{const n=t.length;return e.slice(-1*n)===t}));if(t){const n=Number(e.replace(t,""));if(!isNaN(n))return{unit:t,value:n}}}if("bytes"===t){const t=Object.values(w).sort(((e,t)=>t.length-e.length)).find((t=>{const n=t.length;return e.slice(-1*n)===t}));if(t){const n=Number(e.replace(t,""));if(!isNaN(n))return{unit:t,value:n}}}}function E(e){if("duration"===e){return Object.keys(S).map((e=>({text:e,value:S[e],label:e})))}if("bytes"===e){return Object.keys(w).map((e=>({text:e,value:w[e],label:e})))}const t=new Error(`invalid field type: ${e}`);throw m.v.error(t,{msg:"getUnitOptions, invalid field type"}),t}y(O,"Component",(({model:e})=>{const t=(0,l.useStyles2)(C),{labelName:n,gt:a,lt:i,gte:s,lte:o,gtu:u,ltu:d,fieldType:p,hasExistingFilter:g}=e.useState(),h="float"!==p&&p!==n?`(${p})`:void 0,v=r.jh.getAncestor(e,$),m=void 0===a&&void 0===i;return c().createElement(l.ClickOutsideWrapper,{useCapture:!0,onClick:()=>v.togglePopover()},c().createElement(l.Stack,{direction:"column",gap:0,role:"tooltip"},c().createElement("div",{className:t.card.body},c().createElement("div",{className:t.card.title},n," ",h),c().createElement("div",{className:t.card.fieldWrap},c().createElement(l.FieldSet,{className:t.card.fieldset},c().createElement(l.Field,{"data-testid":b.b.breakdowns.common.filterNumericPopover.inputGreaterThanInclusive,horizontal:!0,className:(0,f.cx)(t.card.field,t.card.inclusiveField)},c().createElement(l.Select,{className:t.card.inclusiveInput,menuShouldPortal:!1,value:void 0!==s?s.toString():"false",options:[{label:"Greater than",value:"false"},{label:"Greater than or equal",value:"true"}],onChange:t=>e.setState({gte:"true"===t.value})})),c().createElement(l.Field,{"data-testid":b.b.breakdowns.common.filterNumericPopover.inputGreaterThan,horizontal:!0,className:t.card.field},c().createElement(l.Input,{onKeyDownCapture:e.onInputKeydown,autoFocus:!0,onChange:t=>{e.setState({gt:""!==t.currentTarget.value?Number(t.currentTarget.value):void 0})},className:t.card.numberInput,value:a,type:"number"})),"float"!==p&&c().createElement(l.Label,null,c().createElement(l.Field,{"data-testid":b.b.breakdowns.common.filterNumericPopover.inputGreaterThanUnit,horizontal:!0,className:t.card.field,label:c().createElement("span",{className:t.card.unitFieldLabel},"Unit")},c().createElement(l.Select,{onChange:t=>{e.setState({gtu:t.value})},menuShouldPortal:!1,options:E(p),className:t.card.selectInput,value:u})))),c().createElement(l.FieldSet,{className:t.card.fieldset},c().createElement(l.Field,{"data-testid":b.b.breakdowns.common.filterNumericPopover.inputLessThanInclusive,horizontal:!0,className:(0,f.cx)(t.card.field,t.card.inclusiveField)},c().createElement(l.Select,{className:t.card.inclusiveInput,menuShouldPortal:!1,value:void 0!==o?o.toString():"false",options:[{label:"Less than",value:"false"},{label:"Less than or equal",value:"true"}],onChange:t=>e.setState({lte:"true"===t.value})})),c().createElement(l.Field,{"data-testid":b.b.breakdowns.common.filterNumericPopover.inputLessThan,horizontal:!0,className:t.card.field},c().createElement(l.Input,{onKeyDownCapture:e.onInputKeydown,onChange:t=>e.setState({lt:""!==t.currentTarget.value?Number(t.currentTarget.value):void 0}),className:t.card.numberInput,value:i,type:"number"})),"float"!==p&&c().createElement(l.Label,null,c().createElement(l.Field,{"data-testid":b.b.breakdowns.common.filterNumericPopover.inputLessThanUnit,horizontal:!0,className:t.card.field,label:c().createElement("span",{className:t.card.unitFieldLabel},"Unit")},c().createElement(l.Select,{onChange:t=>{e.setState({ltu:t.value})},menuShouldPortal:!1,options:E(p),className:t.card.selectInput,value:d}))))),c().createElement("div",{className:t.card.buttons},g&&c().createElement(l.Button,{"data-testid":b.b.breakdowns.common.filterNumericPopover.removeButton,disabled:!g,onClick:()=>{e.setState({gt:void 0,lt:void 0}),e.onSubmit()},size:"sm",variant:"destructive",fill:"outline"},"Remove"),c().createElement(l.Button,{"data-testid":b.b.breakdowns.common.filterNumericPopover.submitButton,disabled:m,onClick:()=>e.onSubmit(),size:"sm",variant:"primary",fill:"outline",type:"submit"},"Add"),c().createElement(l.Button,{"data-testid":b.b.breakdowns.common.filterNumericPopover.cancelButton,onClick:()=>v.togglePopover(),size:"sm",variant:"secondary",fill:"outline"},"Cancel")))))}));const C=e=>({card:{buttons:(0,f.css)({display:"flex",flexWrap:"wrap",justifyContent:"flex-end",gap:e.spacing(1.5),marginTop:e.spacing(1)}),inclusiveInput:(0,f.css)({minWidth:"185px"}),selectInput:(0,f.css)({minWidth:"65px"}),numberInput:(0,f.css)({width:"75px"}),fieldWrap:(0,f.css)({display:"flex",flexDirection:"column",paddingTop:e.spacing(2),paddingBottom:0}),field:(0,f.css)({display:"flex",alignItems:"center",marginBottom:e.spacing(1)}),inclusiveField:(0,f.css)({marginRight:e.spacing(1)}),unitFieldLabel:(0,f.css)({marginLeft:e.spacing(2),marginRight:e.spacing(1.5)}),numberFieldLabel:(0,f.css)({width:"100px"}),switchFieldLabel:(0,f.css)({marginLeft:e.spacing(2),marginRight:e.spacing(1)}),fieldset:(0,f.css)({display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",marginBottom:0}),title:(0,f.css)({}),body:(0,f.css)({padding:e.spacing(2)}),p:(0,f.css)({maxWidth:300})}});var P=n(376),k=n(5719),j=n(2085);function F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e){for(var t=1;te.key===this.state.labelName))}onActivate(){var e,t;const n=r.jh.getAncestor(this,a.Mn);(null===(t=n.state.$data)||void 0===t||null===(e=t.state.data)||void 0===e?void 0:e.state)===p.LoadingState.Done&&this.calculateSparsity(),this._subs.add(r.jh.getData(this).subscribeToState((e=>{var t,r,a,i;(null===(t=e.data)||void 0===t?void 0:t.state)===p.LoadingState.Done&&((null===(a=n.state.$data)||void 0===a||null===(r=a.state.data)||void 0===r?void 0:r.state)===p.LoadingState.Done&&this.calculateSparsity(),this._subs.add(null===(i=n.state.$data)||void 0===i?void 0:i.subscribeToState((e=>{var t;(null===(t=e.data)||void 0===t?void 0:t.state)===p.LoadingState.Done&&this.calculateSparsity()}))))})))}togglePopover(){this.setState({showPopover:!this.state.showPopover})}calculateSparsity(){var e;const t=r.jh.getAncestor(this,a.Mn),n=(0,a.tn)(null===(e=t.state.$data)||void 0===e?void 0:e.state.data),i=null==n?void 0:n.fields.find((e=>"labels"===e.name)),s=r.jh.getData(this),l=(0,k.UX)(s,(e=>e instanceof r.dt),r.dt);if(l){const e=l.state.queries[0];(null==e?void 0:e.expr.includes("avg_over_time"))&&this.setState({hasNumericFilters:!0})}if(!i||!n)return void this.setState({hasSparseFilters:!1});const o=this.getVariable(),c=i.values.reduce(((e,t)=>((null==t?void 0:t[this.state.labelName])&&e++,e)),0),u=r.jh.getAncestor(this,r.Eb);if(void 0!==c&&n.length>0){const e=(c/n.length*100).toLocaleString(),t=`${this.state.labelName} exists on ${e}% of ${n.length} sampled log lines`;u.setState({description:t})}else u.setState({description:void 0});const p=this.getExistingFilter(o),h=p&&o.state.name===d.mB?(0,g.bu)(p):void 0;c{const t=(0,a.rD)(this),n=(0,P.ph)(this.state.labelName,t);if(!n||"string"===n||"boolean"===n||"int"===n){const e=new Error(`Incorrect field type: ${n}`);throw m.v.error(e,{msg:`onClickNumericFilter invalid field type ${n}`}),e}this.setState({popover:new O({labelName:this.state.labelName,variableType:e,fieldType:n})}),this.togglePopover()})),F(this,"getViewValuesLink",(()=>{const e=r.jh.getAncestor(this,a.Mn);return(0,i.FB)(this.state.fieldType,this.state.labelName,e)})),F(this,"onClickExcludeEmpty",(e=>{(0,u.Qt)(this.state.labelName,d.ZO,"exclude",this,e)})),F(this,"onClickIncludeEmpty",(e=>{(0,u.Qt)(this.state.labelName,d.ZO,"include",this,e)})),F(this,"clearFilter",(e=>{(0,u.Qt)(this.state.labelName,d.ZO,"clear",this,e)})),F(this,"clearFilters",(e=>{(0,u.hi)(this.state.labelName,this,e),this.state.labelName===d.e4&&(0,j.dm)(this)})),this.addActivationHandler(this.onActivate.bind(this))}}function I(e){const t=(0,l.useStyles2)(B);return c().createElement("span",{className:t.description},e.selected&&c().createElement("span",{className:t.selected}),e.text)}F($,"Component",(({model:e})=>{const{hideValueDrilldown:t,labelName:n,hasSparseFilters:r,hasNumericFilters:a,selectedValue:i,popover:u,showPopover:p,fieldType:f}=e.useState(),m=e.getVariable(),y=m.useState().name,S=e.getExistingFilter(m),w=(0,g.z2)(y,S),O=(0,l.useStyles2)(A),x=(0,o.useRef)(null),E=f===s._J.label&&m.state.name===d.mB&&0===m.state.filters.filter((e=>e.key!==n&&e.operator===h.w7.Equal)).length,C=(null==S?void 0:S.operator)===h.w7.NotEqual&&w.value===d.ZO,P=!!S;var k;const j=null!==(k=null==i?void 0:i.value)&&void 0!==k?k:C?T:a?N:T,F=!!(null==S?void 0:S.operator)&&[h.w7.gte,h.w7.gt,h.w7.lte,h.w7.lt].includes(S.operator),$=j===N||F,B=j===T&&!$,M={value:T,component:()=>c().createElement(I,{selected:B,text:`Include all log lines with ${n}`})},R={value:D,component:()=>c().createElement(I,{selected:!1,text:`Exclude all log lines with ${n}`})},V={value:N,component:()=>c().createElement(I,{selected:$,text:`Add an expression, i.e. ${n} > 30`})},W=[];a&&W.push(V),r&&(F||W.push(M),W.push(R));const z=C?M:a?V:M;var H;return c().createElement(c().Fragment,null,P&&c().createElement(l.IconButton,{disabled:E,name:"filter",tooltip:`Clear ${n} filters`,onClick:()=>e.clearFilters(y)}),(a||r)&&c().createElement(c().Fragment,null,c().createElement(l.ButtonGroup,{"data-testid":b.b.breakdowns.common.filterButtonGroup},c().createElement(l.Button,{"data-testid":b.b.breakdowns.common.filterButton,ref:x,onClick:()=>e.onChange(null!=i?i:z),size:"sm",fill:"outline",variant:"secondary"},null!==(H=null==i?void 0:i.value)&&void 0!==H?H:z.value),c().createElement(l.ButtonSelect,{"data-testid":b.b.breakdowns.common.filterSelect,className:O.buttonSelect,variant:"default",options:W,onChange:t=>{e.onChange(t)}}))),!0!==t&&c().createElement(l.LinkButton,{title:`View breakdown of values for ${n}`,variant:"primary",fill:"outline",size:"sm","aria-label":`Select ${n}`,href:e.getViewValuesLink()},"Select"),u&&c().createElement(l.PopoverController,{content:c().createElement(u.Component,{model:u})},((e,t,n)=>{const r={onBlur:t,onFocus:e};return c().createElement(c().Fragment,null,x.current&&c().createElement(c().Fragment,null,c().createElement(l.Popover,L(_(L({},n,v.rest),{show:p,wrapperClassName:O.popover,referenceElement:x.current,renderArrow:!0}),r))))})))}));const B=e=>({selected:(0,f.css)({label:"selectable-value-selected","&:before":{content:'""',position:"absolute",left:0,top:"4px",height:"calc(100% - 8px)",width:"2px",backgroundColor:e.colors.warning.main}}),description:(0,f.css)({textAlign:"left",fontSize:e.typography.pxToRem(12)})}),A=e=>({popover:(0,f.css)({borderRadius:e.shape.radius.default,boxShadow:e.shadows.z3,background:e.colors.background.primary,border:`1px solid ${e.colors.border.weak}`}),description:(0,f.css)({textAlign:"left",fontSize:e.typography.pxToRem(12)}),buttonSelect:(0,f.css)({border:`1px solid ${e.colors.border.strong}`,borderLeft:"none",borderTopLeftRadius:0,borderBottomLeftRadius:0,padding:1,height:"24px"})})},1049:(e,t,n)=>{n.d(t,{ee:()=>m,gf:()=>g,wd:()=>h});var r=n(9736),a=n(5959),i=n.n(a),s=n(7781),l=n(5570),o=n(2007),c=n(4351),u=n(3571),d=n(2601);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class g extends s.BusEventBase{constructor(e,t,n){super(),p(this,"target",void 0),p(this,"sortBy",void 0),p(this,"direction",void 0),this.target=e,this.sortBy=t,this.direction=n}}p(g,"type","sort-criteria-changed");class h extends r.Bs{constructor(e){const{sortBy:t,direction:n}=(0,c.vs)(e.target,d.DEFAULT_SORT_BY,"desc");super({target:e.target,sortBy:t,direction:n}),p(this,"sortingOptions",[{label:"",options:[{value:"changepoint",label:"Most relevant",description:"Smart ordering of graphs based on the most significant spikes in the data"},{value:"outliers",label:"Outlying values",description:"Order by the amount of outlying values in the data"},{value:s.ReducerID.stdDev,label:"Widest spread",description:"Sort graphs by deviation from the average value"},{value:"alphabetical",label:"Name",description:"Alphabetical order"},{value:s.ReducerID.sum,label:"Count",description:"Sort graphs by total number of logs"},{value:s.ReducerID.max,label:"Highest spike",description:"Sort graphs by the highest values (max)"},{value:s.ReducerID.min,label:"Lowest dip",description:"Sort graphs by the smallest values (min)"}]},{label:"Percentiles",options:[...s.fieldReducers.selectOptions([],v).options]}]),p(this,"onCriteriaChange",(e=>{e.value&&(this.setState({sortBy:e.value}),(0,c.fq)(this.state.target,e.value,this.state.direction),this.publishEvent(new g(this.state.target,e.value,this.state.direction),!0))})),p(this,"onDirectionChange",(e=>{e.value&&(this.setState({direction:e.value}),(0,c.fq)(this.state.target,this.state.sortBy,e.value),this.publishEvent(new g(this.state.target,this.state.sortBy,e.value),!0))}))}}p(h,"Component",(({model:e})=>{const{sortBy:t,direction:n}=e.useState(),r=e.sortingOptions.find((e=>e.options.find((e=>e.value===t)))),a=null==r?void 0:r.options.find((e=>e.value===t));return i().createElement(i().Fragment,null,i().createElement(o.InlineField,{label:"Sort by",htmlFor:"sort-by-criteria",tooltip:"Calculate a derived quantity from the values in your time series and sort by this criteria. Defaults to standard deviation."},i().createElement(o.Select,{"data-testid":u.b.breakdowns.common.sortByFunction,value:a,width:20,isSearchable:!0,options:e.sortingOptions,placeholder:"Choose criteria",onChange:e.onCriteriaChange,inputId:"sort-by-criteria"})),i().createElement(o.InlineField,null,i().createElement(o.Select,{"data-testid":u.b.breakdowns.common.sortByDirection,onChange:e.onDirectionChange,"aria-label":"Sort direction",placeholder:"",value:n,options:[{label:"Asc",value:"asc"},{label:"Desc",value:"desc"}]})))}));const f=["p10","p25","p75","p90","p99"];function v(e){return e.id>="p1"&&e.id<="p99"&&f.includes(e.id)}function m(e){var t;return null!==(t=(0,l.H7)(e))&&void 0!==t?t:"No labels"}},5659:(e,t,n)=>{n.d(t,{O:()=>l});var r=n(6089),a=n(5959),i=n.n(a),s=n(2007);function l({blockingMessage:e,isLoading:t,children:n}){const r=(0,s.useStyles2)(o);return t&&!e&&(e="Loading..."),t?i().createElement(s.LoadingPlaceholder,{className:r.statusMessage,text:e}):e?i().createElement("div",{className:r.statusMessage},e):i().createElement(i().Fragment,null,n)}function o(e){return{statusMessage:(0,r.css)({fontStyle:"italic",marginTop:e.spacing(7),textAlign:"center"})}}},4059:(e,t,n)=>{n.d(t,{l:()=>r});const r=20},72:(e,t,n)=>{n.d(t,{_:()=>_});var r=n(5959),a=n.n(r),i=n(2007),s=n(7781),l=n(6089);function o(e){return{outline:"2px dotted transparent",outlineOffset:"2px",boxShadow:`0 0 0 2px ${e.colors.background.canvas}, 0 0 0px 4px ${e.colors.primary.main}`,transitionTimingFunction:"cubic-bezier(0.19, 1, 0.22, 1)",transitionDuration:"0.2s",transitionProperty:"outline, outline-offset, box-shadow"}}function c(e,t){return{zIndex:"-1",position:"absolute",opacity:"0",width:`${e}px`,height:`${e}px`,borderRadius:t.shape.radius.default,content:'""',[t.transitions.handleMotion("no-preference","reduce")]:{transitionDuration:"0.2s",transitionTimingFunction:"cubic-bezier(0.4, 0, 0.2, 1)",transitionProperty:"opacity"}}}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e){for(var t=1;t{const t=(0,i.useTheme2)(),n=e.regex?t.colors.text.maxContrast:t.colors.text.disabled,r=h(t),s=(e.regex?"Disable":"Enable")+" regex";return a().createElement(i.Tooltip,{content:s},a().createElement("button",{onClick:()=>e.onRegexToggle(e.regex?"match":"regex"),className:(0,l.cx)(r.button,e.regex?r.active:null),"aria-label":s},a().createElement("svg",{fill:n,width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg"},a().createElement("text",{fontSize:"13",width:"16",height:"16",x:"50%",y:"50%",dominantBaseline:"central",textAnchor:"middle"},".*"))))},h=(e,t="secondary")=>{const n=16+e.spacing.gridSize;return{button:(0,l.css)({zIndex:0,position:"relative",margin:`0 ${e.spacing.x0_5} 0 ${e.spacing.x0_5}`,boxShadow:"none",border:"none",display:"inline-flex",background:"transparent",justifyContent:"center",alignItems:"center",padding:0,color:e.colors.text.primary,"&:before":p(d({},c(n,e)),{position:"absolute"}),"&:hover":{"&:before":{backgroundColor:"secondary"===t?e.colors.action.hover:s.colorManipulator.alpha(e.colors.text.primary,.12),opacity:1}},"&:focus, &:focus-visible":o(e),"&:focus:not(:focus-visible)":{outline:"none",boxShadow:"none"}}),active:(0,l.css)({"&:before":{backgroundColor:"secondary"===t?e.colors.action.hover:s.colorManipulator.alpha(e.colors.text.primary,.12),opacity:1},"&:hover":{"&:before":{backgroundColor:"none",opacity:0}}})}};var f=n(3571),v=n(6854);function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e){for(var t=1;t{const t=(0,i.useTheme2)(),n=e.caseSensitive?t.colors.text.maxContrast:t.colors.text.disabled,r=w(t),s=(e.caseSensitive?"Disable":"Enable")+" case match";return a().createElement(i.Tooltip,{content:s},a().createElement("button",{onClick:()=>e.onCaseSensitiveToggle(e.caseSensitive?v.ld.caseInsensitive:v.ld.caseSensitive),className:(0,l.cx)(r.button,e.caseSensitive?r.active:null),"aria-label":s},a().createElement("svg",{fill:n,width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg"},a().createElement("text",{fontSize:"13",width:"16",height:"16",x:"50%",y:"50%",dominantBaseline:"central",textAnchor:"middle"},"Aa"))))},w=(e,t="secondary")=>{const n=16+e.spacing.gridSize;return{button:(0,l.css)({zIndex:0,position:"relative",margin:`0 ${e.spacing.x0_5} 0 ${e.spacing.x0_5}`,boxShadow:"none",border:"none",display:"inline-flex",background:"transparent",justifyContent:"center",alignItems:"center",padding:0,color:e.colors.text.primary,"&:before":y(b({},c(n,e)),{position:"absolute"}),"&:hover":{"&:before":{backgroundColor:"secondary"===t?e.colors.action.hover:s.colorManipulator.alpha(e.colors.text.primary,.12),opacity:1}},"&:focus, &:focus-visible":o(e),"&:focus:not(:focus-visible)":{outline:"none",boxShadow:"none"}}),active:(0,l.css)({"&:before":{backgroundColor:"secondary"===t?e.colors.action.hover:s.colorManipulator.alpha(e.colors.text.primary,.12),opacity:1},"&:hover":{"&:before":{backgroundColor:"none",opacity:0}}})}};var O=n(8428);function x(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function C(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}let P;const k=e=>{var{value:t,onChange:n,placeholder:s,onClear:l,suffix:o,width:c,regex:u}=e,d=C(e,["value","onChange","placeholder","onClear","suffix","width","regex"]);const p=(0,i.useStyles2)(F),[g,h]=(0,r.useState)(!1),[f,v]=(0,r.useState)(""),m=(0,r.useCallback)((e=>{if(!e||!u)return v(""),void h(!1);if(void 0!==P)try{null==P||P.compile(e),h(!1),v("")}catch(e){const t=(0,O.DU)(e);h(!0),t&&v(t)}else j().then((()=>m(e)))}),[u]);return(0,r.useEffect)((()=>{m(t)}),[m,t]),a().createElement(i.Tooltip,{placement:"auto-start",show:!!f&&g,content:f},a().createElement(i.Input,function(e){for(var t=1;t({suffixWrapper:(0,l.css)({gap:e.spacing(.5),display:"inline-flex"}),clearIcon:(0,l.css)({cursor:"pointer"})}),L=30;function _({exclusive:e,lineFilter:t,caseSensitive:n,setExclusive:s,regex:o,onInputChange:c,onCaseSensitiveToggle:u,onRegexToggle:d,handleEnter:p,onSubmitLineFilter:h,onClearLineFilter:v,focus:m,setFocus:b,type:y}){const w=(0,i.useStyles2)((e=>T(e,y))),[O,x]=(0,r.useState)(L);function E(e){var t;const n=Math.max(null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0,L);x(n+9)}return(0,r.useEffect)((()=>{E(t)}),[t,m]),a().createElement("div",{className:w.wrapper},!h&&a().createElement(i.Select,{prefix:null,className:w.select,value:e?"exclusive":"inclusive",options:[{value:"exclusive",label:"Exclude"},{value:"inclusive",label:"Include"}],onChange:()=>s(!e)}),a().createElement(i.Field,{className:w.field},a().createElement(k,{regex:o,width:m?O:void 0,onFocus:()=>b(!0),"data-testid":f.b.exploreServiceDetails.searchLogs,value:null!=t?t:"",className:(0,l.cx)(h?w.inputNoBorderRight:void 0,w.input),onChange:c,suffix:a().createElement("span",{className:`${w.suffix} input-suffix`},a().createElement(S,{caseSensitive:n,onCaseSensitiveToggle:u}),a().createElement(g,{regex:o,onRegexToggle:d})),prefix:null,placeholder:"Search in log lines",onClear:v,onKeyUp:e=>{p(e,t),E(t)}})),h&&a().createElement("span",{className:w.buttonWrap},a().createElement(i.Button,{onClick:()=>{s(!1),h()},className:w.includeButton,variant:"secondary",fill:"outline",disabled:!t},"Include"),a().createElement(i.Button,{onClick:()=>{s(!0),h()},className:w.excludeButton,variant:"secondary",fill:"outline",disabled:!t},"Exclude")))}const T=(e,t)=>({inputNoBorderRight:(0,l.css)({input:{borderTopRightRadius:0,borderBottomRightRadius:0}}),suffix:(0,l.css)({display:"inline-flex",gap:e.spacing(.5)}),removeBtn:(0,l.css)({borderTopLeftRadius:0,borderBottomLeftRadius:0}),buttonWrap:(0,l.css)({display:"flex",justifyContent:"center"}),includeButton:(0,l.css)({borderLeft:"none",borderRadius:0,borderRight:"none","&[disabled]":{borderRight:"none"}}),excludeButton:(0,l.css)({borderRadius:`0 ${e.shape.radius.default} ${e.shape.radius.default} 0`,borderLeft:"none","&[disabled]":{borderLeft:"none"}}),submit:(0,l.css)({borderTopLeftRadius:0,borderBottomLeftRadius:0}),select:(0,l.css)({label:"line-filter-exclusion",marginLeft:0,paddingLeft:0,height:"auto",borderBottomRightRadius:"0",borderTopRightRadius:"0",borderRight:"none",minHeight:"30px",minWidth:"95px",maxWidth:"95px",outline:"none"}),wrapper:(0,l.css)({display:"flex",width:"100%"}),input:(0,l.css)({label:"line-filter-input-wrapper",minWidth:"200px",maxWidth:"editor"===t?"calc(100vw - 198px)":"calc(100vw - 288px)",input:{borderTopLeftRadius:0,borderBottomLeftRadius:0,fontFamily:"monospace",fontSize:e.typography.bodySmall.fontSize,width:"100%"}}),exclusiveBtn:(0,l.css)({marginRight:"1rem"}),field:(0,l.css)({label:"field",flex:"0 1 auto",marginBottom:0})})},2649:(e,t,n)=>{n.d(t,{PY:()=>S,ZB:()=>b,zQ:()=>y});var r=n(6089),a=n(9736),i=n(2007),s=n(5959),l=n.n(s),o=n(4351),c=n(8632),u=n(4509),d=n(9641),p=n(7781),g=n(8996),h=n(8531),f=n(8428),v=n(5953);function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class b extends a.Bs{constructor(e){super(function(e){for(var t=1;t{this.getLogsPanelScene().setState({wrapLogMessage:e}),(0,o.YK)("wrapLogMessage",e),this.getLogsListScene().setLogsVizOption({wrapLogMessage:e}),this.getLogsListScene().setLogsVizOption({prettifyLogMessage:e})})),m(this,"onChangeLogsSortOrder",(e=>{this.getLogsPanelScene().setState({sortOrder:e}),(0,o.YK)("sortOrder",e),this.getLogsListScene().setLogsVizOption({sortOrder:e})})),m(this,"getLogsListScene",(()=>a.jh.getAncestor(this,c.i))),m(this,"getLogsPanelScene",(()=>a.jh.getAncestor(this,g.o))),m(this,"clearDisplayedFields",(()=>{this.getLogsListScene().clearDisplayedFields(),(0,u.EE)(u.NO.service_details,u.ir.service_details.logs_clear_displayed_fields)}))}}function y(){return(0,o.YM)("sortOrder",p.LogsSortOrder.Descending)}function S(){const e=h.locationService.getLocation(),t=new URLSearchParams(e.search).get("sortOrder");try{if("string"==typeof t){const e=(0,f.FH)(JSON.parse(t));if(e)return e}}catch(e){v.v.error(e,{msg:"LogOptionsScene(getLogsPanelSortOrderFromURL): unable to parse sortOrder"})}return!1}m(b,"Component",(function({model:e}){const{onChangeVisualizationType:t,visualizationType:n}=e.useState(),{wrapLogMessage:r,sortOrder:a}=e.getLogsPanelScene().useState(),{displayedFields:s}=e.getLogsListScene().useState(),o=(0,i.useStyles2)(w),c=null!=r&&r;return l().createElement("div",{className:o.container},s.length>0&&l().createElement(i.Tooltip,{content:`Clear displayed fields: ${s.join(", ")}`},l().createElement(i.Button,{size:"sm",variant:"secondary",fill:"outline",onClick:e.clearDisplayedFields},"Show original log line")),l().createElement(i.InlineField,{className:o.buttonGroupWrapper,transparent:!0},l().createElement(i.RadioButtonGroup,{size:"sm",options:[{label:"Newest first",value:p.LogsSortOrder.Descending,description:"Show results newest to oldest"},{label:"Oldest first",value:p.LogsSortOrder.Ascending,description:"Show results oldest to newest"}],value:a,onChange:e.onChangeLogsSortOrder})),l().createElement(i.InlineField,{className:o.buttonGroupWrapper,transparent:!0},l().createElement(i.RadioButtonGroup,{size:"sm",value:c,onChange:e.handleWrapLinesChange,options:[{label:"Wrap",value:!0,description:"Enable wrapping of long log lines"},{label:"No wrap",value:!1,description:"Disable wrapping of long log lines"}]})),l().createElement(d.C,{vizType:n,onChange:t}))}));const w=e=>({container:(0,r.css)({display:"flex",alignItems:"center",gap:e.spacing(1),marginTop:e.spacing(.5)}),buttonGroupWrapper:(0,r.css)({margin:0,alignItems:"center"})})},8632:(e,t,n)=>{n.d(t,{i:()=>bt});var r=n(5959),a=n.n(r),i=n(9736),s=n(8531),l=n(6089),o=n(7781),c=n(2165),u=n(5953),d=n(9598),p=n(8428);function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}const v=`${d.s_}.tableColumnWidths`;var m=function(e){return e.text="text",e.labels="labels",e.auto="auto",e}({});const b=(0,r.createContext)({columnWidthMap:{},setColumnWidthMap:()=>{},columns:{},filteredColumns:{},setColumns:()=>{},setFilteredColumns:()=>{},setVisible:()=>!1,visible:!1,bodyState:"auto",setBodyState:()=>{},clearSelectedLine:()=>{}});const y=({children:e,initialColumns:t,logsFrame:n,setUrlColumns:i,clearSelectedLine:s,setUrlTableBodyState:l,urlTableBodyState:o,showColumnManagementDrawer:d,isColumnManagementActive:g})=>{const[f,m]=(0,r.useState)(S(t)),[y,w]=(0,r.useState)(null!=o?o:"auto"),[O,x]=(0,r.useState)(void 0),E=function(){let e={};const t=localStorage.getItem(v);if(t)try{return e=(0,p.Zt)(JSON.parse(t)),!1===e&&u.v.error(new p.QX("getColumnWidthsFromLocalStorage: unable to validate values in local storage"),{msg:"NarrowingError: error parsing table column widths from local storage"}),e}catch(e){u.v.error(e,{msg:"error parsing table column widths from local storage"})}return e}(),[C,P]=(0,r.useState)(E),k=(0,r.useCallback)((e=>{if(e){const t=S(e);m(t),i((e=>{let t=[];return Object.keys(e).forEach((n=>{e[n].active&&void 0!==e[n].index&&t.push(n)})),t.sort(((t,n)=>{const r=e[t],a=e[n];return r.index-a.index})),t})(t))}}),[i]),j=(0,r.useCallback)((e=>{w(e),l(e)}),[l]),F=(0,r.useCallback)((e=>{d(e)}),[d]);return(0,r.useEffect)((()=>{t&&k(t)}),[t,k]),(0,r.useEffect)((()=>{const e=function(e,t){if(!t)return void u.v.warn("missing dataframe, cannot set url state");const n=Object.keys(e).filter((t=>{var n;return null===(n=e[t])||void 0===n?void 0:n.active})).sort(((t,n)=>{const r=e[t],a=e[n];return void 0!==r.index&&void 0!==a.index?r.index-a.index:0})),r=t.timeField,a=t.bodyField;if(r&&a||n.length){const e=[];return(null==r?void 0:r.name)&&e.push(r.name),(null==a?void 0:a.name)&&e.push(a.name),n.length?n:e}return[]}(f,n);if(null==e?void 0:e.length){0===Object.keys(f).filter((e=>f[e].active)).length&&function(e,t,n){const r=h({},e);r[(0,c.fF)(n)]={index:0,active:!0,type:"TIME_FIELD",percentOfLinesWithLabel:100,cardinality:1/0},r[(0,c.Il)(n)]={index:1,active:!0,type:"BODY_FIELD",percentOfLinesWithLabel:100,cardinality:1/0},t(r)}(f,k,n),x(void 0)}}),[f,n,x,k]),a().createElement(b.Provider,{value:{setColumnWidthMap:e=>{localStorage.setItem(v,JSON.stringify(e)),P(e)},columnWidthMap:C,bodyState:y,setBodyState:j,setFilteredColumns:x,filteredColumns:O,columns:f,setColumns:k,visible:g,setVisible:F,clearSelectedLine:()=>{s()}}},e)},S=e=>{if("labelTypes"in e){const t=h({},e),{labelTypes:n}=t;return f(t,["labelTypes"])}return e};const w=()=>(0,r.useContext)(b);var O=n(3367),x=n(1269),E=n(1625),C=n(2007);const P=(0,r.createContext)({cellIndex:{index:null,numberOfMenuItems:3},setActiveCellIndex:e=>!1}),k=({children:e})=>{const[t,n]=(0,r.useState)({index:null}),i=(0,r.useCallback)((e=>{n(e)}),[]);return a().createElement(P.Provider,{value:{cellIndex:t,setActiveCellIndex:i}},e)},j=()=>(0,r.useContext)(P),F=(0,r.createContext)({isHeaderMenuActive:!1,setHeaderMenuActive:e=>!1}),L=({children:e})=>{const[t,n]=(0,r.useState)(!1),i=(0,r.useCallback)((e=>{n(e)}),[]);return a().createElement(F.Provider,{value:{isHeaderMenuActive:t,setHeaderMenuActive:i}},e)},_=()=>(0,r.useContext)(F);var T=n(9193);function D({searchValue:e,setSearchValue:t}){const{columns:n,setFilteredColumns:r}=w(),i=e=>{const t=e[0];let a={},i=0;var l;t.forEach((e=>{e in n&&(a[e]=n[e],i++)})),r(a),l=i,(0,s.reportInteraction)("grafana_logs_app_table_text_search_result_count",{resultCount:l})},o=function(e){return{searchWrap:(0,l.css)({padding:`${e.spacing(.4)} 0 ${e.spacing(.4)} ${e.spacing(.4)}`})}}((0,C.useTheme2)());return a().createElement(C.Field,{className:o.searchWrap},a().createElement(C.Input,{value:e,type:"text",placeholder:"Search fields by name",onChange:e=>{var a;const s=null===(a=e.currentTarget)||void 0===a?void 0:a.value;var l;t(s),s?(l=s,(0,T.E)(Object.keys(n),l,i)):r(void 0)}}))}var N=n(9902);function $(){const e=function(e){return{empty:(0,l.css)({marginBottom:e.spacing(2),marginLeft:e.spacing(1.75),fontSize:e.typography.fontSize})}}((0,C.useTheme2)());return a().createElement("div",{className:e.empty},"No fields")}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function A(e){var t=function(e,t){if("object"!==M(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==M(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===M(t)?t:String(t)}function M(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function R(e){const t=function(e){return{dragIcon:(0,l.css)({cursor:"drag",marginLeft:e.spacing(1),opacity:.4}),labelCount:(0,l.css)({marginLeft:e.spacing(.5),marginRight:e.spacing(.5),appearance:"none",background:"none",border:"none",fontSize:e.typography.pxToRem(11),opacity:.6,display:"flex",flexDirection:"column",alignItems:"self-end"}),contentWrap:(0,l.css)({display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"}),customWidthWrap:(0,l.css)({fontSize:e.typography.bodySmall.fontSize,cursor:"pointer"}),checkboxLabel:(0,l.css)({"> span":{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",display:"block",maxWidth:"100%"}})}}((0,C.useTheme2)());var n,r,i,s,o,c;return e.labels[e.label]?a().createElement(a().Fragment,null,a().createElement("div",{className:t.contentWrap},a().createElement(C.Checkbox,{className:t.checkboxLabel,label:e.label,onChange:e.onChange,checked:null!==(c=null===(n=e.labels[e.label])||void 0===n?void 0:n.active)&&void 0!==c&&c}),e.showCount&&a().createElement("div",{className:t.labelCount},a().createElement("div",null,null===(r=e.labels[e.label])||void 0===r?void 0:r.percentOfLinesWithLabel,"%"),a().createElement("div",null,null===(i=e.labels[e.label])||void 0===i?void 0:i.cardinality," ",1===(null===(s=e.labels[e.label])||void 0===s?void 0:s.cardinality)?"value":"values")),e.columnWidthMap&&e.setColumnWidthMap&&void 0!==(null===(o=e.columnWidthMap)||void 0===o?void 0:o[e.label])&&a().createElement("div",{onClick:()=>{var t;const n=function(e){for(var t=1;t{const{columnWidthMap:t,setColumnWidthMap:n}=w(),{reorderColumn:r,labels:i,valueFilter:s,toggleColumn:o}=e,c=(0,C.useTheme2)(),{columns:u}=w(),d=function(e){return{wrap:(0,l.css)({marginTop:e.spacing(1),marginBottom:e.spacing(1),display:"flex",background:e.colors.background.primary}),dragging:(0,l.css)({background:e.colors.background.secondary}),columnWrapper:(0,l.css)({marginBottom:e.spacing(1.5),paddingLeft:e.spacing(.5)})}}(c),p=Object.keys(i).filter((e=>s(e))),g=e=>{e.destination&&r(u,e.source.index,e.destination.index)},h=e=>{const t=i[e];if(t)return`${e} appears in ${null==t?void 0:t.percentOfLinesWithLabel}% of log lines`};return p.length?a().createElement(N.JY,{onDragEnd:g},a().createElement(N.gL,{droppableId:"order-fields",direction:"vertical"},(e=>a().createElement("div",z(W({className:d.columnWrapper},e.droppableProps),{ref:e.innerRef}),p.sort(function(e){return(t,n)=>{const r=e[t],a=e[n];return null!=r.index&&null!=a.index?r.index-a.index:0}}(i)).map(((e,r)=>a().createElement(N.sx,{draggableId:e,key:e,index:r},((r,s)=>a().createElement("div",z(W({className:(0,l.cx)(d.wrap,s.isDragging?d.dragging:void 0),ref:r.innerRef},r.draggableProps,r.dragHandleProps),{title:h(e)}),a().createElement(R,{setColumnWidthMap:n,columnWidthMap:t,label:e,onChange:()=>o(e),labels:i,draggable:!0})))))),e.placeholder)))):a().createElement($,null)},Q=new Intl.Collator(void 0,{sensitivity:"base"});const K=e=>{const{labels:t,valueFilter:n,toggleColumn:r}=e,i=function(e){return{wrap:(0,l.css)({marginTop:e.spacing(.25),marginBottom:e.spacing(.25),display:"flex",background:e.colors.background.primary,borderBottom:`1px solid ${e.colors.background.canvas}`}),dragging:(0,l.css)({background:e.colors.background.secondary}),columnWrapper:(0,l.css)({marginBottom:e.spacing(1.5),paddingLeft:e.spacing(.5)})}}((0,C.useTheme2)()),s=Object.keys(t).filter((e=>n(e)));return s.length?a().createElement("div",{className:i.columnWrapper},s.sort(function(e){return(t,n)=>{const r=e[t],a=e[n];return null!=r&&null!=a?Number("TIME_FIELD"===a.type)-Number("TIME_FIELD"===r.type)||Number("BODY_FIELD"===a.type)-Number("BODY_FIELD"===r.type)||Q.compare(t,n):0}}(t)).map((e=>{var n;return a().createElement("div",{key:e,className:i.wrap,title:`${e} appears in ${null===(n=t[e])||void 0===n?void 0:n.percentOfLinesWithLabel}% of log lines`},a().createElement(R,{showCount:!0,label:e,onChange:()=>r(e),labels:t}))}))):a().createElement($,null)};const G=e=>{const t=function(e){return{sidebarWrap:(0,l.css)({overflowY:"scroll",height:"calc(100% - 50px)","&::-webkit-scrollbar":{display:"none"},scrollbarWidth:"none"}),columnHeaderButton:(0,l.css)({appearance:"none",background:"none",border:"none",fontSize:e.typography.pxToRem(11)}),columnHeader:(0,l.css)({display:"flex",justifyContent:"space-between",fontSize:e.typography.h6.fontSize,background:e.colors.background.secondary,position:"sticky",top:0,left:0,paddingTop:e.spacing(.75),paddingRight:e.spacing(.75),paddingBottom:e.spacing(.75),paddingLeft:e.spacing(1.5),zIndex:3,marginBottom:e.spacing(2)})}}((0,C.useTheme2)());var n,r;return a().createElement("div",{className:t.sidebarWrap},a().createElement(a().Fragment,null,a().createElement("div",{className:t.columnHeader},"Selected fields",a().createElement("button",{onClick:e.clear,className:t.columnHeaderButton},"Reset")),a().createElement(H,{reorderColumn:e.reorderColumn,toggleColumn:e.toggleColumn,labels:null!==(n=e.filteredColumnsWithMeta)&&void 0!==n?n:e.columnsWithMeta,valueFilter:t=>{var n,r;return null!==(r=null===(n=e.columnsWithMeta[t])||void 0===n?void 0:n.active)&&void 0!==r&&r},id:"selected-fields"}),a().createElement("div",{className:t.columnHeader},"Fields"),a().createElement(K,{toggleColumn:e.toggleColumn,labels:null!==(r=e.filteredColumnsWithMeta)&&void 0!==r?r:e.columnsWithMeta,valueFilter:t=>{var n;return!(null===(n=e.columnsWithMeta[t])||void 0===n?void 0:n.active)}})))};function U(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function q(e){for(var t=1;t{if(n===r)return;const a=q({},t),i=Object.keys(a).filter((e=>a[e].active)).map((e=>{var t;return{fieldName:e,index:null!==(t=a[e].index)&&void 0!==t?t:0}})).sort(((e,t)=>e.index-t.index)),[s]=i.splice(n,1);i.splice(r,0,s),i.filter((e=>void 0!==e)).forEach(((e,t)=>{a[e.fieldName].index=t})),e(a)}}function X(){const{columns:e,setColumns:t,setVisible:n,filteredColumns:i,setFilteredColumns:l}=w(),[o,c]=(0,r.useState)(""),d=Y(t);return a().createElement(C.ClickOutsideWrapper,{onClick:()=>{n(!1),l(e),c("")},useCapture:!0},a().createElement(D,{searchValue:o,setSearchValue:c}),a().createElement(G,{toggleColumn:n=>{if(!e||!(n in e))return void function(e,t){let n;try{n={columns:JSON.stringify(t),columnName:e}}catch(t){n={msg:"Table: ColumnSelectionDrawerWrap failed to encode context",columnName:e}}u.v.warn("failed to get column",n)}(n,e);const r=Object.keys(e).filter((t=>e[t].active)).length,a=!e[n].active||void 0;let o;if(o=J(q({},e),a?{[n]:J(q({},e[n]),{active:a,index:r})}:{[n]:J(q({},e[n]),{active:!1,index:void 0})}),function(t){if(e){var n,r;const a=!(null===(n=e[t])||void 0===n?void 0:n.active),i=null===(r=Object.keys(e).filter((t=>{var n;return null===(n=e[t])||void 0===n?void 0:n.active})))||void 0===r?void 0:r.length,l={columnAction:a?"add":"remove",columnCount:a?i+1:i-1};(0,s.reportInteraction)("grafana_logs_app_table_column_filter_clicked",l)}}(n),t(o),i){var d;const e=!(null===(d=i[n])||void 0===d?void 0:d.active);let t;t=J(q({},i),e?{[n]:J(q({},i[n]),{active:e,index:r})}:{[n]:J(q({},i[n]),{active:!1,index:void 0})}),l(t),c("")}},filteredColumnsWithMeta:i,columnsWithMeta:e,clear:()=>{const n=q({},e);let r=0;Object.keys(n).forEach((e=>{const t="BODY_FIELD"===n[e].type||"TIME_FIELD"===n[e].type;n[e].active=t,n[e].index=t?r++:void 0})),t(n),l(n),c("")},reorderColumn:d}))}const Z=e=>a().createElement(ee,{onMouseOut:e.onMouseOut,onMouseIn:e.onMouseIn,onClick:e.onClick,field:e.field,rowIndex:e.rowIndex},e.children),ee=e=>{var t;const n=(0,C.useTheme2)(),r=j(),i=((e,t)=>({active:(0,l.css)({height:"calc(100% + 36px)",zIndex:e.zIndex.tooltip,background:"transparent"}),wrap:(0,l.css)({position:"absolute",overflowX:"hidden",whiteSpace:"nowrap",width:"100%",height:"100%",left:0,top:0,margin:"auto",background:null!=t?t:"transparent"})}))(n,void 0,null===(t=r.cellIndex)||void 0===t||t.numberOfMenuItems);return a().createElement("div",{onMouseLeave:e.onMouseOut,onMouseEnter:e.onMouseIn,onClick:e.onClick,className:r.cellIndex.index===e.rowIndex&&r.cellIndex.fieldName===e.field.name?(0,l.cx)(i.wrap,i.active):i.wrap},e.children)},te={logsFrame:null,addFilter:e=>{},timeRange:void 0,selectedLine:void 0},ne=(0,r.createContext)(te),re=({children:e,logsFrame:t,addFilter:n,selectedLine:r,timeRange:i})=>a().createElement(ne.Provider,{value:{logsFrame:t,addFilter:n,selectedLine:r,timeRange:i}},e),ae=()=>(0,r.useContext)(ne);var ie=n(6854);const se=e=>{const t=((e,t)=>({menu:(0,l.css)({position:"relative",paddingRight:"5px",display:"flex",minWidth:"60px",justifyContent:"flex-start"}),menuItemsWrap:(0,l.css)({boxShadow:e.shadows.z3,display:"flex",background:e.colors.background.secondary,padding:"5px 0",marginLeft:"column"===t?"5px":void 0}),menuItem:(0,l.css)({overflow:"auto",textOverflow:"ellipsis",cursor:"pointer",paddingLeft:"5px",paddingRight:"5px",display:"flex",alignItems:"center"})}))((0,C.useTheme2)(),e.pillType),{addFilter:n}=ae();return a().createElement("span",{className:t.menu},a().createElement("span",{className:t.menuItemsWrap},"derived"!==e.fieldType&&a().createElement(a().Fragment,null,a().createElement("div",{className:t.menuItem,onClick:()=>{n({key:e.label,value:e.value,operator:ie.w7.Equal})}},a().createElement(C.Icon,{title:"Add to search",size:"md",name:"plus-circle"})),a().createElement("div",{className:t.menuItem,onClick:()=>{n({key:e.label,value:e.value,operator:ie.w7.NotEqual})}},a().createElement(C.Icon,{title:"Exclude from search",size:"md",name:"minus-circle"}))),e.showColumn&&a().createElement("div",{title:"Add column",onClick:e.showColumn,className:t.menuItem},a().createElement("svg",{width:"18",height:"16",viewBox:"0 0 18 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},a().createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.38725 1.33301H13.3872C13.5641 1.33301 13.7336 1.40325 13.8587 1.52827C13.9837 1.65329 14.0539 1.82286 14.0539 1.99967V2.33333C14.0539 2.70152 13.7554 3 13.3872 3H13.0542C12.87 3 12.7206 2.85062 12.7206 2.66634H8.05391V13.333H12.7206C12.7206 13.1491 12.8697 13 13.0536 13H13.3872C13.7554 13 14.0539 13.2985 14.0539 13.6667V13.9997C14.0539 14.1765 13.9837 14.3461 13.8587 14.4711C13.7336 14.5961 13.5641 14.6663 13.3872 14.6663H1.38725C1.21044 14.6663 1.04087 14.5961 0.915843 14.4711C0.790819 14.3461 0.720581 14.1765 0.720581 13.9997V1.99967C0.720581 1.82286 0.790819 1.65329 0.915843 1.52827C1.04087 1.40325 1.21044 1.33301 1.38725 1.33301ZM2.05391 13.333H6.72058V2.66634H2.05391V13.333Z",fill:"#CCCCDC",fillOpacity:"1"}),a().createElement("path",{d:"M13.8538 7.19999H16.2538C16.466 7.19999 16.6695 7.28429 16.8195 7.4343C16.9696 7.58432 17.0538 7.78783 17.0538 7.99999C17.0538 8.21214 16.9696 8.41566 16.8195 8.56567C16.6695 8.71569 16.466 8.79999 16.2538 8.79999H13.8538V11.2C13.8538 11.4121 13.7696 11.6156 13.6195 11.7657C13.4695 11.9157 13.266 12 13.0538 12C12.8416 12 12.6382 11.9157 12.4881 11.7657C12.3381 11.6156 12.2538 11.4121 12.2538 11.2V8.79999H9.85384C9.64165 8.79999 9.43819 8.71569 9.28815 8.56567C9.13811 8.41566 9.05383 8.21214 9.05383 7.99999C9.05383 7.78783 9.13811 7.58432 9.28815 7.4343C9.43819 7.28429 9.64165 7.19999 9.85384 7.19999H12.2538V4.8C12.2538 4.58784 12.3381 4.38433 12.4881 4.23431C12.6382 4.0843 12.8416 4 13.0538 4C13.266 4 13.4695 4.0843 13.6195 4.23431C13.7696 4.38433 13.8538 4.58784 13.8538 4.8V7.19999Z",fill:"#CCCCDC",fillOpacity:"1"}))),e.links&&e.links.map((e=>{var n;return a().createElement("div",{className:t.menuItem,onClick:()=>{window.open(e.href,"_blank")},key:e.href},a().createElement(C.Icon,{title:null!==(n=e.title)&&void 0!==n?n:"Link",key:e.href,size:"md",name:"link"}))}))))},le="detected_level",oe=e=>{const{label:t,value:n}=e,r=(0,C.useTheme2)(),{cellIndex:i}=j();let s;if(t===le){const e=Re().options;"string"==typeof n&&n in e&&(s=e[n].color)}const c=i.index===e.rowIndex&&e.field.name===i.fieldName,u=((e,t)=>({activePillWrap:(0,l.css)({}),pillWrap:(0,l.css)({width:"100%"}),pill:(0,l.css)({border:`1px solid ${e.colors.border.weak}`,"&:hover":{border:`1px solid ${e.colors.border.strong}`},marginRight:"5px",marginTop:"4px",marginLeft:"5px",padding:"2px 5px",position:"relative",display:"inline-flex",flexDirection:"row-reverse",backgroundColor:"transparent",paddingLeft:t?`${e.spacing(.75)}`:"2px","&:before":{content:'""',position:"absolute",left:0,top:0,height:"100%",width:`${e.spacing(.25)}`,backgroundColor:t}}),menu:(0,l.css)({width:"100%"}),menuItem:(0,l.css)({overflow:"auto",textOverflow:"ellipsis"}),menuItemText:(0,l.css)({width:"65px",display:"inline-block"})}))(r,s);return a().createElement("div",{className:(0,l.cx)(u.pillWrap,c?u.activePillWrap:void 0)},!!n&&a().createElement(a().Fragment,null,a().createElement("span",{className:u.pill},a().createElement(a().Fragment,null,n)),c&&"string"==typeof n&&e.field.type!==o.FieldType.time&&a().createElement(se,{label:e.label,value:n,pillType:"column"})))};var ce=n(3571),ue=n(5002);function de(e){var t;const n=(e=>({clipboardButton:(0,l.css)({padding:0,height:"100%",lineHeight:"1",width:"20px"}),inspectButton:(0,l.css)({display:"inline-flex",verticalAlign:"middle",margin:0,overflow:"hidden",borderRadius:"5px"}),iconWrapper:(0,l.css)({height:"35px",position:"sticky",left:0,display:"flex",background:e.colors.background.secondary,padding:`0 ${e.spacing(.5)}`,zIndex:1,boxShadow:e.shadows.z2}),inspect:(0,l.css)({padding:"5px 3px","&:hover":{color:e.colors.text.link,cursor:"pointer"}})}))((0,C.useTheme2)()),{logsFrame:i,timeRange:s}=ae(),o=null==i||null===(t=i.idField)||void 0===t?void 0:t.values[e.rowIndex],c=null==i?void 0:i.bodyField.values[e.rowIndex],[u,d]=(0,r.useState)(!1),p=(0,r.useCallback)((()=>s?(0,ue.gW)("selectedLine",{id:o,row:e.rowIndex},s):""),[o,e.rowIndex,s]);return a().createElement(a().Fragment,null,a().createElement("div",{className:n.iconWrapper},a().createElement("div",{className:n.inspect},a().createElement(C.IconButton,{"data-testid":ce.b.table.inspectLine,className:n.inspectButton,tooltip:"View log line",variant:"secondary","aria-label":"View log line",tooltipPlacement:"top",size:"md",name:"eye",onClick:()=>d(!0),tabIndex:0})),a().createElement("div",{className:n.inspect},a().createElement(C.ClipboardButton,{className:n.clipboardButton,icon:"share-alt",variant:"secondary",fill:"text",size:"md",tooltip:"Copy link to log line",tooltipPlacement:"top",tabIndex:0,getText:p}))),a().createElement(a().Fragment,null,u&&a().createElement(C.Modal,{onDismiss:()=>d(!1),isOpen:!0,title:"Inspect value"},a().createElement("pre",null,c),a().createElement(C.Modal.ButtonRow,null,a().createElement(C.ClipboardButton,{icon:"copy",getText:()=>e.value},"Copy to Clipboard")))))}const pe=e=>{var t;let n=e.value;const r=e.field,i=r.display(n),s=((e,t)=>({flexWrap:(0,l.css)({display:"flex",alignItems:"flex-start",flexDirection:t===o.FieldType.number?"row-reverse":"row",textAlign:t===o.FieldType.number?"right":"left"}),content:(0,l.css)({position:"relative",overflow:"hidden",display:"flex",height:"100%"}),linkWrapper:(0,l.css)({color:e.colors.text.link,marginTop:"7px",marginLeft:"7px","&:hover":{textDecoration:"underline"}})}))((0,C.useTheme2)(),e.field.type),{setVisible:c}=w(),{cellIndex:u,setActiveCellIndex:d}=j(),p={index:e.rowIndex},g=Boolean(null===(t=(0,C.getCellLinks)(e.field,p))||void 0===t?void 0:t.length);if(null===n)return a().createElement(a().Fragment,null);n=a().isValidElement(e.value)?e.value:"object"==typeof n?JSON.stringify(e.value):(0,o.formattedValueToString)(i);return a().createElement(Z,{onClick:()=>e.rowIndex===u.index&&e.field.name===u.fieldName?d({index:null}):d({index:e.rowIndex,fieldName:e.field.name,numberOfMenuItems:3}),field:e.field,rowIndex:e.rowIndex},a().createElement("div",{className:s.content},0===e.fieldIndex&&a().createElement(de,{value:n,rowIndex:e.rowIndex}),a().createElement("div",{className:s.flexWrap}),!g&&((t,n)=>a().createElement(oe,{field:e.field,rowIndex:e.rowIndex,showColumns:()=>c(!0),label:n,value:t}))(n,r.name),g&&r.getLinks&&a().createElement(C.DataLinksContextMenu,{links:()=>{var e;return null!==(e=(0,C.getCellLinks)(r,p))&&void 0!==e?e:[]}},(e=>e.openMenu?a().createElement("div",{className:s.linkWrapper,onClick:e.openMenu},a().createElement(a().Fragment,null,n)):a().createElement("div",{className:s.linkWrapper},a().createElement(a().Fragment,null,n))))))};function ge(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function he(e){for(var t=1;t({pill:(0,l.css)({flex:"0 1 auto",marginLeft:e.spacing(.5),marginRight:e.spacing(.5),padding:`${e.spacing(.25)} ${e.spacing(.25)}`,position:"relative",display:"inline-flex",flexDirection:"column",marginTop:e.spacing(.5)}),activePill:(0,l.css)({}),valueWrap:(0,l.css)({border:`1px solid ${e.colors.background.secondary}`,boxShadow:`-2px 2px 5px 0px ${e.colors.background.secondary}`,backgroundColor:"transparent",cursor:"pointer",position:"relative",paddingRight:`${e.spacing(.5)}`,paddingLeft:t?`${e.spacing(.75)}`:`${e.spacing(.5)}`,"&:before":{content:'""',position:"absolute",left:0,top:0,height:"100%",width:`${e.spacing(.25)}`,backgroundColor:t},"&:hover":{border:`1px solid ${e.colors.border.strong}`}})}))(t,n);return a().createElement("span",{className:(0,l.cx)(r.pill,e.menuActive?r.activePill:void 0),onClick:e.onClick},a().createElement("span",{className:r.valueWrap},e.label,"=",e.value),e.menuActive&&a().createElement(se,{pillType:"logPill",fieldType:e.fieldType,links:e.links,label:e.label,value:e.value,showColumn:e.onClickAdd}))}const me=e=>{const{label:t}=e,{cellIndex:n,setActiveCellIndex:i}=j(),{columns:l,setColumns:c}=w(),u=e.value,d=(0,s.getTemplateSrv)(),p=(0,r.useMemo)((()=>d.replace.bind(d)),[d]),g=e.field;if(!g||(null==g?void 0:g.type)===o.FieldType.other)return null;const h={index:e.rowIndex};e.originalField&&e.isDerivedField&&e.originalFrame&&(e.originalField.getLinks=(0,o.getLinksSupplier)(e.originalFrame,e.originalField,{},p));const f=e.originalField&&(0,C.getCellLinks)(e.originalField,h);return a().createElement(ve,{onClick:()=>e.rowIndex===n.index&&g.name===n.fieldName&&t===n.subFieldName?i({index:null}):i({index:e.rowIndex,fieldName:g.name,subFieldName:t,numberOfMenuItems:e.isDerivedField?2:3}),menuActive:n.index===e.rowIndex&&n.fieldName===g.name&&n.subFieldName===t,fieldType:e.isDerivedField?"derived":void 0,label:t,value:u,onClickAdd:()=>(e=>{const t=he({},l),n=Object.keys(l).filter((e=>l[e].active)).length;t[e].active?t[e]=fe(he({},t[e]),{active:!1,index:void 0}):t[e]=fe(he({},t[e]),{active:!0,index:n}),c(t)})(t),links:f})},be=e=>{var t,n;null==e||null===(n=e.current)||void 0===n||n.scrollTo({left:null===(t=e.current)||void 0===t?void 0:t.scrollLeft})};function ye({scrollerRef:e}){const t=(e=>({scroller:l.css` + position: absolute; + right: 0; + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 20px; + top: 32px; + margin-top: -24px; + // For some reason clicking on this button causes text to be selected in the following row + user-select: none; + `,scrollLeft:l.css` + cursor: pointer; + background: ${e.colors.background.primary}; + + &:hover { + background: ${e.colors.background.secondary}; + } + `,scrollRight:l.css` + cursor: pointer; + background: ${e.colors.background.primary}; + + &:hover { + background: ${e.colors.background.secondary}; + } + `}))((0,C.useTheme2)());return a().createElement("div",{className:t.scroller},a().createElement("span",{onPointerDown:()=>{var t,n;null==(t=e)||null===(n=t.current)||void 0===n||n.scrollTo({top:0,left:0,behavior:"smooth"})},onPointerUp:()=>be(e),className:t.scrollLeft},a().createElement(C.Icon,{name:"arrow-left"})),a().createElement("span",{onPointerDown:()=>{var t,n;null==(t=e)||null===(n=t.current)||void 0===n||n.scrollTo({top:0,left:t.current.scrollWidth,behavior:"smooth"})},onPointerUp:()=>be(e),className:t.scrollRight},a().createElement(C.Icon,{name:"arrow-right"})))}function Se(e){const t=(0,C.useTheme2)(),n=we(t);return a().createElement("div",{"data-testid":ce.b.table.rawLogLine,className:n.rawLogLine},a().createElement(a().Fragment,null,e.value))}const we=(e,t)=>({rawLogLine:(0,l.css)({fontFamily:e.typography.fontFamilyMonospace,height:"35px",lineHeight:"35px",paddingRight:e.spacing(1.5),paddingLeft:e.spacing(1),fontSize:e.typography.bodySmall.fontSize})}),Oe=e=>{let t=e.value;const n=e.field,i=n.display(t),s=(0,C.useTheme2)(),l=xe(s),{columns:u,setVisible:d,bodyState:p}=w(),{logsFrame:g}=ae(),[h,f]=(0,r.useState)(!1),v=(0,r.useRef)(null);t=a().isValidElement(e.value)?e.value:"object"==typeof t?JSON.stringify(e.value):(0,o.formattedValueToString)(i);const b=(t=>Object.keys(u).filter((e=>e!==(0,c.Il)(g))).sort(((e,t)=>e===le?-1:t===le?1:"LINK_FIELD"===u[e].type?-1:"LINK_FIELD"===u[t].type?1:u[e].cardinality>u[t].cardinality?-1:1)).filter((e=>!u[e].active&&u[e].cardinality>1)).map((r=>{var i;const s=t[r],l=null==g||null===(i=g.raw)||void 0===i?void 0:i.fields.find((e=>e.name===r)),c=null==n?void 0:n.values[e.rowIndex],p=!s&&!!c;if(s)return a().createElement(me,{originalFrame:void 0,field:n,columns:u,rowIndex:e.rowIndex,frame:e.frame,showColumns:()=>d(!0),key:r,label:r,isDerivedField:!1,value:s});if(p&&(null==l?void 0:l.name)){const t=null==l?void 0:l.values[e.rowIndex];if((null==l?void 0:l.type)===o.FieldType.string&&t)return a().createElement(me,{originalFrame:null==g?void 0:g.raw,originalField:l,field:n,value:t,columns:u,rowIndex:e.rowIndex,frame:e.frame,showColumns:()=>d(!0),key:l.name,label:l.name,isDerivedField:!0})}return null})).filter((e=>e)))(e.labels),y=p===m.auto,S=b.length>0;return a().createElement(Z,{onMouseIn:()=>{f(!0)},onMouseOut:()=>{f(!1)},rowIndex:e.rowIndex,field:e.field},a().createElement(O.ScrollSyncPane,{innerRef:v,group:"horizontal"},a().createElement("div",{className:l.content},0===e.fieldIndex&&a().createElement(de,{rowIndex:e.rowIndex,value:t}),y&&S&&a().createElement(a().Fragment,null,b),p===m.labels&&S&&a().createElement(a().Fragment,null,b),p===m.labels&&!S&&a().createElement(Se,{value:t}),y&&!S&&a().createElement(Se,{value:t}),p===m.text&&a().createElement(Se,{value:t}),h&&a().createElement(ye,{scrollerRef:v}))))},xe=e=>({content:l.css` + white-space: nowrap; + overflow-x: auto; + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + padding-right: 30px; + display: flex; + align-items: flex-start; + height: 100%; + &::-webkit-scrollbar { + display: none; /* Chrome, Safari and Opera */ + } + + &:after { + pointer-events: none; + content: ''; + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + // Fade out text in last 10px to background color to add affordance to horiziontal scroll + background: linear-gradient(to right, transparent calc(100% - 10px), ${e.colors.background.primary}); + } + `});function Ee(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ce(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function Pe(e){var t=function(e,t){if("object"!==ke(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ke(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ke(t)?t:String(t)}function ke(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}const je=e=>{const{setHeaderMenuActive:t,isHeaderMenuActive:n}=_(),{logsFrame:i}=ae(),s=(0,r.useRef)(null),o=((e,t,n)=>({logLineButton:(0,l.css)({marginLeft:"5px"}),tableHeaderMenu:(0,l.css)({label:"tableHeaderMenu",width:"100%",minWidth:"250px",height:"100%",maxHeight:"400px",backgroundColor:e.colors.background.primary,border:`1px solid ${e.colors.border.weak}`,padding:e.spacing(2),margin:e.spacing(1,0),boxShadow:e.shadows.z3,borderRadius:e.shape.radius.default}),leftAlign:(0,l.css)({label:"left-align",display:"flex",width:"calc(100% - 20px)"}),clearButton:(0,l.css)({marginLeft:"5px"}),rightAlign:(0,l.css)({label:"right-align",display:"flex",marginRight:"5px"}),wrapper:(0,l.css)({label:"wrapper",display:"flex",marginLeft:t?"56px":"6px",width:n?"calc(100% + 6px)":"100%",borderRight:`1px solid ${e.colors.border.weak}`,marginRight:"-6px"}),defaultContentWrapper:(0,l.css)({borderLeft:t?`1px solid ${e.colors.border.weak}`:"none",marginLeft:t?"-6px":0,paddingLeft:t?"12px":0,display:"flex"})}))((0,C.useTheme2)(),0===e.fieldIndex,e.field.name===(0,c.Il)(i)),{columnWidthMap:u,setColumnWidthMap:d,setBodyState:p,bodyState:g}=w(),h=e.field.name===(0,c.Il)(i),f=()=>{p(g===m.text?m.labels:m.text)};return a().createElement("span",{className:o.wrapper},a().createElement("span",{className:o.leftAlign},a().createElement("span",{className:o.defaultContentWrapper},e.defaultContent),u&&d&&void 0!==(null==u?void 0:u[e.field.name])&&a().createElement(C.IconButton,{tooltip:"Reset column width",tooltipPlacement:"top",className:o.clearButton,"aria-label":"Reset column width",name:"x",onClick:()=>{const t=function(e){for(var t=1;t{t(!n)},name:"ellipsis-v"})),s.current&&a().createElement(C.Popover,{show:n,content:a().createElement(C.ClickOutsideWrapper,{onClick:()=>t(!1),useCapture:!0},a().createElement("div",{className:o.tableHeaderMenu},e.children)),referenceElement:s.current}))};function Fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Le(e){const{setHeaderMenuActive:t}=_(),{columns:n,setColumns:i,bodyState:s,setBodyState:o}=w(),{logsFrame:u}=ae(),d=_e(),p=(0,r.useCallback)((e=>{const t=function(e){for(var t=1;t{const r=t[n].index,a=t[e.name].index;return t[n].active&&a&&r&&r>a})).map((e=>t[e])).forEach((e=>{void 0!==e.index&&e.index--})),t[e.name].active=!1,t[e.name].index=void 0,i(t)}),[n,i]),g=e.headerProps.field.name===(0,c.Il)(u);return a().createElement(je,e.headerProps,a().createElement("div",{className:d.linkWrap},a().createElement("a",{className:d.link,onClick:()=>{e.openColumnManagementDrawer(),t(!1)}},a().createElement(C.Icon,{className:d.icon,name:"columns",size:"md"}),"Manage columns")),a().createElement("div",{className:d.linkWrap},a().createElement("a",{className:d.link,onClick:()=>p(e.headerProps.field)},a().createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 17 16",width:"17",height:"16",className:"css-q2u0ig-Icon"},a().createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.73446 1.33301H12.2345C12.3892 1.33301 12.5375 1.40325 12.6469 1.52827C12.7563 1.65329 12.8178 1.82286 12.8178 1.99967V4.74967C12.8178 5.07184 12.5566 5.33301 12.2345 5.33301C11.9123 5.33301 11.6511 5.07184 11.6511 4.74967V2.66634H7.56779V13.333H11.6511V10.9163C11.6511 10.5942 11.9123 10.333 12.2345 10.333C12.5566 10.333 12.8178 10.5942 12.8178 10.9163V13.9997C12.8178 14.1765 12.7563 14.3461 12.6469 14.4711C12.5375 14.5961 12.3892 14.6663 12.2345 14.6663H1.73446C1.57975 14.6663 1.43137 14.5961 1.32198 14.4711C1.21258 14.3461 1.15112 14.1765 1.15112 13.9997V1.99967C1.15112 1.82286 1.21258 1.65329 1.32198 1.52827C1.43137 1.40325 1.57975 1.33301 1.73446 1.33301ZM2.31779 13.333H6.40112V2.66634H2.31779V13.333Z",fill:"#CCCCDC",fillOpacity:"1"}),a().createElement("path",{d:"M15.9893 10.6315C15.9498 10.7263 15.8919 10.8123 15.819 10.8846C15.7467 10.9575 15.6607 11.0154 15.5659 11.0549C15.4712 11.0943 15.3695 11.1147 15.2668 11.1147C15.1641 11.1147 15.0625 11.0943 14.9677 11.0549C14.8729 11.0154 14.7869 10.9575 14.7146 10.8846L12.9335 9.09573L11.1524 10.8846C11.0801 10.9575 10.9941 11.0154 10.8993 11.0549C10.8045 11.0943 10.7028 11.1147 10.6002 11.1147C10.4975 11.1147 10.3958 11.0943 10.301 11.0549C10.2063 11.0154 10.1202 10.9575 10.0479 10.8846C9.97504 10.8123 9.91717 10.7263 9.87769 10.6315C9.8382 10.5367 9.81787 10.4351 9.81787 10.3324C9.81787 10.2297 9.8382 10.1281 9.87769 10.0333C9.91717 9.9385 9.97504 9.85248 10.0479 9.78017L11.8368 7.99906L10.0479 6.21795C9.90148 6.07149 9.8192 5.87285 9.8192 5.66573C9.8192 5.4586 9.90148 5.25996 10.0479 5.1135C10.1944 4.96705 10.393 4.88477 10.6002 4.88477C10.8073 4.88477 11.0059 4.96705 11.1524 5.1135L12.9335 6.90239L14.7146 5.1135C14.8611 4.96705 15.0597 4.88477 15.2668 4.88477C15.4739 4.88477 15.6726 4.96705 15.819 5.1135C15.9655 5.25996 16.0478 5.4586 16.0478 5.66573C16.0478 5.87285 15.9655 6.07149 15.819 6.21795L14.0302 7.99906L15.819 9.78017C15.8919 9.85248 15.9498 9.9385 15.9893 10.0333C16.0288 10.1281 16.0491 10.2297 16.0491 10.3324C16.0491 10.4351 16.0288 10.5367 15.9893 10.6315Z",fill:"#CCCCDC",fillOpacity:"1"})),"Remove column")),e.slideLeft&&a().createElement("div",{className:d.linkWrap},a().createElement("a",{className:d.link,onClick:()=>{var t;return null===(t=e.slideLeft)||void 0===t?void 0:t.call(e,n)}},a().createElement(C.Icon,{className:(0,l.cx)(d.icon,d.reverse),name:"arrow-from-right",size:"md"}),"Move left")),e.slideRight&&a().createElement("div",{className:d.linkWrap},a().createElement("a",{className:d.link,onClick:()=>{var t;return null===(t=e.slideRight)||void 0===t?void 0:t.call(e,n)}},a().createElement(C.Icon,{className:d.icon,name:"arrow-from-right",size:"md"}),"Move right")),g&&a().createElement("div",{className:d.linkWrap},a().createElement("a",{className:d.link,onClick:()=>{s===m.text?o(m.labels):o(m.text)}},s===m.text?a().createElement(C.Icon,{className:d.icon,name:"brackets-curly",size:"md"}):a().createElement(C.Icon,{className:d.icon,name:"text-fields",size:"md"}),s===m.text?"Show labels":"Show log text")),e.autoColumnWidths&&a().createElement("div",{className:d.linkWrap},a().createElement("a",{className:d.link,onClick:()=>{var t;return null===(t=e.autoColumnWidths)||void 0===t?void 0:t.call(e)}},a().createElement(C.Icon,{className:d.icon,name:"arrows-h",size:"md"}),"Reset column widths")))}const _e=()=>({reverse:(0,l.css)({transform:"scaleX(-1)"}),link:(0,l.css)({paddingTop:"5px",paddingBottom:"5px"}),icon:(0,l.css)({marginRight:"10px"}),linkWrap:(0,l.css)({})});var Te=n(3241);function De(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function Ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $e(e){for(var t=1;t{const{height:t,timeZone:n,logsFrame:i,width:u,labels:d}=e,p=(0,C.useTheme2)(),g={section:(0,l.css)({position:"relative"}),tableWrap:(0,l.css)({".cellActions":{display:"none !important"}})},[h,f]=(0,r.useState)(void 0),{columns:v,visible:m,setVisible:b,setFilteredColumns:y,setColumns:S,clearSelectedLine:E,columnWidthMap:P,setColumnWidthMap:j}=w(),{selectedLine:F}=ae(),[_]=(0,r.useState)(F),T=Y(S),D=(0,s.getTemplateSrv)(),N=(0,r.useMemo)((()=>D.replace.bind(D)),[D]),$=(0,r.useCallback)((e=>{if(!e.length)return e;const[t]=(0,o.applyFieldOverrides)({data:[e],timeZone:n,theme:p,replaceVariables:N,fieldConfig:{defaults:{custom:{}},overrides:[]}});for(const[n,l]of t.fields.entries()){var r,s;l.type=l.type===o.FieldType.string?null!==(r=Me(l))&&void 0!==r?r:o.FieldType.string:l.type,l.config=Ie($e({},l.config),{custom:$e({inspect:!0,filterable:!0,headerComponent:t=>a().createElement(L,null,a().createElement(Le,{headerProps:Ie($e({},t),{fieldIndex:n}),openColumnManagementDrawer:()=>b(!0),slideLeft:0!==n?e=>T(e,n,n-1):void 0,slideRight:n!==e.fields.length-1?e=>T(e,n,n+1):void 0,autoColumnWidths:Object.keys(P).length>0?()=>{j({})}:void 0})),width:null!==(s=P[l.name])&&void 0!==s?s:We(l,n,v,u,t.fields.length,i),cellOptions:Ve(l,n,d,i)},l.config.custom),filterable:!0})}return t}),[n,p,d,u,N,b,P]);(0,r.useEffect)((()=>{const e=function(){var e,t=(e=function*(){const e=(t=i.raw).fields.filter((e=>{var n,r,a;const i="json.RawMessage"===(null===(n=e.typeInfo)||void 0===n?void 0:n.frame)&&"labels"===e.name&&(null==t||null===(r=t.meta)||void 0===r?void 0:r.type)!==o.DataFrameType.LogLines,s="labels"===e.name&&e.type===o.FieldType.other&&(null==t||null===(a=t.meta)||void 0===a?void 0:a.type)===o.DataFrameType.LogLines;return i||s})).flatMap((e=>[{id:"extractFields",options:{format:"json",keepTime:!1,replace:!1,source:e.name}}]));var t;const n=function(e){let t={};for(const n in e)t[n]=!0;return Object.keys(e).length>0?{id:"organize",options:{indexByName:e,includeByName:t}}:null}(function(e){let t={};return Object.keys(e).filter((t=>e[t].active)).forEach((n=>{const r=e[n].index;void 0!==r&&(t[n]=r)})),t}(v));if(n)e.push(n);else{const t={time:i.timeField,body:i.bodyField,extraFields:i.extraFields};t&&void 0!==t.body&&void 0!==t.time&&e.push(function(e){return{id:"organize",options:{indexByName:{[e.time.name]:0,[e.body.name]:1},includeByName:{[e.body.name]:!0,[e.time.name]:!0}}}}(t))}if(e.length>0){const t=yield(0,x.lastValueFrom)((0,o.transformDataFrame)(e,[i.raw])),n=$(t[0]);f(n)}else f($(i.raw))},function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){De(i,r,a,s,l,"next",e)}function l(e){De(i,r,a,s,l,"throw",e)}s(void 0)}))});return function(){return t.apply(this,arguments)}}();e()}),[i.raw,i.bodyField,i.timeField,i.extraFields,$,v]),(0,r.useEffect)((()=>{_&&F&&E()}),[_,E,F]);const I=i.raw.fields.find((e=>e.name===(0,c.po)(i))),B=null==I?void 0:I.values.findIndex((e=>e===(null==_?void 0:_.id))),A=B&&-1!==B?B:void 0;if(!h)return a().createElement(a().Fragment,null);return a().createElement("div",{"data-testid":ce.b.table.wrapper,className:g.section},m&&a().createElement(C.Drawer,{size:"sm",onClose:()=>{b(!1),y(v)}},a().createElement(X,null)),a().createElement("div",{className:g.tableWrap},a().createElement(k,null,a().createElement(O.ScrollSync,{horizontal:!0,vertical:!1,proportional:!1},a().createElement(Be,{logsFrame:i,selectedLine:A,data:h,height:t,width:u,onResize:(0,Te.debounce)(((e,t)=>{const n=Object.keys(v).filter((e=>v[e].active)).find((t=>t===e));if(n&&t>0){const e=$e({},P);e[n]=t,j(e)}}),100)})))))};function Me(e){if(e.name){const t=e.name.toLowerCase();if("date"===t||"time"===t)return o.FieldType.time}for(let t=0;t({options:{critical:{color:"#705da0",index:0},crit:{color:"#705da0",index:1},error:{color:"#e24d42",index:2},err:{color:"#e24d42",index:3},eror:{color:"#e24d42",index:4},warning:{color:"#FF9900",index:5},warn:{color:"#FF9900",index:6},info:{color:"#7eb26d",index:7},debug:{color:"#1f78c1",index:8},trace:{color:"#6ed0e0",index:9}},type:o.MappingType.ValueToText});function Ve(e,t,n,r){return e.name===(0,c.Il)(r)?{cellComponent:e=>a().createElement(Oe,Ie($e({},e),{fieldIndex:t,labels:n[e.rowIndex]})),type:C.TableCellDisplayMode.Custom}:{cellComponent:e=>a().createElement(pe,Ie($e({},e),{fieldIndex:t})),type:C.TableCellDisplayMode.Custom}}function We(e,t,n,r,a,i){var s,l;const u=a<=2?r:Math.min(r/2),d=0===t?50:0;if(e.type===o.FieldType.time)return 200+d;const p=n[e.name];if(void 0===p)return;var g;const h=Math.max(null!==(g=p.maxLength)&&void 0!==g?g:0,e.name.length);return p.maxLength?Math.min(Math.max(6.5*h+95+d,90+d),u):e.name!==(0,c.Il)(i)?Math.min(Math.max(6.5*(null!==(f=null===(l=e.values)||void 0===l||null===(s=l[0])||void 0===s?void 0:s.length)&&void 0!==f?f:80)+95+d,90+d),u):void 0;var f}var ze=n(5540);const He=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3,})?(?:Z|[-+]\d{2}:?\d{2})$/,Qe=e=>{const{logsFrame:t}=ae(),[n,i]=(0,r.useState)({width:0,height:0});(0,ze.w)({ref:e.panelWrap,onResize:()=>{const t=e.panelWrap.current;t&&(n.width===t.clientWidth&&n.height===t.clientHeight||i({width:t.clientWidth,height:t.clientHeight}))}});const s={section:(0,l.css)({position:"relative"})},c=(0,o.getTimeZone)(),u=(0,r.useCallback)((t=>{const n=e.urlColumns;return(null==n?void 0:n.length)&&Object.values(n).forEach(((e,n)=>{t[e]&&(t[e].active=!0,t[e].index=n)})),t}),[e.urlColumns]);if(!t||!t.raw.length)return null;var d;const p=null!==(d=t.getLogFrameLabelsAsLabels())&&void 0!==d?d:[],g=t?t.raw.length:0;let h=function(e,t){let n={};const r=new Map,a=function(e){const t=new Map;return e.forEach((e=>{Object.keys(e).forEach((n=>{if(t.has(n)){const r=t.get(n),a=null==r?void 0:r.valueSet,i=null==r?void 0:r.maxLength;a&&!(null==a?void 0:a.has(e[n]))&&(null==a||a.add(e[n]),i&&e[n].length>i&&t.set(n,{maxLength:e[n].length,valueSet:a}))}else t.set(n,{maxLength:e[n].length,valueSet:new Set([e[n]])})}))})),t}(t),i=e?e.length:0;(null==t?void 0:t.length)&&i&&(t.forEach((e=>{Object.keys(e).forEach((e=>{var t;const n=a.get(e);var i;const s=null!==(i=null==n||null===(t=n.valueSet)||void 0===t?void 0:t.size)&&void 0!==i?i:0;if(r.has(e)){const t=r.get(e);t&&((null==t?void 0:t.active)?r.set(e,{percentOfLinesWithLabel:t.percentOfLinesWithLabel+1,active:!0,index:t.index,cardinality:s,maxLength:null==n?void 0:n.maxLength}):r.set(e,{percentOfLinesWithLabel:t.percentOfLinesWithLabel+1,active:!1,index:void 0,cardinality:s,maxLength:null==n?void 0:n.maxLength}))}else r.set(e,{percentOfLinesWithLabel:1,active:!1,index:void 0,cardinality:s,maxLength:null==n?void 0:n.maxLength})}))})),n=Object.fromEntries(r),Object.keys(n).forEach((e=>{n[e].percentOfLinesWithLabel=Ke(n[e].percentOfLinesWithLabel,i)})));return n}(t.raw,p);const f={time:t.timeField,body:t.bodyField,extraFields:t.extraFields};if(f){!function(e,t,n){e.forEach((e=>{var r,a;if(!e)return;const i=null===(r=t[e.name])||void 0===r?void 0:r.active,s=null===(a=t[e.name])||void 0===a?void 0:a.index;t[e.name]=i&&void 0!==s?{percentOfLinesWithLabel:Ke(e.values.filter((e=>null!=e)).length,n),active:!0,index:s,cardinality:n}:{percentOfLinesWithLabel:Ke(e.values.filter((e=>null!=e)).length,n),active:!1,index:void 0,cardinality:n}}))}([f.time,f.body,...f.extraFields],h,g),h=u(h);!function(e,t,n){var r,a;if(0===e.length){var i,s,l,o,c,u;if(null===(i=t.body)||void 0===i?void 0:i.name)n[null===(l=t.body)||void 0===l?void 0:l.name].active=!0,n[null===(o=t.body)||void 0===o?void 0:o.name].index=1;if(null===(s=t.time)||void 0===s?void 0:s.name)n[null===(c=t.time)||void 0===c?void 0:c.name].active=!0,n[null===(u=t.time)||void 0===u?void 0:u.name].index=0}if((null===(r=t.time)||void 0===r?void 0:r.name)&&(null===(a=t.body)||void 0===a?void 0:a.name)){var d,p;n[null===(d=t.body)||void 0===d?void 0:d.name].type="BODY_FIELD",n[null===(p=t.time)||void 0===p?void 0:p.name].type="TIME_FIELD"}t.extraFields.length&&t.extraFields.forEach((e=>{var t;(null===(t=e.config.links)||void 0===t?void 0:t.length)&&(n[e.name].type="LINK_FIELD")}))}(Object.keys(h).filter((e=>h[e].active)),f,h)}return a().createElement("section",{className:s.section},a().createElement(y,{setUrlTableBodyState:e.setUrlTableBodyState,logsFrame:t,initialColumns:h,setUrlColumns:e.setUrlColumns,clearSelectedLine:e.clearSelectedLine,urlTableBodyState:e.urlTableBodyState,showColumnManagementDrawer:e.showColumnManagementDrawer,isColumnManagementActive:e.isColumnManagementActive},a().createElement(Ae,{logsFrame:t,timeZone:c,height:n.height-50,width:n.width-25,labels:p})))},Ke=(e,t)=>Math.ceil(100*e/t);function Ge(e){let t=(0,o.guessFieldTypeFromValue)(e);return"string"===t&&He.test(e)&&(t=o.FieldType.time),t}const Ue=({dataFrame:e,setUrlColumns:t,urlColumns:n,addFilter:r,selectedLine:i,timeRange:s,panelWrap:l,clearSelectedLine:o,setUrlTableBodyState:u,urlTableBodyState:d,showColumnManagementDrawer:p,isColumnManagementActive:g})=>{if(!e)return null;const h=(0,c.Os)(e);return h?a().createElement(re,{addFilter:r,selectedLine:i,timeRange:s,logsFrame:h},a().createElement(Qe,{urlTableBodyState:d,setUrlColumns:t,setUrlTableBodyState:u,urlColumns:n,panelWrap:l,clearSelectedLine:o,showColumnManagementDrawer:p,isColumnManagementActive:g})):null};var qe=n(9641),Je=n(9405),Ye=n(1532),Xe=n(7352),Ze=n(376),et=n(5700),tt=n(4351);function nt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}let at=["timestamp","body","Time","Line"];class it extends i.Bs{onActivate(){this.setState({menu:new et.GD({addInvestigationsLink:!1})}),this.onActivateSyncDisplayedFieldsWithUrlColumns()}getParentScene(){return i.jh.getAncestor(this,bt)}constructor(e){super(rt(function(e){for(var t=1;t{this.setState({isColumnManagementActive:e})})),nt(this,"onActivateSyncDisplayedFieldsWithUrlColumns",(()=>{const e=new URLSearchParams(s.locationService.getLocation().search).get("urlColumns"),t=(0,p.dU)(e),n=this.getParentScene();at=t&&this.urlHasDefaultUrlColumns(t)?this.updateDefaultUrlColumns(t):at,at.length,n.setState({urlColumns:Array.from(new Set([...at,...n.state.displayedFields]))})})),nt(this,"updateDisplayedFields",(e=>{const t=this.getParentScene();at=this.updateDefaultUrlColumns(e);const n=Array.from(new Set([...e||[]])).filter((e=>!at.includes(e)));t.setState({displayedFields:n}),(0,tt.ZF)(this,t.state.displayedFields)})),nt(this,"urlHasDefaultUrlColumns",(e=>at.some((t=>e.includes(t))))),nt(this,"updateDefaultUrlColumns",(e=>(at=at.reduce(((t,n)=>{if(e.includes(n)){t[e.indexOf(n)]=n}return t}),[]),at))),this.addActivationHandler(this.onActivate.bind(this))}}nt(it,"Component",(({model:e})=>{const t=(0,C.useStyles2)(st),n=i.jh.getAncestor(e,bt),{data:s}=i.jh.getData(e).useState(),{selectedLine:l,urlColumns:o,visualizationType:c,tableLogLineState:u}=n.useState(),{menu:d,isColumnManagementActive:p}=e.useState(),g=i.jh.getTimeRange(e),{value:h}=g.useState(),f=(0,Xe.tn)(s),v=(0,r.useRef)(null);return a().createElement("div",{className:t.panelWrapper,ref:v},a().createElement(C.PanelChrome,{loadingState:null==s?void 0:s.state,title:"Logs",menu:d?a().createElement(d.Component,{model:d}):void 0,showMenuAlways:!0,actions:a().createElement(a().Fragment,null,a().createElement(C.Button,{onClick:()=>e.showColumnManagementDrawer(!0),variant:"secondary",size:"sm"},"Manage columns"),a().createElement(qe.C,{vizType:c,onChange:n.setVisualizationType}))},f&&a().createElement(Ue,{panelWrap:v,addFilter:t=>{const r=(0,Ze.OE)(f,t.key,e);(0,Je.XI)(t,n,r)},timeRange:h,selectedLine:l,urlColumns:null!=o?o:[],setUrlColumns:t=>{(0,Ye.n)(t,n.state.urlColumns)||(n.setState({urlColumns:t}),e.updateDisplayedFields(t))},dataFrame:f,clearSelectedLine:()=>{n.state.selectedLine&&n.clearSelectedLine()},setUrlTableBodyState:e=>{n.setState({tableLogLineState:e})},urlTableBodyState:u,showColumnManagementDrawer:e.showColumnManagementDrawer,isColumnManagementActive:p})))}));const st=e=>({panelWrapper:(0,l.css)({width:"100%",height:"100%",label:"panel-wrapper-table"})});var lt=n(4509),ot=n(8996),ct=n(6177),ut=n.n(ct),dt=n(5553),pt=n(72),gt=n(7478);function ht(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class ft extends i.Bs{clearVariable(){(0,dt.Rr)(this).updateFilters([],{skipPublish:!0}),this.setState({lineFilter:""})}getOperator(){if(this.state.regex&&this.state.exclusive)return ie.cK.negativeRegex;if(this.state.regex&&!this.state.exclusive)return ie.cK.regex;if(!this.state.regex&&this.state.exclusive)return ie.cK.negativeMatch;if(!this.state.regex&&!this.state.exclusive)return ie.cK.match;throw new Error("getOperator: failed to determine operation")}getFilterKey(){return this.state.caseSensitive?ie.ld.caseSensitive:ie.ld.caseInsensitive}getFilter(){return(0,dt.Rr)(this).state.filters[0]}updateFilter(e,t=!0){this.updateInputState(e),t?this.updateVariableDebounced(e):this.updateVariable(e)}updateInputState(e){this.setState({lineFilter:e})}constructor(e){var t,n,r,a;super(function(e){for(var t=1;t{const e=this.getFilter();if(e)return this.setState({lineFilter:e.value,regex:e.operator===ie.cK.regex||e.operator===ie.cK.negativeRegex,caseSensitive:e.key===ie.ld.caseSensitive,exclusive:e.operator===ie.cK.negativeMatch||e.operator===ie.cK.negativeRegex}),()=>{this.clearFilter()}})),ht(this,"clearFilter",(()=>{this.updateVariableDebounced.cancel(),this.updateFilter("",!1)})),ht(this,"onToggleExclusive",(e=>{(0,tt.Bq)(e),this.setState({exclusive:e}),this.updateFilter(this.state.lineFilter,!1)})),ht(this,"onSubmitLineFilter",(()=>{(0,gt.bN)(),this.updateFilter(this.state.lineFilter,!1),this.updateVariableDebounced.flush();const e=(0,dt.Gk)(this),t=e.state.filters,n=this.getFilter();e.updateFilters([...t,n]),this.clearVariable()})),ht(this,"handleChange",(e=>{this.updateInputState(e.target.value)})),ht(this,"handleEnter",(e=>{"Enter"===e.key&&this.state.lineFilter&&this.onSubmitLineFilter()})),ht(this,"onCaseSensitiveToggle",(e=>{const t=e===ie.ld.caseSensitive;this.setState({caseSensitive:t}),(0,tt.Xo)(t),this.updateFilter(this.state.lineFilter,!1)})),ht(this,"onRegexToggle",(e=>{const t="regex"===e;this.setState({regex:t}),(0,tt.GL)(t),this.updateFilter(this.state.lineFilter,!1)})),ht(this,"updateVariableDebounced",ut()((e=>{this.updateVariable(e)}),1e3)),ht(this,"updateVariable",(e=>{this.updateVariableDebounced.flush();const t=(0,dt.Rr)(this),n=(0,dt.Gk)(this),r={key:this.getFilterKey(),keyLabel:n.state.filters.length.toString(),operator:this.getOperator(),value:e};t.updateFilters([r]),(0,lt.EE)(lt.NO.service_details,lt.ir.service_details.search_string_in_logs_changed,{searchQueryLength:e.length,containsLevel:e.toLowerCase().includes("level"),operator:r.operator,caseSensitive:r.key})})),this.addActivationHandler(this.onActivate)}}function vt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mt(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}ht(ft,"Component",(function({model:e}){const{lineFilter:t,caseSensitive:n,regex:a,exclusive:i}=e.useState(),[s,l]=(0,r.useState)(!1);return(0,pt._)({exclusive:i,lineFilter:t,caseSensitive:n,regex:a,onSubmitLineFilter:e.onSubmitLineFilter,handleEnter:e.handleEnter,onInputChange:e.handleChange,updateFilter:e.updateFilter,onCaseSensitiveToggle:e.onCaseSensitiveToggle,onRegexToggle:e.onRegexToggle,setExclusive:e.onToggleExclusive,onClearLineFilter:e.clearFilter,focus:s,setFocus:l,type:"editor"})}));class bt extends i.Bs{getUrlState(){var e;const t=null!==(e=this.state.urlColumns)&&void 0!==e?e:[],n=this.state.selectedLine,r=this.state.visualizationType;var a,i;const s=null!==(i=null!==(a=this.state.displayedFields)&&void 0!==a?a:(0,tt.N$)(this))&&void 0!==i?i:[];return{urlColumns:JSON.stringify(t),selectedLine:JSON.stringify(n),visualizationType:JSON.stringify(r),displayedFields:JSON.stringify(s),tableLogLineState:JSON.stringify(this.state.tableLogLineState)}}updateFromUrl(e){const t={};try{if("string"==typeof e.urlColumns){const n=(0,p.aJ)(JSON.parse(e.urlColumns));n!==this.state.urlColumns&&(t.urlColumns=n)}if("string"==typeof e.selectedLine){const n=(0,p.lb)(JSON.parse(e.selectedLine));if(n){const e=n;e!==this.state.selectedLine&&(t.selectedLine=e)}}if("string"==typeof e.visualizationType){const n=(0,p.v_)(JSON.parse(e.visualizationType));n&&n!==this.state.visualizationType&&(t.visualizationType=n)}if("string"==typeof e.displayedFields){const n=(0,p.aJ)(JSON.parse(e.displayedFields));n&&n.length&&(t.displayedFields=n)}if("string"==typeof e.tableLogLineState){const n=JSON.parse(e.tableLogLineState);n!==m.labels&&n!==m.text||(t.tableLogLineState=n)}}catch(e){u.v.error(e,{msg:"LogsListScene: updateFromUrl unexpected error"})}Object.keys(t).length&&this.setState(t)}clearSelectedLine(){this.setState({selectedLine:void 0})}onActivate(){const e=new URLSearchParams(s.locationService.getLocation().search);this.setStateFromUrl(e),this.state.panel||this.updateLogsPanel(),this._subs.add(this.subscribeToState(((e,t)=>{e.visualizationType!==t.visualizationType&&this.updateLogsPanel()})))}setStateFromUrl(e){const t=e.get("selectedLine"),n=e.get("urlColumns"),r=e.get("visualizationType");var a;const i=null!==(a=e.get("displayedFields"))&&void 0!==a?a:JSON.stringify((0,tt.N$)(this)),s=e.get("tableLogLineState");this.updateFromUrl({selectedLine:t,urlColumns:n,vizType:r,displayedFields:i,tableLogLineState:s})}getVizPanel(){return this.logsPanelScene=new ot.o({}),new i.G1({direction:"column",children:"logs"===this.state.visualizationType?[new i.G1({children:[new i.vA({body:new ft({lineFilter:this.state.lineFilter}),xSizing:"fill"})]}),new i.vA({height:"calc(100vh - 220px)",body:this.logsPanelScene})]:[new i.vA({body:new ft({lineFilter:this.state.lineFilter}),xSizing:"fill"}),new i.vA({height:"calc(100vh - 220px)",body:new it({})})]})}constructor(e){super(mt(function(e){for(var t=1;t{this.setState({displayedFields:[]}),this.logsPanelScene&&this.logsPanelScene.clearDisplayedFields()})),vt(this,"setLogsVizOption",((e={})=>{this.logsPanelScene&&this.logsPanelScene.setLogsVizOption(e)})),vt(this,"updateLogsPanel",(()=>{if(this.setState({panel:this.getVizPanel()}),this.state.panel){const e=i.jh.findDescendents(this.state.panel,ft);if(e.length){const t=e[0];this._subs.add(t.subscribeToState(((e,t)=>{e.lineFilter!==t.lineFilter&&this.setState({lineFilter:e.lineFilter})})))}}})),vt(this,"setVisualizationType",(e=>{this.setState({visualizationType:e}),(0,lt.EE)(lt.NO.service_details,lt.ir.service_details.logs_visualization_toggle,{visualisationType:e}),(0,tt.o5)(e)})),this.addActivationHandler(this.onActivate.bind(this))}}vt(bt,"Component",(({model:e})=>{const{panel:t}=e.useState();if(t)return a().createElement("div",{className:yt.panelWrapper},a().createElement(t.Component,{model:t}))}));const yt={panelWrapper:(0,l.css)({'section > div[class$="panel-content"]':(0,l.css)({contain:"none",overflow:"auto"})})}},8996:(e,t,n)=>{n.d(t,{o:()=>D});var r=n(9736),a=n(7781),i=n(4351),s=n(5959),l=n.n(s),o=n(8632),c=n(2007),u=n(9405),d=n(376),p=n(20),g=n(4509),h=n(5553),f=n(5002);const v=({onClick:e})=>{const[t,n]=(0,s.useState)(!1);(0,s.useEffect)((()=>{let e;return t&&(e=setTimeout((()=>{n(!1)}),2e3)),()=>{clearTimeout(e)}}),[t]);const r=(0,s.useCallback)(((t,r)=>{e(t,r),n(!0)}),[e]);return l().createElement(c.IconButton,{"aria-label":t?"Copied":"Copy link to log line",tooltip:t?"Copied":"Copy link to log line",tooltipPlacement:"top",variant:t?"primary":"secondary",size:"md",name:t?"check":"share-alt",onClick:r})};var m=n(2649),b=n(71),y=n(5700),S=n(7352),w=n(6854),O=n(8531),x=n(8428),E=n(5953),C=n(5719),P=n(7191);const k=({clearFilters:e,error:t})=>l().createElement(P.R,null,l().createElement("div",null,l().createElement("p",null,t),l().createElement(c.Button,{variant:"secondary",onClick:e},"Clear filters")));var j=n(5548),F=n(2165);function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(e){for(var t=1;t{var n,r,i,s,l,o;(null===(r=e.$data)||void 0===r||null===(n=r.state.data)||void 0===n?void 0:n.state)===a.LoadingState.Error?this.handleLogsError(null===(o=e.$data)||void 0===o?void 0:o.state.data):(null===(s=e.$data)||void 0===s||null===(i=s.state.data)||void 0===i?void 0:i.state)===a.LoadingState.Done&&(0,F.y2)(null===(l=e.$data)||void 0===l?void 0:l.state.data.series)?this.handleNoData():this.state.error&&this.clearLogsError();e.logsCount!==t.logsCount&&(this.state.body?this.state.body.setState({title:this.getTitle(e.logsCount)}):this.setState({body:this.getLogsPanel({wrapLogMessage:this.state.wrapLogMessage,prettifyLogMessage:this.state.wrapLogMessage,sortOrder:this.state.sortOrder})}))})))}handleLogsError(e){var t;const n=(null===(t=e.errors)||void 0===t?void 0:t.length)?e.errors[0]:e.error,r=null==n?void 0:n.message;var a,i;r&&E.v.error(new Error("Logs Panel error"),{msg:r,status:null!==(a=n.statusText)&&void 0!==a?a:"N/A",type:null!==(i=n.type)&&void 0!==i?i:"N/A"});let s="Unexpected error response. Please review your filters or try a different time range.";(null==r?void 0:r.includes("parse error"))?s="Logs could not be retrieved due to invalid filter parameters. Please review your filters and try again.":(null==r?void 0:r.includes("response larger than the max message size"))&&(s="The response is too large to process. Try narrowing your search or using filters to reduce the data size."),this.showLogsError(s)}handleNoData(){this.showLogsError("No logs match your search. Please review your filters or try a different time range.")}showLogsError(e){var t;const n=null!==(t=this.state.logsVolumeCollapsedByError)&&void 0!==t?t:!(0,i.Rf)("collapsed");if(this.setState({error:e,logsVolumeCollapsedByError:n}),n){var a;null===(a=r.jh.findByKeyAndType(this,b.b,b._).state.panel)||void 0===a||a.setState({collapsed:!0})}}clearLogsError(){if(this.state.logsVolumeCollapsedByError){var e;null===(e=r.jh.findByKeyAndType(this,b.b,b._).state.panel)||void 0===e||e.setState({collapsed:!1})}this.setState({error:void 0,logsVolumeCollapsedByError:void 0})}setLogsVizOption(e={}){if(this.state.body){if("sortOrder"in e&&e.sortOrder!==this.state.body.state.options.sortOrder){const e=r.jh.getData(this),t=e instanceof r.dt?e:r.jh.findDescendents(e,r.dt)[0];t&&t.runQueries()}this.state.body.onOptionsChange(e)}}getParentScene(){return r.jh.getAncestor(this,o.i)}getTitle(e){var t;const n=(0,a.getValueFormat)("short"),r=void 0!==e?n(e,0):void 0;return void 0!==r?`Logs (${r.text}${null===(t=r.suffix)||void 0===t?void 0:t.trim()})`:"Logs"}getLogsPanel(e){const t=this.getParentScene(),n=t.state.visualizationType,a=r.jh.getAncestor(this,S.Mn);var s,o,c;return r.d0.logs().setTitle(this.getTitle(a.state.logsCount)).setOption("showTime",!0).setOption("onClickFilterLabel",this.handleLabelFilterClick).setOption("onClickFilterOutLabel",this.handleLabelFilterOutClick).setOption("isFilterLabelActive",this.handleIsFilterLabelActive).setOption("onClickFilterString",this.handleFilterStringClick).setOption("onClickFilterOutString",this.handleFilterOutStringClick).setOption("onClickShowField",this.onClickShowField).setOption("onClickHideField",this.onClickHideField).setOption("displayedFields",t.state.displayedFields).setOption("sortOrder",null!==(s=e.sortOrder)&&void 0!==s?s:(0,m.zQ)()).setOption("wrapLogMessage",null!==(o=e.wrapLogMessage)&&void 0!==o?o:Boolean((0,i.YM)("wrapLogMessage",!1))).setOption("prettifyLogMessage",null!==(c=e.prettifyLogMessage)&&void 0!==c?c:Boolean((0,i.YM)("wrapLogMessage",!1))).setMenu(new y.GD({investigationOptions:{type:"logs",getLabelName:()=>`Logs: ${(0,C.Mq)(a)}`}})).setOption("showLogContextToggle",!0).setShowMenuAlways(!0).setOption("enableInfiniteScrolling",!0).setOption("onNewLogsReceived",this.updateVisibleRange).setOption("logRowMenuIconsAfter",[l().createElement(v,{onClick:this.handleShareLogLineClick,key:0})]).setHeaderActions(new m.ZB({visualizationType:n,onChangeVisualizationType:t.setVisualizationType})).build()}handleLabelFilter(e,t,n,r){const a=(0,d.OE)(n,e,this);(0,u.Qt)(e,t,r,this,a),(0,g.EE)(g.NO.service_details,g.ir.service_details.logs_detail_filter_applied,{filterType:a,key:e,action:r})}constructor(e){super(_({sortOrder:(0,m.zQ)(),wrapLogMessage:Boolean((0,i.YM)("wrapLogMessage",!1)),error:void 0},e)),L(this,"_urlSync",new r.So(this,{keys:["sortOrder","wrapLogMessage"]})),L(this,"onClickShowField",(e=>{const t=this.getParentScene();if(-1===t.state.displayedFields.indexOf(e)&&this.state.body){const n=[...t.state.displayedFields,e];this.setLogsVizOption({displayedFields:n}),t.setState({displayedFields:n}),(0,i.ZF)(this,t.state.displayedFields),(0,g.EE)(g.NO.service_details,g.ir.service_details.logs_toggle_displayed_field)}})),L(this,"onClickHideField",(e=>{const t=this.getParentScene();if(t.state.displayedFields.indexOf(e)>=0&&this.state.body){const n=t.state.displayedFields.filter((t=>e!==t));this.setLogsVizOption({displayedFields:n}),t.setState({displayedFields:n}),(0,i.ZF)(this,t.state.displayedFields),(0,g.EE)(g.NO.service_details,g.ir.service_details.logs_toggle_displayed_field)}})),L(this,"clearDisplayedFields",(()=>{this.state.body&&(this.setLogsVizOption({displayedFields:[]}),(0,i.ZF)(this,[]))})),L(this,"updateVisibleRange",(e=>{var t,n;const a=r.jh.getAncestor(this,S.Mn);a.setState({logsCount:e[0].length}),(null===(n=a.state.$data)||void 0===n||null===(t=n.state.data)||void 0===t?void 0:t.series)&&a.state.$data.setState(T(_({},a.state.$data.state),{data:T(_({},a.state.$data.state.data),{series:e})}));r.jh.findByKeyAndType(this,b.b,b._).updateVisibleRange(e)})),L(this,"handleShareLogLineClick",((e,t)=>{if((null==t?void 0:t.rowId)&&this.state.body){const e=this.getParentScene(),n=(0,f.Ki)(t);(0,f.Dk)((0,f.gW)("panelState",{logs:{id:t.uid,displayedFields:e.state.displayedFields}},n))}})),L(this,"handleLabelFilterClick",((e,t,n)=>{this.handleLabelFilter(e,t,n,"toggle")})),L(this,"handleLabelFilterOutClick",((e,t,n)=>{this.handleLabelFilter(e,t,n,"exclude")})),L(this,"handleIsFilterLabelActive",((e,t)=>{const n=(0,h.bY)(p.MB,this),r=(0,h.bY)(p.mB,this),a=(0,h.bY)(p._Y,this),i=(0,h.bY)(p._P,this),s=n=>n&&n.state.filters.findIndex((n=>"="===n.operator&&n.key===e&&n.value===t))>=0;return s(n)||(n=>{if(n){const r=n.state.filters.find((t=>"="===t.operator&&t.key===e));if(r){return(0,h.bu)(r,e).value===t}}return!1})(r)||s(a)||s(i)})),L(this,"handleFilterOutStringClick",(e=>{const t=(0,h.Gk)(this);t&&(t.setState({filters:[...t.state.filters,{operator:w.cK.negativeMatch,value:e,key:w.ld.caseSensitive,keyLabel:t.state.filters.length.toString()}]}),(0,g.EE)(g.NO.service_details,g.ir.service_details.logs_popover_line_filter,{selectionLength:e.length}))})),L(this,"handleFilterStringClick",(e=>{const t=(0,h.Gk)(this);t&&(t.setState({filters:[...t.state.filters,{operator:w.cK.match,value:e,key:w.ld.caseSensitive,keyLabel:t.state.filters.length.toString()}]}),(0,g.EE)(g.NO.service_details,g.ir.service_details.logs_popover_line_filter,{selectionLength:e.length}))})),this.addActivationHandler(this.onActivate.bind(this))}}L(D,"Component",(({model:e})=>{const{body:t,error:n}=e.useState(),r=(0,c.useStyles2)(y.K_);return t?l().createElement("span",{className:r.panelWrapper},!n&&l().createElement(t.Component,{model:t}),n&&l().createElement(k,{error:n,clearFilters:()=>(0,j.rA)(t)})):l().createElement(c.LoadingPlaceholder,{text:"Loading..."})}))},71:(e,t,n)=>{n.d(t,{_:()=>D,b:()=>T});var r,a,i,s=n(5959),l=n.n(s),o=n(9736),c=n(2007),u=n(1475),d=n(7985),p=n(20),g=n(4509),h=n(6838),f=n(5570),v=n(7781),m=n(5553),b=n(1532),y=n(5700),S=n(7352),w=n(2165),O=n(4351),x=n(2661),E=n(8531),C=n(5719);class P extends o.Bs{}i=function({model:e}){const{component:t,isLoading:n}=(0,E.usePluginComponent)("grafana-adaptivelogs-app/temporary-exemptions/v1"),r=(0,m.bY)(p.MB,e),{filters:a}=r.useState(),i=a.map((({key:e,operator:t,value:n})=>({key:e,operator:t,value:n}))),s=(0,C.U4)(e);return n||!t?null:l().createElement(t,{dataSourceUid:s,streamSelector:i,contextHints:["explorelogs","logvolumepanel","headeraction"]})},(a="Component")in(r=P)?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i;var k=n(9405),j=n(2085);function F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e){for(var t=1;t{(0,b.B)(e.filters,t.filters)||this.setState({panel:this.getVizPanel()})}))),this._subs.add(t.subscribeToState(((e,t)=>{(0,b.B)(e.filters,t.filters)||this.setState({panel:this.getVizPanel()})}))),this._subs.add(this.subscribeToEvent(k.Of,(e=>{if(e.key===p.e4){const e=o.jh.findObject(this,(e=>e instanceof j.qV));if(e instanceof j.qV){const e=(0,m.iw)(this);e.setState({filters:e.state.filters})}}})))}getTitle(e,t){var n,r;var a;const i=null!==(a=null===(n=o.jh.getAncestor(this,x.P).state.ds)||void 0===n?void 0:n.maxLines)&&void 0!==a?a:d.by,s=(0,v.getValueFormat)("short"),l=void 0!==e?s(e,0):void 0;if(void 0===e&&void 0!==t&&tthis.extendTimeSeriesLegendBus(t)}),this._subs.add(a.subscribeToState(((e,t)=>{e.collapsed!==t.collapsed&&(this.updateContainerHeight(a),(0,O.RN)("collapsed",e.collapsed?"true":void 0))}))),this._subs.add(null===(e=a.state.$data)||void 0===e?void 0:e.subscribeToState((e=>{var t,r,i,s;if((null===(t=e.data)||void 0===t?void 0:t.state)===v.LoadingState.Done){var l,o;if((null===(i=n.state.$data)||void 0===i||null===(r=i.state.data)||void 0===r?void 0:r.state)!==v.LoadingState.Done||(null===(s=e.data.annotations)||void 0===s?void 0:s.length))this.displayVisibleRange();else this.updateVisibleRange(null===(o=n.state.$data)||void 0===o||null===(l=o.state.data)||void 0===l?void 0:l.series);(0,u.C6)(a,e.data.series,this)}}))),this._subs.add(null===(t=n.state.$data)||void 0===t?void 0:t.subscribeToState((e=>{var t;(null===(t=e.data)||void 0===t?void 0:t.state)===v.LoadingState.Done&&this.updateVisibleRange(e.data.series)}))),this._subs.add(n.subscribeToState(((e,t)=>{e.totalLogsCount===t.totalLogsCount&&void 0===e.logsCount||(this.state.panel?this.state.panel.setState({title:this.getTitle(e.totalLogsCount,e.logsCount)}):this.setState({panel:this.getVizPanel()}))}))),a}updateContainerHeight(e){const t=o.jh.getAncestor(e,o.G1),n=e.state.collapsed?35:Math.max(Math.round(.2*window.innerHeight),100);t.setState({minHeight:n,height:n,maxHeight:n})}updateVisibleRange(e=[]){this.updatedLogSeries=e,this.displayVisibleRange()}displayVisibleRange(){var e,t;const n=this.state.panel;if(!n||!(null===(e=n.state.$data)||void 0===e?void 0:e.state.data)||(null===(t=n.state.$data)||void 0===t?void 0:t.state.data.state)!==v.LoadingState.Done||!this.updatedLogSeries)return;const r=(0,w.z5)(this.updatedLogSeries);this.updatedLogSeries=null,n.state.$data.setState({data:_(L({},n.state.$data.state.data),{annotations:[(0,w.hy)(r.start,r.end)]})})}constructor(e){super(_(L({},e),{key:T})),F(this,"updatedLogSeries",null),F(this,"extendTimeSeriesLegendBus",(e=>{const t=(0,m.iw)(this);this._subs.add(null==t?void 0:t.subscribeToState((()=>{var e,t,n,r;const a=this.state.panel;(null==a||null===(t=a.state.$data)||void 0===t||null===(e=t.state.data)||void 0===e?void 0:e.series)&&(0,u.C6)(a,null==a||null===(r=a.state.$data)||void 0===r||null===(n=r.state.data)||void 0===n?void 0:n.series,this)}))),e.onToggleSeriesVisibility=(e,t)=>{const n=(0,f.PE)(e,this);this.publishEvent(new k.Of("legend","include",p.e4,e),!0),(0,g.EE)(g.NO.service_details,g.ir.service_details.level_in_logs_volume_clicked,{level:e,action:n})}})),this.addActivationHandler(this.onActivate.bind(this))}}F(D,"Component",(({model:e})=>{const{panel:t}=e.useState();if(!t)return;const n=(0,c.useStyles2)(y.K_);return l().createElement("span",{className:n.panelWrapper},l().createElement(t.Component,{model:t}))}))},7352:(e,t,n)=>{n.d(t,{AA:()=>Ue,DS:()=>Ge,Mn:()=>tt,rD:()=>Ye,UO:()=>Xe,nU:()=>Ze,dB:()=>et,TG:()=>Je,tn:()=>qe});var r=n(5959),a=n.n(r),i=n(7781),s=n(9736),l=n(2007),o=n(1475),c=n(7985),u=n(20),d=n(2152),p=n(7478),g=n(1532),h=n(6089),f=n(4509),v=n(9683),m=n(2661),b=n(8531),y=n(5002);function S(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function w(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){S(i,r,a,s,l,"next",e)}function l(e){S(i,r,a,s,l,"throw",e)}s(void 0)}))}}function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class x extends s.Bs{setIsOpen(e){this.setState({isOpen:e})}onCopyLink(e,t,r){e?(k(r||n.g.location.href),(0,b.reportInteraction)("grafana_explore_shortened_link_clicked",{isAbsoluteTime:t})):((0,y.Dk)(void 0!==r?`${window.location.protocol}//${window.location.host}${b.config.appSubUrl}${r}`:n.g.location.href),this.state.onCopyLink&&this.state.onCopyLink(e,t,r))}constructor(e){super(function(e){for(var t=1;t{const t=[{key:"normal",label:"Normal URL links",items:[{key:"copy-shortened-link",icon:"link",label:"Copy shortened URL",getUrl:()=>{},shorten:!0,absTime:!1},{key:"copy-link",icon:"link",label:"Copy URL",getUrl:()=>{},shorten:!1,absTime:!1}]},{key:"timesync",label:"Time-sync URL links (share with time range intact)",items:[{key:"copy-short-link-abs-time",icon:"clock-nine",label:"Copy absolute shortened URL",shorten:!0,getUrl:()=>j(void 0!==e.state.getSceneTimeRange?e.state.getSceneTimeRange():s.jh.getTimeRange(e)),absTime:!0},{key:"copy-link-abs-time",icon:"clock-nine",label:"Copy absolute URL",shorten:!1,getUrl:()=>j(void 0!==e.state.getSceneTimeRange?e.state.getSceneTimeRange():s.jh.getTimeRange(e)),absTime:!0}]}];return a().createElement(l.Menu,null,t.map((t=>a().createElement(l.MenuGroup,{key:t.key,label:t.label},t.items.map((t=>a().createElement(l.Menu.Item,{key:t.key,label:t.label,icon:t.icon,onClick:()=>{const n=t.getUrl();e.onCopyLink(t.shorten,t.absTime,n),e.setState({lastSelected:t})}})))))))})),O(x,"Component",(({model:e})=>{const{lastSelected:t,isOpen:n}=e.useState();return a().createElement(l.ButtonGroup,null,a().createElement(l.ToolbarButton,{tooltip:t.label,icon:t.icon,variant:"canvas",narrow:!0,onClick:()=>{const n=t.getUrl();e.onCopyLink(t.shorten,t.absTime,n)},"aria-label":"Copy shortened URL"},a().createElement("span",null,"Share")),a().createElement(l.Dropdown,{overlay:a().createElement(x.MenuActions,{model:e}),placement:"bottom-end",onVisibleChange:e.setIsOpen.bind(e)},a().createElement(l.ToolbarButton,{narrow:!0,variant:"canvas",isOpen:n,"aria-label":"Open copy link options"})))}));const E={key:"copy-link",label:"Copy shortened URL",icon:"share-alt",getUrl:()=>{},shorten:!0,absTime:!1};function C(e){let t=e.replace(`${window.location.protocol}//${window.location.host}${b.config.appSubUrl}`,"");return t.startsWith("/")?t.substring(1,t.length):t}const P=function(){var e=w((function*(e){const t=(0,b.getAppEvents)();try{return(yield(0,b.getBackendSrv)().post("/api/short-urls",{path:C(e)})).url}catch(e){console.error("Error when creating shortened link: ",e),t.publish({type:i.AppEvents.alertError.name,payload:["Error generating shortened link"]})}}));return function(t){return e.apply(this,arguments)}}(),k=function(){var e=w((function*(e){const t=(0,b.getAppEvents)(),n=yield P(e);n?((0,y.Dk)(n),t.publish({type:i.AppEvents.alertSuccess.name,payload:["Shortened link copied to clipboard"]})):t.publish({type:i.AppEvents.alertError.name,payload:["Error generating shortened link"]})}));return function(t){return e.apply(this,arguments)}}(),j=e=>{const t=(0,i.toUtc)(e.state.value.from),n=(0,i.toUtc)(e.state.value.to),r=b.locationService.getLocation(),a=i.urlUtil.getUrlSearchParams();return a.from=t.toISOString(),a.to=n.toISOString(),i.urlUtil.renderUrl(r.pathname,a)};var F=n(8632),L=n(3571),_=n(8072),T=n(6830),D=n(5659),N=n(5953);function $(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function I(e){var t,n;const{indexScene:r,pattern:a,type:i}=function(e){for(var t=1;te.pattern!==a));var u;const d=null!==(u=null===(t=c.filter((e=>"include"===e.type)))||void 0===t?void 0:t.length)&&void 0!==u?u:0;var g;const h=null!==(g=null===(n=c.filter((e=>"exclude"===e.type)))||void 0===n?void 0:n.length)&&void 0!==g?g:0;(0,f.EE)(f.NO.service_details,f.ir.service_details.pattern_selected,{type:i,includePatternsLength:d+("include"===i?1:0),excludePatternsLength:h+("exclude"===i?1:0)}),"undo"===i?l.setState({patterns:c}):l.setState({patterns:[...c,{pattern:a,type:i}]})}var B=n(7709),A=n(5719);const M=e=>({logsStatsRow:(0,h.css)({margin:`${e.spacing(1.15)}px 0`}),logsStatsRowActive:(0,h.css)({color:e.colors.primary.text,position:"relative"}),logsStatsRowLabel:(0,h.css)({display:"flex",marginBottom:"1px"}),logsStatsRowValue:(0,h.css)({flex:1,textOverflow:"ellipsis",overflow:"hidden"}),logsStatsRowCount:(0,h.css)({textAlign:"right",marginLeft:e.spacing(.75)}),logsStatsRowPercent:(0,h.css)({textAlign:"right",marginLeft:e.spacing(.75),width:e.spacing(4.5)}),logsStatsRowBar:(0,h.css)({height:e.spacing(.5),overflow:"hidden",background:e.colors.text.disabled}),logsStatsRowInnerBar:(0,h.css)({height:e.spacing(.5),overflow:"hidden",background:e.colors.primary.main})}),R=({active:e,count:t,proportion:n,value:r})=>{const i=(0,l.useStyles2)(M),s=`${Math.round(100*n)}%`,o={width:s};return a().createElement("div",{className:e?`${i.logsStatsRow} ${i.logsStatsRowActive}`:i.logsStatsRow},a().createElement("div",{className:i.logsStatsRowLabel},a().createElement("div",{className:i.logsStatsRowValue,title:r},r),a().createElement("div",{className:i.logsStatsRowCount},t),a().createElement("div",{className:i.logsStatsRowPercent},s)),a().createElement("div",{className:i.logsStatsRowBar},a().createElement("div",{className:i.logsStatsRowInnerBar,style:o})))};function V(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function W(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const z=e=>({logsStats:(0,h.css)({background:"inherit",color:e.colors.text.primary,wordBreak:"break-all",width:"fit-content",maxHeight:"40vh",overflowY:"auto",marginTop:e.spacing(1)}),logsStatsHeader:(0,h.css)({borderBottom:`1px solid ${e.colors.border.medium}`,display:"flex"}),logsStatsTitle:(0,h.css)({fontWeight:e.typography.fontWeightMedium,paddingRight:e.spacing(2),display:"inline-block",whiteSpace:"nowrap",textOverflow:"ellipsis",flexGrow:1}),logsStatsClose:(0,h.css)({cursor:"pointer"}),logsStatsBody:(0,h.css)({padding:"5px 0px"})}),H=e=>{const t=(0,l.useStyles2)(z),{stats:n,value:r}=e,i=n.slice(0,10);let s=i.find((e=>e.value===r)),o=n.slice(10);!s&&(s=o.find((e=>e.value===r)),o=o.filter((e=>e.value!==r)));const c=o.reduce(((e,t)=>e+t.count),0),u=i.reduce(((e,t)=>e+t.count),0)+c;let d=[...i];return c>0&&d.push({value:"Other",count:c,proportion:c/u}),d.sort(((e,t)=>t.count-e.count)),a().createElement("div",{className:t.logsStats},a().createElement("div",{className:t.logsStatsHeader},a().createElement("div",{className:t.logsStatsTitle},"From a sample of ",u," rows found")),a().createElement("div",{className:t.logsStatsBody},d.map((e=>a().createElement(R,W(function(e){for(var t=1;t{const o=function(e){const t=[];let n=e.indexOf("<_>");for(;-1!==n;)t.push(n),n=e.indexOf("<_>",n+1);return t}(t),[u,d]=(0,r.useState)(void 0),[p,g]=(0,r.useState)(!1),h=(0,l.useStyles2)(U),v=(0,r.useRef)(null),m=(0,r.useRef)(null),b=function(){var r,a=(r=function*(){(0,f.EE)(f.NO.service_details,f.ir.service_details.pattern_field_clicked);const r=function(e,t,n){let r=1;const a=e.replace(/<_>/g,(()=>``)),i=n.state.filterExpression,s=t.map(((e,t)=>`field_${t+1}`)).join(" ,");return`{${i}} |> \`${e}\` | pattern \`${a}\` | keep ${s} | line_format ""`}(t,o,(0,Q.cR)(e)),a=yield(0,A.hJ)(e),l=s.jh.getTimeRange(e).state.value;u&&r===v.current&&l===m.current||(v.current=r,m.current=l,null==a||a.query({requestId:"1",interval:"",intervalMs:0,scopedVars:{},range:l,targets:[(0,c.l)(r,{maxLines:n})],timezone:"",app:"",startTime:0}).forEach((e=>{var t,r;e.state!==i.LoadingState.Done||(null===(t=e.errors)||void 0===t?void 0:t.length)?(e.state===i.LoadingState.Error||(null===(r=e.errors)||void 0===r?void 0:r.length))&&(d(void 0),g(!0)):(d(function(e,t,n){const r=new Map;e.data[0].fields[0].values.toArray().forEach((e=>{Object.keys(e).forEach((t=>{var n,a;r.has(t)||r.set(t,new Map),null===(a=r.get(t))||void 0===a||a.set(e[t],((null===(n=r.get(t))||void 0===n?void 0:n.get(e[t]))||0)+1)}))}));const a=[];for(let e=0;e<=t;e++){var i;const t=[];null===(i=r.get(`field_${e+1}`))||void 0===i||i.forEach(((e,r)=>{t.push({value:r,count:e,proportion:e/n})})),t.sort(((e,t)=>t.count-e.count)),a.push(t)}return a}(e,o.length,n)),g(!1))})))},function(){var e=this,t=arguments;return new Promise((function(n,a){var i=r.apply(e,t);function s(e){K(i,n,a,s,l,"next",e)}function l(e){K(i,n,a,s,l,"throw",e)}s(void 0)}))});return function(){return a.apply(this,arguments)}}(),y=(0,r.useMemo)((()=>t.split("<_>")),[t]);return a().createElement("div",null,y.map(((e,t)=>a().createElement("span",{key:t},e,t!==o.length&&a().createElement(l.Toggletip,{onOpen:b,content:a().createElement(a().Fragment,null,u&&u[t].length>0&&a().createElement(H,{stats:u[t],value:""}),u&&0===u[t].length&&a().createElement("div",null,"No available stats for this field in the current timestamp."),!u&&p&&a().createElement("div",null,"Could not load stats for this pattern."),!u&&!p&&a().createElement("div",{style:{padding:"10px"}},a().createElement(l.Spinner,{size:"xl"})))},a().createElement("span",{className:h.pattern},"<_>"))))))};function U(e){return{pattern:(0,h.css)({cursor:"pointer",backgroundColor:e.colors.emphasize(e.colors.background.primary,.1),margin:"0 2px","&:hover":{backgroundColor:e.colors.emphasize(e.colors.background.primary,.2)}})}}var q=n(2499);function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class Y extends s.Bs{onActivate(){if(this.state.body)return;const e=(0,c.l)(u.SA);this.replacePatternsInQuery(e);const t=(0,o.rS)([e]);t.getResultsStream().subscribe((e=>{this.onQueryWithFiltersResult(e)})),this.setState({body:new s.G1({direction:"column",children:[new s.vA({body:void 0,width:"100%",height:0}),new s.vA({height:300,width:"100%",body:s.d0.logs().setHoverHeader(!0).setOption("showLogContextToggle",!0).setOption("showTime",!0).setData(t).build()})]})})}replacePatternsInQuery(e){const t={pattern:this.state.pattern,type:"include"},n=(0,q.M)([t]);e.expr=e.expr.replace(u.sC,n)}removePatternFromFilterExclusion(){const e=s.jh.getAncestor(this,ee);var t;const n=null!==(t=e.state.patternsNotMatchingFilters)&&void 0!==t?t:[],r=n.findIndex((e=>e===this.state.pattern));-1!==r&&(n.splice(r,1),e.setState({patternsNotMatchingFilters:n}))}setWarningMessage(e){const t=this.getNoticeFlexItem(),n=this.getVizFlexItem();return t instanceof s.vA&&t.setState({isHidden:!1,height:"auto",body:new s.dM({reactNode:e})}),n}getNoticeFlexItem(){const e=this.getFlexItemChildren();return null==e?void 0:e[0]}getVizFlexItem(){const e=this.getFlexItemChildren();return null==e?void 0:e[1]}getFlexItemChildren(){var e;return null===(e=this.state.body)||void 0===e?void 0:e.state.children}excludeThisPatternFromFiltering(){const e=s.jh.getAncestor(this,ee);var t;const n=null!==(t=e.state.patternsNotMatchingFilters)&&void 0!==t?t:[];e.setState({patternsNotMatchingFilters:[...n,this.state.pattern]})}static Component({model:e}){const{body:t}=e.useState();return t?a().createElement(t.Component,{model:t}):null}constructor(e){super(e),J(this,"clearFilters",(()=>{const e=(0,Q.ir)(this),t=(0,Q.Gk)(this),n=(0,Q.iw)(this);if(e.setState({filters:[]}),n.setState({filters:[]}),t.state.filters.length){t.setState({filters:[]});const e=this.getNoticeFlexItem();null==e||e.setState({isHidden:!0}),this.removePatternFromFilterExclusion()}})),J(this,"onQueryError",(e=>{if(e.data.state===i.LoadingState.Done&&(0===e.data.series.length||e.data.series.every((e=>0===e.length)))||e.data.state===i.LoadingState.Error){let t;try{t={pattern:this.state.pattern,traceIds:JSON.stringify(e.data.traceIds),request:JSON.stringify(e.data.request),msg:"onQueryError"}}catch(e){t={pattern:this.state.pattern,msg:"Failed to encode context"}}N.v.error(new Error("Pattern sample query returns no results"),t),this.setWarningMessage(a().createElement(l.Alert,{severity:"error",title:""},"This pattern returns no logs."));const n=this.getVizFlexItem();n instanceof s.vA&&n.setState({isHidden:!0})}})),J(this,"onQueryWithFiltersResult",(e=>{const t=(0,c.l)(u.pT);this.replacePatternsInQuery(t);const n=(0,o.rS)([t]);if(n.getResultsStream().subscribe(this.onQueryError),e.data.state===i.LoadingState.Done&&(0===e.data.series.length||e.data.series.every((e=>0===e.length)))){const e=this.getNoticeFlexItem(),t=this.getVizFlexItem();if(e instanceof s.vA&&e.setState({isHidden:!1,height:"auto",body:new s.dM({reactNode:a().createElement(l.Alert,{severity:"warning",title:""},"The logs returned by this pattern do not match the current query filters.",a().createElement(l.Button,{className:T.ZI.button,onClick:()=>this.clearFilters()},"Clear filters"))})}),t instanceof s.vA){const e=t.state.body;e instanceof s.Eb&&(null==e||e.setState({$data:n}))}this.excludeThisPatternFromFiltering()}e.data.state===i.LoadingState.Error&&this.onQueryError(e)})),this.addActivationHandler(this.onActivate.bind(this))}}function X({tableViz:e,row:t}){const{expandedRows:n}=e.useState(),i=null==n?void 0:n.find((e=>e.state.key===t.pattern));return(0,r.useEffect)((()=>{if(!i){const a=(r=t.pattern,new Y({pattern:r,key:r}));var n;e.setState({expandedRows:[...null!==(n=e.state.expandedRows)&&void 0!==n?n:[],a]})}var r}),[t,e,i]),i?a().createElement(i.Component,{model:i}):null}const Z=[""," K"," Mil"," Bil"," Tri"," Quadr"," Quint"," Sext"," Sept"];class ee extends s.Bs{onActivate(){var e;const t=null===(e=s.jh.getAncestor(this,m.P).state.ds)||void 0===e?void 0:e.maxLines;this.setState({maxLines:t})}buildColumns(e,t,n,r,o){const c=le(n),u=s.jh.getTimeRange(this).state.value;return[{id:"volume-samples",header:"",cell:e=>{const t={timeRange:u,series:[e.cell.row.original.dataFrame],state:i.LoadingState.Done},n=new s.Zv({data:t}),r=s.d0.timeseries().setData(n).setHoverHeader(!0).setOption("tooltip",{mode:l.TooltipDisplayMode.None}).setCustomFieldConfig("hideFrom",{legend:!0,tooltip:!0}).setCustomFieldConfig("axisPlacement",l.AxisPlacement.Hidden).setDisplayMode("transparent").build();return a().createElement("div",{className:c.tableTimeSeriesWrap},a().createElement("div",{className:c.tableTimeSeries},a().createElement(r.Component,{model:r})))}},{id:"count",header:"Count",sortType:"number",cell:e=>{const t=(0,i.scaledUnits)(1e3,Z)(e.cell.row.original.sum);var n,r;return a().createElement("div",{className:c.countTextWrap},a().createElement("div",null,null!==(n=t.prefix)&&void 0!==n?n:"",t.text,null!==(r=t.suffix)&&void 0!==r?r:""))}},{id:"percent",header:"%",sortType:"number",cell:t=>a().createElement("div",{className:c.countTextWrap},a().createElement("div",null,(100*t.cell.row.original.sum/e).toFixed(0),"%"))},{id:"pattern",header:"Pattern",cell:e=>a().createElement("div",{className:(0,h.cx)(ie(),c.tablePatternTextDefault)},a().createElement(G,{exploration:(0,A.Ti)(this),pattern:e.cell.row.original.pattern,maxLines:r}))},{id:"include",header:void 0,disableGrow:!0,cell:e=>{if(null==o?void 0:o.includes(e.cell.row.original.pattern))return;const n=null==t?void 0:t.find((t=>t.pattern===e.cell.row.original.pattern)),r="include"===(null==n?void 0:n.type),i="exclude"===(null==n?void 0:n.type);return a().createElement(B.F,{isExcluded:i,isIncluded:r,onInclude:()=>e.cell.row.original.includeLink(),onExclude:()=>e.cell.row.original.excludeLink(),onClear:()=>e.cell.row.original.undoLink(),buttonFill:"outline"})}}]}buildTableData(e,t){const n=s.jh.getAncestor(this,m.P);return e.filter((e=>!t.size||t.has(e.pattern))).map((e=>({dataFrame:e.dataFrame,pattern:e.pattern,sum:e.sum,includeLink:()=>I({pattern:e.pattern,type:"include",indexScene:n}),excludeLink:()=>I({pattern:e.pattern,type:"exclude",indexScene:n}),undoLink:()=>I({pattern:e.pattern,type:"undo",indexScene:n})})))}constructor(e){super(e),this.addActivationHandler(this.onActivate.bind(this))}}var te,ne,re;re=function({model:e}){const t=s.jh.getAncestor(e,m.P),{patterns:n}=t.useState(),r=(0,l.useTheme2)(),i=se(r),o=s.jh.getAncestor(e,ge),{legendSyncPatterns:u}=o.useState(),{patternFrames:d,patternsNotMatchingFilters:p}=e.useState(),g=null!=d?d:[],h=s.jh.getAncestor(e,Ce);var f;const v=(null!==(f=h.state.patternFrames)&&void 0!==f?f:[]).reduce(((e,t)=>e+t.sum),0),b=e.buildTableData(g,u);var y;const S=e.buildColumns(v,n,r,null!==(y=e.state.maxLines)&&void 0!==y?y:c.by,p);return a().createElement("div",{"data-testid":L.b.patterns.tableWrapper,className:i.tableWrap},a().createElement(l.InteractiveTable,{columns:S,data:b,getRowId:e=>e.pattern,renderExpandedRow:t=>a().createElement(X,{tableViz:e,row:t})}))},(ne="Component")in(te=ee)?Object.defineProperty(te,ne,{value:re,enumerable:!0,configurable:!0,writable:!0}):te[ne]=re;const ae=b.config.theme2,ie=()=>(0,h.css)({minWidth:"200px",fontFamily:ae.typography.fontFamilyMonospace,overflow:"hidden",overflowWrap:"break-word"}),se=e=>({link:(0,h.css)({textDecoration:"underline"}),tableWrap:(0,h.css)({"> div":{height:"calc(100vh - 450px)",minHeight:"470px"},th:{top:0,position:"sticky",backgroundColor:e.colors.background.canvas,zIndex:e.zIndex.navbarFixed}})}),le=e=>({tablePatternTextDefault:(0,h.css)({fontFamily:e.typography.fontFamilyMonospace,minWidth:"200px",maxWidth:"100%",overflow:"hidden",overflowWrap:"break-word",fontSize:e.typography.bodySmall.fontSize,wordBreak:"break-word"}),countTextWrap:(0,h.css)({textAlign:"right",fontSize:e.typography.bodySmall.fontSize}),tableTimeSeriesWrap:(0,h.css)({width:"230px",pointerEvents:"none"}),tableTimeSeries:(0,h.css)({height:"30px",overflow:"hidden"})});function oe(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function ce(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){oe(i,r,a,s,l,"next",e)}function l(e){oe(i,r,a,s,l,"throw",e)}s(void 0)}))}}function ue(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function de(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}const pe=b.config.theme2.visualization.palette;class ge extends s.Bs{onActivate(){this.updateBody(),this._subs.add(s.jh.getAncestor(this,tt).subscribeToState(((e,t)=>{var n,r,a,i,l,o;const c=null==e||null===(a=e.$patternsData)||void 0===a||null===(r=a.state)||void 0===r||null===(n=r.data)||void 0===n?void 0:n.series,u=null==t||null===(o=t.$patternsData)||void 0===o||null===(l=o.state)||void 0===l||null===(i=l.data)||void 0===i?void 0:i.series;if(!(0,g.B)(c,u)){const e=s.jh.getAncestor(this,Ce);this.updatePatterns(e.state.patternFrames),e.setState({filteredPatterns:void 0})}}))),this._subs.add(s.jh.getAncestor(this,Ce).subscribeToState(((e,t)=>{const n=s.jh.getAncestor(this,Ce);e.filteredPatterns&&!(0,g.B)(e.filteredPatterns,t.filteredPatterns)?this.updatePatterns(n.state.filteredPatterns):n.state.patternFilter||this.updatePatterns(n.state.patternFrames)})))}updatePatterns(e=[]){var t=this;return ce((function*(){var n;null===(n=t.state.body)||void 0===n||n.forEachChild((n=>{n instanceof s.Eb&&n.setState({$data:t.getTimeseriesDataNode(e)}),n instanceof ee&&n.setState({patternFrames:e})}))}))()}updateBody(){var e=this;return ce((function*(){var t,n;const r=s.jh.getAncestor(e,Ce).state.patternFrames;(null===(n=s.jh.getAncestor(e,tt).state.$patternsData)||void 0===n||null===(t=n.state.data)||void 0===t?void 0:t.series)&&r?e.setState({body:e.getSingleViewLayout(),legendSyncPatterns:new Set,loading:!1}):N.v.warn("Failed to update PatternsFrameScene body")}))()}extendTimeSeriesLegendBus(e,t){const n=t.onToggleSeriesVisibility;t.onToggleSeriesVisibility=(t,r)=>{var a;null==n||n(t,r);const i=null===(a=e.state.fieldConfig.overrides)||void 0===a?void 0:a[0],s=null==i?void 0:i.matcher.options.names,l=new Set;s&&s.forEach(l.add,l),this.setState({legendSyncPatterns:l})}}getSingleViewLayout(){const e=s.jh.getAncestor(this,Ce).state.patternFrames;if(!e)return void N.v.warn("Failed to set getSingleViewLayout");const t=this.getTimeSeries(e);return new s.gF({templateColumns:"100%",autoRows:"200px",isLazy:!0,children:[t,new ee({patternFrames:e})]})}getTimeSeries(e){const t=s.jh.getAncestor(this,m.P),n=s.d0.timeseries().setData(this.getTimeseriesDataNode(e)).setOption("legend",{asTable:!0,showLegend:!0,displayMode:l.LegendDisplayMode.Table,placement:"right",width:200}).setHoverHeader(!0).setUnit("short").setLinks([{url:"#",targetBlank:!1,onClick:e=>{I({pattern:e.origin.labels.name,type:"include",indexScene:t})},title:"Include"},{url:"#",targetBlank:!1,onClick:e=>{I({pattern:e.origin.labels.name,type:"exclude",indexScene:t})},title:"Exclude"}]).build();return n.setState({extendPanelContext:(e,t)=>this.extendTimeSeriesLegendBus(e,t)}),n}getTimeseriesDataNode(e){const t=s.jh.getTimeRange(this).state.value;return new s.Zv({data:{series:e.map(((e,t)=>{const n=e.dataFrame;return n.fields[1].config.color=function(e){return{mode:"fixed",fixedColor:pe[e]}}(t),n.fields[1].name="",n})),state:i.LoadingState.Done,timeRange:t}})}constructor(e){super(de(function(e){for(var t=1;t{var t;const{body:n,loading:r}=e.useState(),i=s.jh.getAncestor(e,tt),{$patternsData:l}=i.useState(),o=null==l||null===(t=l.state.data)||void 0===t?void 0:t.series;return a().createElement("div",{className:he.container},!r&&o&&o.length>0&&a().createElement(a().Fragment,null,n&&a().createElement(n.Component,{model:n})))}));const he={container:(0,h.css)({width:"100%",".show-on-hover":{display:"none"}})};var fe=n(9193),ve=n(9284);function me(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class be extends s.Bs{onActivate(){const e=s.jh.getAncestor(this,Ce);this._subs.add(e.subscribeToState(((e,t)=>{if(e.patternFilter!==t.patternFilter){const e=s.jh.getAncestor(this,Ce);e.state.patternFrames&&(0,fe.E)(e.state.patternFrames.map((e=>e.pattern)),e.state.patternFilter,this.onSearchResult)}}))),this._subs.add(e.subscribeToState(((e,t)=>{e.patternFilter&&!e.filteredPatterns&&e.patternFrames&&!(0,g.B)(e.filteredPatterns,t.filteredPatterns)&&(0,fe.X)(e.patternFrames.map((e=>e.pattern)),e.patternFilter,this.onSearchResult)})))}setFilteredPatterns(e,t){const n=s.jh.getAncestor(this,Ce),r=null!=t?t:n.state.patternFrames;if(r){const t=r.filter((t=>!(!n.state.patternFilter||!(null==r?void 0:r.length))&&e.find((e=>e===t.pattern))));n.setState({filteredPatterns:t})}}setEmptySearch(){s.jh.getAncestor(this,Ce).setState({filteredPatterns:void 0})}constructor(e){super(function(e){for(var t=1;t{s.jh.getAncestor(this,Ce).setState({patternFilter:""})})),me(this,"handleSearchChange",(e=>{s.jh.getAncestor(this,Ce).setState({patternFilter:e.target.value})})),me(this,"onSearchResult",(e=>{const t=s.jh.getAncestor(this,Ce);t.state.patternFilter?this.setFilteredPatterns(e[0]):t.state.filteredPatterns&&!t.state.patternFilter&&this.setEmptySearch()})),this.addActivationHandler(this.onActivate.bind(this))}}me(be,"Component",(function({model:e}){const t=s.jh.getAncestor(e,Ce),{patternFilter:n}=t.useState();return a().createElement(l.Field,{className:ye.field},a().createElement(ve.D,{onChange:e.handleSearchChange,onClear:e.clearSearch,value:n,placeholder:"Search patterns"}))}));const ye={field:(0,h.css)({label:"field",marginBottom:0}),icon:(0,h.css)({cursor:"pointer"})};var Se=n(7191);function we(){return a().createElement(Se.R,null,a().createElement("div",null,a().createElement("p",null,a().createElement("strong",null,"Sorry, we could not detect any patterns.")),a().createElement("p",null,"Check back later or reach out to the team in the"," ",a().createElement(l.TextLink,{href:"https://slack.grafana.com/",external:!0},"Grafana Labs community Slack channel")),a().createElement("p",null,"Patterns let you detect similar log lines to include or exclude from your search.")))}function Oe(){return a().createElement(Se.R,null,a().createElement("div",null,a().createElement("p",null,a().createElement("strong",null,"Patterns are only available for the most recent ",Ee," hours of data.")),a().createElement("p",null,"See the"," ",a().createElement(l.TextLink,{href:"https://grafana.com/docs/grafana/latest/explore/simplified-exploration/logs/patterns/",external:!0},"patterns docs")," ","for more info.")))}function xe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Ee=3;class Ce extends s.Bs{onActivate(){var e,t;const n=s.jh.getAncestor(this,tt);var r;(this.setBody(),null===(e=n.state.$patternsData)||void 0===e?void 0:e.state)&&this.onDataChange(null===(r=n.state.$patternsData)||void 0===r?void 0:r.state);this._subs.add(null===(t=n.state.$patternsData)||void 0===t?void 0:t.subscribeToState(this.onDataChange))}setBody(){this.setState({body:new s.G1({direction:"column",children:[new s.vA({ySizing:"content",body:new be}),new s.vA({body:new ge})]})})}updatePatternFrames(e){if(!e)return;const t=this.dataFrameToPatternFrame(e);this.setState({patternFrames:t})}dataFrameToPatternFrame(e){const t=s.jh.getAncestor(this,tt),n=s.jh.getAncestor(t,m.P).state.patterns;return e.map((e=>{var t,r;const a=null==n?void 0:n.find((t=>t.pattern===e.name)),i=null===(r=e.meta)||void 0===r||null===(t=r.custom)||void 0===t?void 0:t.sum;var s;return{dataFrame:e,pattern:null!==(s=e.name)&&void 0!==s?s:"",sum:i,status:null==a?void 0:a.type}}))}constructor(e){var t;super(function(e){for(var t=1;t{var n,r,a,s,l;const o=null===(n=e.data)||void 0===n?void 0:n.series,c=null==t||null===(r=t.data)||void 0===r?void 0:r.series;(null===(a=e.data)||void 0===a?void 0:a.state)===i.LoadingState.Done?(this.setState({loading:!1,error:!1}),(0,g.B)(o,c)||this.updatePatternFrames(o)):(null===(s=e.data)||void 0===s?void 0:s.state)===i.LoadingState.Loading?this.setState({loading:!0,error:!1}):(null===(l=e.data)||void 0===l?void 0:l.state)===i.LoadingState.Error&&this.setState({loading:!1,error:!0})})),this.addActivationHandler(this.onActivate.bind(this))}}function Pe(e){return{container:(0,h.css)({flexGrow:1,display:"flex",minHeight:"100%",flexDirection:"column"}),content:(0,h.css)({flexGrow:1,display:"flex",paddingTop:e.spacing(0)}),controls:(0,h.css)({flexGrow:0,display:"flex",alignItems:"top",gap:e.spacing(2)}),controlsRight:(0,h.css)({flexGrow:0,display:"flex",justifyContent:"flex-end"}),controlsLeft:(0,h.css)({display:"flex",justifyContent:"flex-left",justifyItems:"left",width:"100%",flexDirection:"column"}),patternMissingText:(0,h.css)({padding:e.spacing(2)})}}xe(Ce,"Component",(({model:e})=>{const{body:t,loading:n,blockingMessage:r,patternFrames:o,error:c}=e.useState(),{value:u}=s.jh.getTimeRange(e).useState(),d=(0,l.useStyles2)(Pe),p=(0,i.dateTime)().diff(u.to,"hours")>=Ee;return a().createElement("div",{className:d.container},a().createElement(D.O,{isLoading:n,blockingMessage:r},!n&&c&&a().createElement("div",{className:d.patternMissingText},a().createElement(l.Text,{textAlignment:"center",color:"primary"},a().createElement("p",null,"There are no pattern matches."),a().createElement("p",null,"Pattern matching has not been configured."),a().createElement("p",null,"Patterns let you detect similar log lines and add or exclude them from your search."),a().createElement("p",null,"To see them in action, add the following to your Loki configuration"),a().createElement("p",null,a().createElement("code",null,"--pattern-ingester.enabled=true")))),!c&&!n&&0===(null==o?void 0:o.length)&&p&&a().createElement(Oe,null),!c&&!n&&0===(null==o?void 0:o.length)&&!p&&a().createElement(we,null),!c&&!n&&o&&o.length>0&&a().createElement("div",{className:d.content},t&&a().createElement(t.Component,{model:t}))))}));var ke=n(71),je=n(6145),Fe=function(e){return e.logs="Logs",e.labels="Labels",e.fields="Fields",e.patterns="Patterns",e}({});const Le=[{displayName:"Logs",value:v.G3.logs,getScene:()=>new s.G1({direction:"column",children:[new s.vA({body:new ke._({})}),new s.vA({minHeight:"470px",height:"calc(100vh - 500px)",body:new F.i({})})]}),testId:L.b.exploreServiceDetails.tabLogs},{displayName:"Labels",value:v.G3.labels,getScene:()=>new s.G1({$behaviors:[new s.Gg.K2({key:"sync",sync:je.yV.Crosshair})],children:[new s.vA({body:new _.O({})})]}),testId:L.b.exploreServiceDetails.tabLabels},{displayName:"Fields",value:v.G3.fields,getScene:e=>{return t=e,new s.G1({$behaviors:[new s.Gg.K2({key:"sync",sync:je.yV.Crosshair})],children:[new s.vA({body:new T.J6({changeFieldCount:t})})]});var t},testId:L.b.exploreServiceDetails.tabFields},{displayName:"Patterns",value:v.G3.patterns,getScene:()=>new s.G1({children:[new s.vA({body:new Ce({})})]}),testId:L.b.exploreServiceDetails.tabPatterns}],_e=[{displayName:"Label",value:v._J.label,getScene:e=>function(e){return new s.G1({$behaviors:[new s.Gg.K2({key:"sync",sync:je.yV.Crosshair})],children:[new s.vA({body:new _.O({value:e})})]})}(e),testId:L.b.exploreServiceDetails.tabLabels},{displayName:"Field",value:v._J.field,getScene:e=>function(e){return new s.G1({$behaviors:[new s.Gg.K2({key:"sync",sync:je.yV.Crosshair})],children:[new s.vA({body:new T.J6({value:e})})]})}(e),testId:L.b.exploreServiceDetails.tabFields}];function Te(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}class De extends s.Bs{onActivate(){const e=s.jh.getAncestor(this,m.P).state.ds;void 0!==(null==e?void 0:e.maxLines)&&this.setState({maxLines:e.maxLines}),this.state.shareButtonScene||this.setState({shareButtonScene:new x({})})}constructor(e){super(e),this.addActivationHandler(this.onActivate.bind(this))}}!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(De,"Component",(({model:e})=>{const t=(0,l.useStyles2)($e);let n=(0,v.FT)(),r=!1;if(!Object.values(v.G3).includes(n)){const e=(0,v.er)();r=!0,e===v._J.field&&(n=v.G3.fields),e===v._J.label&&(n=v.G3.labels)}const o=s.jh.getAncestor(e,tt),u=o.useState(),{loading:d,$data:g,logsCount:m,totalLogsCount:b}=u,y=Te(u,["loading","$data","logsCount","totalLogsCount"]),{maxLines:S}=e.useState(),w=y.loadingStates;return a().createElement(l.Box,{paddingY:0},a().createElement("div",{className:t.actions},a().createElement(l.Stack,{gap:1},e.state.shareButtonScene&&a().createElement(e.state.shareButtonScene.Component,{model:e.state.shareButtonScene}))),a().createElement(l.TabsBar,null,Le.map(((e,t)=>a().createElement(l.Tab,{"data-testid":e.testId,key:t,label:e.displayName,active:n===e.value,counter:w[e.displayName]?void 0:Ne(e,y),suffix:e.displayName===Fe.logs?({className:e})=>function(e,t,n,r){const s=(0,l.useStyles2)(Ie),o=(0,i.getValueFormat)("short");if(void 0===t&&void 0!==n&&n{(e.value&&e.value!==n||r)&&(0,f.EE)(f.NO.service_details,f.ir.service_details.action_view_changed,{newActionView:e.value,previousActionView:n})}})))))}));const Ne=(e,t)=>{switch(e.value){case"fields":return t.fieldsCount;case"patterns":return t.patternsCount;case"labels":return t.labelsCount;default:return}};function $e(e){return{actions:(0,h.css)({display:"flex",justifyContent:"flex-end",[e.breakpoints.up(e.breakpoints.values.md)]:{position:"absolute",right:0,zIndex:2}})}}function Ie(e){return{emptyCountStyles:(0,h.css)({display:"inline-block",fontSize:e.typography.bodySmall.fontSize,minWidth:"1em",marginLeft:e.spacing(1),padding:e.spacing(.25,1)}),logsCountStyles:(0,h.css)({fontSize:e.typography.bodySmall.fontSize,label:"counter",marginLeft:e.spacing(1),borderRadius:e.spacing(3),backgroundColor:e.colors.action.hover,padding:e.spacing(.25,1),color:e.colors.text.secondary,fontWeight:e.typography.fontWeightMedium})}}var Be=n(7389),Ae=n(7796),Me=n(6854);function Re(e,t){const n=["^","$",".","*","+","?","(",")","[","]","{","}","|"];return t||n.push("\\"),e.split("").filter(((e,t,r)=>{const a=r[t+1],i=n.includes(a);return!("\\"===e&&i)})).join("")}var Ve=n(2245),We=n(2085),ze=n(708);function He(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Qe(e){for(var t=1;te.refId===Ge))}function Je(e){var t,n,r;return null===(r=s.jh.getAncestor(e,tt).state.$detectedLabelsData)||void 0===r||null===(n=r.state.data)||void 0===n||null===(t=n.series)||void 0===t?void 0:t[0]}function Ye(e){var t;const n=s.jh.getAncestor(e,tt);return Xe(null===(t=n.state.$detectedFieldsData)||void 0===t?void 0:t.state)}const Xe=e=>{var t,n;return null==e||null===(n=e.data)||void 0===n||null===(t=n.series)||void 0===t?void 0:t[0]},Ze=e=>{var t,n,r,a;return null===(a=e.data)||void 0===a||null===(r=a.series)||void 0===r||null===(n=r[0])||void 0===n||null===(t=n.fields)||void 0===t?void 0:t[0]},et=e=>{var t,n,r,a;return null===(a=e.data)||void 0===a||null===(r=a.series)||void 0===r||null===(n=r[0])||void 0===n||null===(t=n.fields)||void 0===t?void 0:t[2]};class tt extends s.Bs{setSubscribeToLabelsVariable(){const e=(0,Q.cR)(this);0!==e.state.filters.length?this._subs.add(e.subscribeToState(((e,t)=>{0===e.filters.length&&this.redirectToStart();let{labelName:n,labelValue:r,breakdownLabel:a}=(0,v.W6)();n===u.ky&&(n=u.OX);const i=s.jh.getAncestor(this,m.P),l=i.state.routeMatch;if(e.filters.some((e=>e.key===n&&(0,ze.BG)(e.operator)&&(0,Be.uu)(e.value)===r))){if(!(0,g.B)(e.filters,t.filters)){var o,c,d,h;null===(o=this.state.$patternsData)||void 0===o||o.runQueries(),null===(c=this.state.$detectedLabelsData)||void 0===c||c.runQueries(),null===(d=this.state.$detectedFieldsData)||void 0===d||d.runQueries(),null===(h=this.state.$logsCount)||void 0===h||h.runQueries()}}else{const t=e.filters.find((e=>(0,ze.BG)(e.operator)&&e.value!==u.ZO));if(t){const e=(0,u.zE)(t.value)?(0,Be.uu)((0,u.Dx)(t.value)):(0,Be.uu)(t.value);var f,b,y;i.setState({routeMatch:Ke(Qe({},l),{params:Ke(Qe({},null==l?void 0:l.params),{labelName:t.key===u.OX?u.ky:t.key,labelValue:e.split("|")[0]}),url:null!==(f=null==l?void 0:l.url)&&void 0!==f?f:"",path:null!==(b=null==l?void 0:l.path)&&void 0!==b?b:"",isExact:null===(y=null==l?void 0:l.isExact)||void 0===y||y})}),this.resetTabCount(),a?(0,p.fg)((0,v.er)(),a,this):(0,p.Vt)((0,v.FT)(),this)}else this.redirectToStart()}}))):this.redirectToStart()}redirectToStart(){this.setState({$data:void 0,$logsCount:void 0,body:void 0,$patternsData:void 0,$detectedLabelsData:void 0,$detectedFieldsData:void 0,patternsCount:void 0,labelsCount:void 0,fieldsCount:void 0,logsCount:void 0,totalLogsCount:void 0}),(0,d.JO)().setServiceSceneState(this.state),this._subs.unsubscribe(),(0,p.Ns)()}showVariables(){s.jh.findByKeyAndType(this,We.kz,We.qV).setState({visible:!0}),(0,Q.YS)(this).setState({hide:Ve.zL.dontHide})}getMetadata(){const e=(0,d.JO)().getServiceSceneState();e&&this.setState(Qe({},e))}onActivate(){s.jh.findByKeyAndType(this,m.y,Ae.H).setState({hidden:!0}),this.showVariables(),this.getMetadata(),this.resetBodyAndData(),this.setBreakdownView(),this.runQueries(),this._subs.add(this.subscribeToPatternsQuery()),this._subs.add(this.subscribeToDetectedLabelsQuery()),this._subs.add(this.subscribeToDetectedFieldsQuery((0,v.FT)()!==v.G3.fields)),this._subs.add(this.subscribeToLogsQuery()),this._subs.add(this.subscribeToLogsCountQuery()),this.setSubscribeToLabelsVariable(),this._subs.add(this.subscribeToFieldsVariable()),this._subs.add(this.subscribeToMetadataVariable()),this._subs.add(this.subscribeToLevelsVariableChangedEvent()),this._subs.add(this.subscribeToLevelsVariableFiltersState()),this._subs.add(this.subscribeToDataSourceVariable()),this._subs.add(this.subscribeToPatternsVariable()),this._subs.add(this.subscribeToLineFiltersVariable()),this._subs.add(this.subscribeToTimeRange()),function(e){const t=i.urlUtil.getUrlSearchParams(),n=t["var-lineFilter"];if(!Array.isArray(n)||!n.length)return;const r=n[0];if("string"!=typeof r||!r)return;const a=s.jh.getAncestor(e,m.P),l=(0,Q.Gk)(e),o=null==r?void 0:r.match(/\|=.`(.+?)`/);var c,u;o&&2===o.length&&(null===(u=a.state.body)||void 0===u||null===(c=u.state.lineFilterRenderer)||void 0===c||c.addActivationHandler((()=>{l.setState({filters:[{key:Me.ld.caseSensitive,operator:Me.cK.match,value:Re(o[1],!0),keyLabel:"0"}]})})));const d=null==r?void 0:r.match(/`\(\?i\)(.+)`/);var p,g;d&&2===d.length&&(null===(g=a.state.body)||void 0===g||null===(p=g.state.lineFilterRenderer)||void 0===p||p.addActivationHandler((()=>{l.updateFilters([{key:Me.ld.caseInsensitive,operator:Me.cK.match,value:Re(d[1],!1),keyLabel:"0"}])})));const h=b.locationService.getLocation();delete t["var-lineFilter"],b.locationService.replace(i.urlUtil.renderUrl(h.pathname,t))}(this)}subscribeToPatternsVariable(){return(0,Q.Ku)(this).subscribeToState(((e,t)=>{var n,r;e.value!==t.value&&(null===(n=this.state.$detectedFieldsData)||void 0===n||n.runQueries(),null===(r=this.state.$logsCount)||void 0===r||r.runQueries())}))}subscribeToLineFiltersVariable(){return(0,Q.Gk)(this).subscribeToEvent(s.oh,(()=>{var e,t;null===(e=this.state.$logsCount)||void 0===e||e.runQueries(),null===(t=this.state.$detectedFieldsData)||void 0===t||t.runQueries()}))}subscribeToDataSourceVariable(){return(0,Q.S9)(this).subscribeToState((()=>{this.redirectToStart()}))}resetTabCount(){this.setState({fieldsCount:void 0,labelsCount:void 0,patternsCount:void 0}),(0,d.JO)().setServiceSceneState(this.state)}subscribeToFieldsVariable(){return(0,Q.ir)(this).subscribeToState(((e,t)=>{var n,r;(0,g.B)(e.filters,t.filters)||(null===(n=this.state.$detectedFieldsData)||void 0===n||n.runQueries(),null===(r=this.state.$logsCount)||void 0===r||r.runQueries())}))}subscribeToMetadataVariable(){return(0,Q.oY)(this).subscribeToState(((e,t)=>{var n,r;(0,g.B)(e.filters,t.filters)||(null===(n=this.state.$detectedFieldsData)||void 0===n||n.runQueries(),null===(r=this.state.$logsCount)||void 0===r||r.runQueries())}))}subscribeToLevelsVariableChangedEvent(){return(0,Q.iw)(this).subscribeToEvent(s.oh,(()=>{var e;null===(e=this.state.$detectedFieldsData)||void 0===e||e.runQueries()}))}subscribeToLevelsVariableFiltersState(){return(0,Q.iw)(this).subscribeToState(((e,t)=>{var n;(0,g.B)(e.filters,t.filters)||(null===(n=this.state.$logsCount)||void 0===n||n.runQueries())}))}runQueries(){const e=(0,v.FT)(),t=(0,v.er)();var n,r,a,i;e!==v.G3.patterns&&void 0!==this.state.patternsCount||(null===(n=this.state.$patternsData)||void 0===n||n.runQueries());e!==v.G3.labels&&t!==v._J.label&&void 0!==this.state.labelsCount||(null===(r=this.state.$detectedLabelsData)||void 0===r||r.runQueries());e!==v.G3.fields&&t!==v._J.field&&void 0!==this.state.fieldsCount||(null===(a=this.state.$detectedFieldsData)||void 0===a||a.runQueries());void 0===this.state.logsCount&&(null===(i=this.state.$logsCount)||void 0===i||i.runQueries())}subscribeToPatternsQuery(){var e;return null===(e=this.state.$patternsData)||void 0===e?void 0:e.subscribeToState((e=>{var t;if(this.updateLoadingState(e,Fe.patterns),(null===(t=e.data)||void 0===t?void 0:t.state)===i.LoadingState.Done){const t=e.data.series;void 0!==(null==t?void 0:t.length)&&(this.setState({patternsCount:t.length}),(0,d.JO)().setPatternsCount(t.length))}}))}subscribeToDetectedLabelsQuery(){var e;return null===(e=this.state.$detectedLabelsData)||void 0===e?void 0:e.subscribeToState((e=>{var t;if(this.updateLoadingState(e,Fe.labels),(null===(t=e.data)||void 0===t?void 0:t.state)===i.LoadingState.Done){const t=e.data,n=t.series[0].fields;if(void 0!==t.series.length&&void 0!==n.length){const e=t.series[0].fields.filter((e=>u.e4!==e.name));this.setState({labelsCount:e.length+1}),(0,d.JO)().setLabelsCount(n.length)}}}))}updateLoadingState(e,t){var n;const r=this.state.loadingStates;r[t]=(null===(n=e.data)||void 0===n?void 0:n.state)===i.LoadingState.Loading;const a=Object.values(r).some((e=>e));this.setState({loading:a,loadingStates:r})}subscribeToLogsQuery(){var e;return null===(e=this.state.$data)||void 0===e?void 0:e.subscribeToState(((e,t)=>{var n,r;if(this.updateLoadingState(e,Fe.logs),(null===(n=e.data)||void 0===n?void 0:n.state)===i.LoadingState.Done||(null===(r=e.data)||void 0===r?void 0:r.state)===i.LoadingState.Streaming){var a,s;const t=null!==(s=null===(a=e.data.series[0])||void 0===a?void 0:a.length)&&void 0!==s?s:0;t!==this.state.logsCount&&this.setState({logsCount:t})}}))}subscribeToLogsCountQuery(){var e;return null===(e=this.state.$logsCount)||void 0===e?void 0:e.subscribeToState((e=>{var t;if((null===(t=e.data)||void 0===t?void 0:t.state)===i.LoadingState.Done){var n,r,a,s;const t=null===(s=e.data.series[0])||void 0===s||null===(a=s.fields)||void 0===a||null===(r=a[1])||void 0===r||null===(n=r.values)||void 0===n?void 0:n[0];this.setState({totalLogsCount:t})}}))}subscribeToDetectedFieldsQuery(e){var t;return null===(t=this.state.$detectedFieldsData)||void 0===t?void 0:t.subscribeToState((t=>{var n;if(this.updateLoadingState(t,Fe.fields),e&&(null===(n=t.data)||void 0===n?void 0:n.state)===i.LoadingState.Done){const e=t.data.series[0];void 0!==e&&e.length!==this.state.fieldsCount&&(this.setState({fieldsCount:e.length}),(0,d.JO)().setFieldsCount(e.length))}}))}subscribeToTimeRange(){return s.jh.getTimeRange(this).subscribeToState((()=>{var e,t,n,r;null===(e=this.state.$patternsData)||void 0===e||e.runQueries(),null===(t=this.state.$detectedLabelsData)||void 0===t||t.runQueries(),null===(n=this.state.$detectedFieldsData)||void 0===n||n.runQueries(),null===(r=this.state.$logsCount)||void 0===r||r.runQueries()}))}resetBodyAndData(){let e={};this.state.$data||(e.$data=st()),this.state.$patternsData||(e.$patternsData=rt()),this.state.$detectedLabelsData||(e.$detectedLabelsData=at()),this.state.$detectedFieldsData||(e.$detectedFieldsData=it()),this.state.$logsCount||(e.$logsCount=lt()),this.state.body||(e.body=nt()),Object.keys(e).length&&this.setState(e)}setBreakdownView(){const{body:e}=this.state,t=(0,v.FT)(),n=Le.find((e=>e.value===t));if(!e){const e=new Error("body is not defined in setBreakdownView!");throw N.v.error(e,{msg:"ServiceScene setBreakdownView error"}),e}if(n)e.setState({children:[...e.state.children.slice(0,1),n.getScene((e=>{"fields"===n.value&&this.setState({fieldsCount:e})}))]});else{const t=(0,v.er)(),n=_e.find((e=>e.value===t));n&&this.state.drillDownLabel?e.setState({children:[...e.state.children.slice(0,1),n.getScene(this.state.drillDownLabel)]}):N.v.error(new Error("not setting breakdown view"),{msg:"setBreakdownView error"})}}constructor(e){var t;super(Qe({loadingStates:{[Fe.patterns]:!1,[Fe.labels]:!1,[Fe.fields]:!1,[Fe.logs]:!1},loading:!0,body:null!==(t=e.body)&&void 0!==t?t:nt(),$data:st(),$patternsData:rt(),$detectedLabelsData:at(),$detectedFieldsData:it(),$logsCount:lt()},e)),He(this,"_variableDependency",new s.Sh(this,{variableNames:[u.EY,u.MB,u.mB,u.uw,u._Y]})),this.addActivationHandler(this.onActivate.bind(this))}}function nt(){return new s.G1({direction:"column",children:[new s.vA({ySizing:"content",body:new De({})})]})}function rt(){return(0,o.FH)([(0,c.BM)(`{${u.S1}}`,"patterns",{refId:"patterns"})])}function at(){return(0,o.FH)([(0,c.BM)(`{${u.S1}}`,"detected_labels",{refId:"detectedLabels"})])}function it(){return(0,o.FH)([(0,c.BM)(u.SA,"detected_fields",{refId:"detectedFields"})])}function st(){return(0,o.rS)([(0,c.l)(u.SA,{refId:Ge})])}function lt(){const e=(0,o.rS)([(0,c.l)(`sum(count_over_time(${u.SA}[$__auto]))`,{refId:Ue,queryType:"instant"})],{runQueriesMode:"manual"});if(e instanceof s.dt)return e;const t=new Error("log count query provider is not query runner!");throw N.v.error(t,{msg:"getLogCountQueryRunner: invalid return type"}),t}He(tt,"Component",(({model:e})=>{const{body:t}=e.useState();return t?a().createElement(t.Component,{model:t}):a().createElement(l.LoadingPlaceholder,{text:"Loading..."})}))},577:(e,t,n)=>{n.d(t,{p:()=>g});var r,a,i,s=n(9736),l=n(5959),o=n.n(l),c=n(2007),u=n(6089),d=n(4351),p=n(696);class g extends s.Bs{setHover(e){this.setState({hover:e})}onClick(e){e?(0,p.wy)(this.state.labelName,this.state.labelValue,this):(0,p._J)(this.state.labelName,this.state.labelValue,this)}}i=({model:e})=>{const{ds:t,labelValue:n,labelName:r,hover:a}=e.useState(),i=(0,d.eT)(t,r).includes(n),s=(0,c.useStyles2)((e=>({wrapper:(0,u.css)({display:"flex",flexDirection:"column",justifyContent:"center",alignSelf:"center"})}))),l=i?`Remove ${n} from favorites`:`Add ${n} to favorites`;return o().createElement("span",{className:s.wrapper},o().createElement(c.ToolbarButton,{onMouseOver:()=>{e.setHover(!0)},onMouseOut:()=>{e.setHover(!1)},icon:o().createElement(c.Icon,{name:i?"favorite":"star",size:"lg",type:i?"mono":"default"}),color:i?"rgb(235, 123, 24)":"#ccc",onClick:()=>e.onClick(i),name:"star","aria-label":l,tooltip:l}))},(a="Component")in(r=g)?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i},173:(e,t,n)=>{n.d(t,{X:()=>ue,y:()=>ge});var r=n(6089),a=n(3241),i=n(5959),s=n.n(i),l=n(7781),o=n(9736),c=n(2007),u=n(4351),d=n(20),p=n(4509),g=n(7478),h=n(5553),f=n(6854),v=n(3571),m=n(696);function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class y extends o.Bs{onActivate(){const e=(0,h.cR)(this);this.setState({hidden:e.state.filters.length>0}),e.subscribeToState((e=>{this.setState({hidden:e.filters.length>0})}))}constructor(e){super(e),b(this,"getLink",(()=>{if(this.state.labelValue)return w(this.state.labelName,this.state.labelValue,this)})),b(this,"onClick",(()=>{S(this.state.labelName,this.state.labelValue,this)})),this.addActivationHandler(this.onActivate.bind(this))}}function S(e,t,n){(0,p.EE)(p.NO.service_selection,p.ir.service_selection.service_selected,{value:t,label:e}),(0,m._J)(e,t,n)}function w(e,t,n){var r;const a=(0,h.cR)(n),i=[...a.state.filters.filter((n=>!(n.key===e&&n.value===t))),{key:e,operator:f.w7.Equal,value:t}];e===d.OX&&(e=d.ky);const s=a.clone({filters:i});return(0,g.k9)(e,t,null===(r=s.urlSync)||void 0===r?void 0:r.getUrlState())}function O(e){return{button:(0,r.css)({alignSelf:"center"})}}b(y,"Component",(({model:e})=>{const t=(0,c.useStyles2)(O);(0,h.cR)(e).useState();const{hidden:n}=e.useState();if(n)return null;const r=e.getLink();return s().createElement(c.LinkButton,{"data-testid":v.b.index.selectServiceButton,tooltip:`View logs for ${e.state.labelValue}`,className:t.button,variant:"primary",fill:"outline",size:"sm",disabled:!r,href:e.getLink(),onClick:e.onClick},"Show logs")}));var x=n(7985),E=n(1475),C=n(7191);const P=()=>s().createElement(C.R,null,s().createElement("p",null,"Log volume has not been configured."),s().createElement("p",null,s().createElement(c.TextLink,{href:"https://grafana.com/docs/loki/latest/reference/api/#query-log-volume",external:!0},"Instructions to enable volume in the Loki config:")),s().createElement(c.Text,{textAlignment:"left"},s().createElement("pre",null,s().createElement("code",null,"limits_config:",s().createElement("br",null),"  volume_enabled: true")))),k=()=>s().createElement(C.R,null,s().createElement("p",null,"No service matched your search."));var j=n(5570),F=n(7243),L=n(4702),_=n(1532),T=n(8531),D=n(2245),N=n(9731),$=n(2661),I=n(5002);function B(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})),e}class M extends o.Bs{}B(M,"Component",(({model:e})=>{const t=o.jh.getAncestor(e,ge),n=o.jh.getAncestor(e,H),{tabOptions:r,showPopover:a}=n.useState(),i=(0,c.useStyles2)(R),l=r.map((e=>A(function(e){for(var t=1;t{n.toggleShowPopover()},autoFocus:!0,isOpen:a,placeholder:"Search labels",options:l,isSearchable:!0,openMenuOnFocus:!0,onChange:e=>{e.value&&(n.toggleShowPopover(),t.setSelectedTab(e.value))}})))}));const R=e=>({card:{body:(0,r.css)({padding:e.spacing(1)}),p:(0,r.css)({maxWidth:300})}});function V(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function W(e){for(var t=1;t{var e;return null===(e=this.state.$labelsData)||void 0===e?void 0:e.state})()){var t;return null===(t=e.data)||void 0===t?void 0:t.series[0].fields.map((e=>({label:e.name,cardinality:e.values[0]})))}populatePrimaryLabelsVariableOptions(e){const t=o.jh.getAncestor(this,ge).getSelectedTab(),n=(0,u.sj)((0,h.S9)(this).getValue().toString()),r=e.map((e=>{const r=n.indexOf(e.label);return{label:e.label===d.OX?d.ky:e.label,value:e.label,active:t===e.label,saved:-1!==r,savedIndex:r}})).sort(((e,t)=>e.value===d.OX||t.value===d.OX?e.value===d.OX?-1:1:e.labelt.label?1:0));this.setState({tabOptions:r})}runDetectedLabels(){this.state.$labelsData.runQueries()}runDetectedLabelsSubs(){this._subs.add(o.jh.getTimeRange(this).subscribeToState((()=>{this.runDetectedLabels()}))),this._subs.add((0,h.S9)(this).subscribeToState((()=>{this.runDetectedLabels()})))}onActivate(){this.runDetectedLabels(),this.setState({popover:new M({})}),this.runDetectedLabelsSubs(),this._subs.add((0,h.S9)(this).subscribeToState((()=>{this.state.$labelsData.runQueries()}))),this._subs.add((0,h.El)(this).subscribeToState((()=>{var e;const t=this.getLabelsFromQueryRunnerState(null===(e=this.state.$labelsData)||void 0===e?void 0:e.state);t&&this.populatePrimaryLabelsVariableOptions(t)}))),this._subs.add(this.state.$labelsData.subscribeToState((e=>{var t;if((null===(t=e.data)||void 0===t?void 0:t.state)===l.LoadingState.Done){const t=this.getLabelsFromQueryRunnerState(e),n=o.jh.getAncestor(this,ge);t&&this.populatePrimaryLabelsVariableOptions(t);const r=n.getSelectedTab();(null==t?void 0:t.some((e=>e.label===r)))||n.selectDefaultLabelTab()}})))}constructor(e){super(W({showPopover:!1,$labelsData:(0,E.HF)({queries:[(0,x.BM)("","detected_labels")],runQueriesMode:"manual"}),tabOptions:[{label:d.ky,value:d.OX,saved:!0}]},e)),V(this,"removeSavedTab",(e=>{(0,u.Gg)((0,h.S9)(this).getValue().toString(),e);const t=this.getLabelsFromQueryRunnerState();t&&this.populatePrimaryLabelsVariableOptions(t);const n=o.jh.getAncestor(this,ge);n.getSelectedTab()===e&&n.selectDefaultLabelTab()})),V(this,"toggleShowPopover",(()=>{this.setState({showPopover:!this.state.showPopover})})),this.addActivationHandler(this.onActivate.bind(this))}}V(H,"Component",(({model:e})=>{const{tabOptions:t,showPopover:n,popover:u,$labelsData:p}=e.useState(),{data:g}=p.useState(),f=o.jh.getAncestor(e,ge);(0,h.El)(e).useState();const v=(0,c.useStyles2)(Q),m=(0,i.useRef)(null);return s().createElement(c.TabsBar,{className:v.tabs},t.filter((e=>e.saved||e.active||e.value===d.OX)).sort(((e,t)=>{return e.value===d.OX||t.value===d.OX?e.value===d.OX?-1:1:(null!==(n=e.savedIndex)&&void 0!==n?n:0)-(null!==(r=t.savedIndex)&&void 0!==r?r:0);var n,r})).map((t=>{const n=s().createElement(c.Tab,{key:t.value,onChangeTab:()=>{f.setSelectedTab(t.value)},label:(0,I.EJ)(t.label,15,!0),active:t.active,suffix:t.value!==d.OX?n=>s().createElement(s().Fragment,null,s().createElement(c.Tooltip,{content:"Remove tab"},s().createElement(c.Icon,{onKeyDownCapture:n=>{"Enter"===n.key&&e.removeSavedTab(t.value)},onClick:n=>{n.stopPropagation(),e.removeSavedTab(t.value)},name:"times",className:(0,r.cx)(n.className)}))):void 0});return t.label.length>15?s().createElement(c.Tooltip,{key:t.value,content:t.label},n):n})),(null==g?void 0:g.state)===l.LoadingState.Loading&&s().createElement(c.Tab,{label:"Loading tabs",icon:"spinner"}),(null==g?void 0:g.state)===l.LoadingState.Done&&s().createElement("span",{className:v.addTab},s().createElement(c.Tab,{onChangeTab:e.toggleShowPopover,label:"Add label",ref:m,icon:"plus-circle"})),u&&s().createElement(c.PopoverController,{content:s().createElement(u.Component,{model:u})},((e,t,r)=>{const i={onBlur:t,onFocus:e};return s().createElement(s().Fragment,null,m.current&&s().createElement(s().Fragment,null,s().createElement(c.Popover,W(z(W({},r,a.rest),{show:n,wrapperClassName:v.popover,referenceElement:m.current,renderArrow:!0}),i))))})))}));const Q=e=>({tabs:(0,r.css)({overflowY:"hidden"}),addTab:(0,r.css)({label:"add-label-tab",color:e.colors.primary.text,"& button":{color:e.colors.primary.text}}),popover:(0,r.css)({borderRadius:e.shape.radius.default,boxShadow:e.shadows.z3,background:e.colors.background.primary,border:`1px solid ${e.colors.border.weak}`})});var K=n(577);const G=e=>s().createElement(C.R,null,s().createElement("p",null,"No logs found in ",s().createElement("strong",null,e.labelName),".",s().createElement("br",null),"Please adjust time range or select another label."));var U=n(5719),q=n(9405);function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e){for(var t=1;t{const e=this.isSelected();this.state.included!==e.included&&this.setState(Y({},e))})))}getFilter(){return{name:this.state.name,value:this.state.value}}constructor(e){super(X(Y({},e),{included:null})),J(this,"isSelected",(()=>{const e=(0,h.cR)(this).state.filters.find((e=>{const t=(0,h.z2)(d.MB,e);return e.key===this.state.name&&t.value===this.state.value}));return e?{included:e.operator===f.w7.Equal}:{included:!1}})),J(this,"onClick",(e=>{const t=this.getFilter();(0,q.Qt)(t.name,t.value,e,this,d.MB);const n=(0,h.cR)(this);(0,p.EE)(p.NO.service_selection,p.ir.service_selection.add_to_filters,{filterType:"index-filters",key:t.name,action:e,filtersLength:(null==n?void 0:n.state.filters.length)||0}),this.setState(Y({},this.isSelected()))})),this.addActivationHandler(this.onActivate.bind(this))}}J(Z,"Component",(({model:e})=>{const{value:t,included:n}=e.useState(),r=(0,c.useStyles2)(ee);return s().createElement("span",{className:r.wrapper},s().createElement(c.Button,{tooltip:!0===n?`Remove ${t} from filters`:`Add ${t} to filters`,variant:"secondary",fill:"outline",size:"sm","aria-selected":!0===n,className:r.includeButton,onClick:()=>!0===n?e.onClick("clear"):e.onClick("include"),"data-testid":v.b.exploreServiceDetails.buttonFilterInclude},n?"Remove":"Include"))}));const ee=()=>({container:(0,r.css)({display:"flex",justifyContent:"center"}),includeButton:(0,r.css)({borderRadius:0}),wrapper:(0,r.css)({display:"flex",flexDirection:"column",justifyContent:"center",alignSelf:"center"})});var te=n(7796);function ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class re extends o.Bs{}function ae(e){return{icon:(0,r.css)({color:e.colors.text.disabled,marginLeft:e.spacing.x1}),searchPageCountWrap:(0,r.css)({display:"flex",alignItems:"center"}),select:(0,r.css)({maxWidth:"65px",marginLeft:e.spacing(1),marginRight:e.spacing(1)}),searchFieldPlaceholderText:(0,r.css)({fontSize:e.typography.bodySmall.fontSize,color:e.colors.text.disabled,alignItems:"center",display:"flex",flex:"1 0 auto",textWrapMode:"nowrap"})}}function ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function se(e){for(var t=1;t{const n=(0,c.useStyles2)(ae),r=o.jh.getAncestor(e,ge),{countPerPage:a}=r.useState(),l=function(e){const t=20,n=60,r=Math.ceil(e/t)*t,a=[];for(let i=t;i<=n&&i<=r;i+=t){let n=i.toString();ie&&(n=e.toString()),a.push({value:i.toString(),label:n})}return a}(t);return(0,i.useEffect)((()=>{var e,t;const n=null!==(t=null===(e=l[l.length-1])||void 0===e?void 0:e.value)&&void 0!==t?t:a.toString();a.toString()>n&&r.setState({countPerPage:parseInt(n,10)})}),[a,l,r]),s().createElement("span",{className:n.searchPageCountWrap},s().createElement("span",{className:n.searchFieldPlaceholderText},"Showing"," ",s().createElement(c.Select,{className:n.select,onChange:e=>{if(e.value){const t=parseInt(e.value,10);r.setState({countPerPage:t,currentPage:1}),r.updateBody(),(0,u.uF)(t)}},options:l,value:a.toString()})," ","of ",t," ",s().createElement(c.IconButton,{className:n.icon,"aria-label":"Count info",name:"info-circle",tooltip:`${t} labels have values for the selected time range. Total label count may differ`})))})),ne(re,"Component",(({model:e,totalCount:t})=>{const n=o.jh.getAncestor(e,ge),{countPerPage:a,currentPage:i}=n.useState(),l=(0,c.useStyles2)((e=>({pagination:(0,r.css)({float:"none"}),paginationWrap:(0,r.css)({[e.breakpoints.up("lg")]:{display:"none"},[e.breakpoints.down("lg")]:{display:"flex",justifyContent:"flex-end",flex:"1 0 auto"}}),paginationWrapMd:(0,r.css)({[e.breakpoints.down("lg")]:{display:"none"},[e.breakpoints.up("lg")]:{display:"flex",justifyContent:"flex-end",flex:"1 0 auto"}})})));return t>a?s().createElement(s().Fragment,null,s().createElement("span",{className:l.paginationWrapMd},s().createElement(c.Pagination,{className:l.pagination,currentPage:i,numberOfPages:Math.ceil(t/a),onNavigate:e=>{n.setState({currentPage:e}),n.updateBody()}})),s().createElement("span",{className:l.paginationWrap},s().createElement(c.Pagination,{showSmallVersion:!0,className:l.pagination,currentPage:i,numberOfPages:Math.ceil(t/a),onNavigate:e=>{n.setState({currentPage:e}),n.updateBody()}}))):null}));const oe=T.config.featureToggles.exploreLogsAggregatedMetrics,ce="__aggregated_metric__",ue=(0,l.dateTime)("2024-08-30","YYYY-MM-DD");const de="var-primary_label",pe="var-ds";class ge extends o.Bs{getUrlState(){const{key:e}=he(),t=(0,h.El)(this).state.filters[0];return t.key&&t.key!==e&&(0,h.El)(this).setState({filters:[le(se({},t),{key:null!=e?e:t.key})]}),{}}updateFromUrl(e){}addDatasourceChangeToBrowserHistory(e){const t=T.locationService.getLocation(),n=new URLSearchParams(t.search),r=n.get(pe);if(r&&e!==r){const r=t.pathname+t.search;n.set(pe,e);const a=t.pathname+"?"+n.toString();r!==a&&(0,g.ad)(a)}}addLabelChangeToBrowserHistory(e,t=!1){const{key:n,search:r,location:a}=he();if(n){const i=null==n?void 0:n.split("|");if((null==i?void 0:i[0])!==e){i[0]=e,r.set(de,i.join("|"));const n=a.pathname+a.search,s=a.pathname+"?"+r.toString();n!==s&&(t?T.locationService.replace(s):(0,g.ad)(s))}}}getSelectedTab(){var e;return null===(e=(0,h.El)(this).state.filters[0])||void 0===e?void 0:e.key}selectDefaultLabelTab(){this.addLabelChangeToBrowserHistory(d.OX,!0),this.setSelectedTab(d.OX)}setSelectedTab(e){(0,u.cO)((0,h.S9)(this).getValue().toString(),e),(0,h.h)(this),(0,h.BL)(e,this)}buildServiceLayout(e,t,n,r,a,i){var s;let u;n.to.diff(n.from,"hours")>=4&&n.to.diff(n.from,"hours")<=26&&(u="2h");const p=[];var g;this.isAggregatedMetricsActive()||p.push(new Z({name:e,value:t})),p.push(new y({labelValue:t,labelName:e}));const h=o.d0.timeseries().setTitle(t).setData((0,E.rS)([(0,x.l)(this.getMetricExpression(t,r,a),{legendFormat:`{{${d.e4}}}`,splitDuration:u,refId:`ts-${t}`,step:r.state.value===ce?"10s":void 0})],{runQueriesMode:"manual"})).setCustomFieldConfig("stacking",{mode:c.StackingMode.Normal}).setCustomFieldConfig("fillOpacity",100).setCustomFieldConfig("lineWidth",0).setCustomFieldConfig("pointSize",0).setCustomFieldConfig("drawStyle",c.DrawStyle.Bars).setUnit("short").setOverrides(E.jC).setOption("legend",{showLegend:!0,calcs:["sum"],placement:"right",displayMode:c.LegendDisplayMode.Table}).setHeaderActions([new K.p({ds:null!==(g=null===(s=i.getValue())||void 0===s?void 0:s.toString())&&void 0!==g?g:"",labelName:e,labelValue:t}),...p]).build();h.setState({extendPanelContext:(n,r)=>this.extendTimeSeriesLegendBus(e,t,r,h)});const f=new o.xK({$behaviors:[new o.Gg.K2({key:"serviceCrosshairSync",sync:l.DashboardCursorSync.Crosshair})],body:h});return f.addActivationHandler((()=>{var e;(null===(e=(0,U.oh)(f)[0].state.data)||void 0===e?void 0:e.state)!==l.LoadingState.Done&&this.runPanelQuery(f)})),f}isAggregatedMetricsActive(){const e=this.getQueryOptionsToolbar();return!(null==e?void 0:e.state.options.aggregatedMetrics.disabled)&&(null==e?void 0:e.state.options.aggregatedMetrics.active)}formatPrimaryLabelForUI(){const e=this.getSelectedTab();return e===d.OX?d.ky:e}setVolumeQueryRunner(){this.setState({$data:(0,E.HF)({queries:[(0,x.$k)(`{${d.kl}, ${d.ll}}`,"volume",this.getSelectedTab())],runQueriesMode:"manual"})}),this.subscribeToVolume()}doVariablesNeedSync(){const e=(0,h.cR)(this),t=(0,h.aW)(this),n=this.getSelectedTab(),r=e.state.filters.filter((e=>e.key!==n));return{filters:r,needsSync:!(0,_.B)(r,t.state.filters)}}syncVariables(){const e=(0,h.aW)(this),{filters:t,needsSync:n}=this.doVariablesNeedSync();n&&e.setState({filters:t})}onActivate(){var e;this.fixRequiredUrlParams(),this.syncVariables(),this.setVolumeQueryRunner(),this.subscribeToPrimaryLabelsVariable(),this.subscribeToLabelFilterChanges(),this.subscribeToActiveTabVariable((0,h.El)(this)),(null===(e=this.state.$data.state.data)||void 0===e?void 0:e.state)!==l.LoadingState.Done&&this.runVolumeOnActivate(),this.subscribeToTimeRange(),this.subscribeToDatasource(),this.subscribeToAggregatedMetricToggle(),this.subscribeToAggregatedMetricVariable()}runVolumeOnActivate(){var e,t;this.isTimeRangeTooEarlyForAggMetrics()?(this.onUnsupportedAggregatedMetricTimeRange(),(null===(e=this.state.$data.state.data)||void 0===e?void 0:e.state)!==l.LoadingState.Done&&this.runVolumeQuery()):(this.onSupportedAggregatedMetricTimeRange(),(null===(t=this.state.$data.state.data)||void 0===t?void 0:t.state)!==l.LoadingState.Done&&this.runVolumeQuery())}subscribeToAggregatedMetricToggle(){var e;this._subs.add(null===(e=this.getQueryOptionsToolbar())||void 0===e?void 0:e.subscribeToState(((e,t)=>{e.options.aggregatedMetrics.userOverride!==t.options.aggregatedMetrics.userOverride&&this.runVolumeQuery(!0)})))}subscribeToDatasource(){this._subs.add((0,h.S9)(this).subscribeToState((e=>{this.addDatasourceChangeToBrowserHistory(e.value.toString()),this.runVolumeQuery()})))}subscribeToActiveTabVariable(e){this._subs.add(e.subscribeToState(((e,t)=>{if(e.filterExpression!==t.filterExpression){const t=e.filters[0].key;this.addLabelChangeToBrowserHistory(t);const{needsSync:n}=this.doVariablesNeedSync();n?this.syncVariables():this.runVolumeQuery(!0)}})))}subscribeToAggregatedMetricVariable(){this._subs.add((0,h.vm)(this).subscribeToState(((e,t)=>{e.value!==t.value&&(this.setState({body:new o.gF({children:[]})}),this.updateBody(!0))})))}subscribeToPrimaryLabelsVariable(){const e=(0,h.cR)(this);this._subs.add(e.subscribeToState(((e,t)=>{(0,_.B)(e.filters,t.filters)||this.syncVariables()})))}subscribeToLabelFilterChanges(){const e=(0,h.aW)(this);this._subs.add(e.subscribeToState(((e,t)=>{(0,_.B)(e.filters,t.filters)||this.runVolumeQuery(!0)})))}subscribeToVolume(){this._subs.add(this.state.$data.subscribeToState(((e,t)=>{var n,r,a;(null===(n=e.data)||void 0===n?void 0:n.state)!==l.LoadingState.Done||(0,_.B)(null==t||null===(r=t.data)||void 0===r?void 0:r.series,null==e||null===(a=e.data)||void 0===a?void 0:a.series)||this.updateBody(!0)})))}subscribeToTimeRange(){this._subs.add(o.jh.getTimeRange(this).subscribeToState((()=>{this.isTimeRangeTooEarlyForAggMetrics()?this.onUnsupportedAggregatedMetricTimeRange():this.onSupportedAggregatedMetricTimeRange(),this.runVolumeQuery()})))}fixRequiredUrlParams(){const{key:e}=he();e||this.selectDefaultLabelTab()}isTimeRangeTooEarlyForAggMetrics(){return o.jh.getTimeRange(this).state.value.from.isBefore((0,l.dateTime)(ue))}onUnsupportedAggregatedMetricTimeRange(){const e=this.getQueryOptionsToolbar();null==e||e.setState({options:{aggregatedMetrics:le(se({},null==e?void 0:e.state.options.aggregatedMetrics),{disabled:!0})}})}getQueryOptionsToolbar(){return o.jh.getAncestor(this,$.P).state.controls.find((e=>e instanceof N.s))}onSupportedAggregatedMetricTimeRange(){const e=this.getQueryOptionsToolbar();null==e||e.setState({options:{aggregatedMetrics:le(se({},null==e?void 0:e.state.options.aggregatedMetrics),{disabled:!1})}})}runVolumeQuery(e=!1){e&&this.setVolumeQueryRunner(),this.updateAggregatedMetricVariable(),this.state.$data.runQueries()}updateAggregatedMetricVariable(){const e=(0,h.vm)(this),t=(0,h.cR)(this);if(this.isTimeRangeTooEarlyForAggMetrics()&&oe||!this.isAggregatedMetricsActive()){e.changeValueTo(d.OX),t.setState({hide:D.zL.dontHide}),e.changeValueTo(d.OX);o.jh.findByKeyAndType(this,$.y,te.H).setState({hidden:!1})}else{e.changeValueTo(ce),t.setState({hide:D.zL.hideVariable,filters:[]});o.jh.findByKeyAndType(this,$.y,te.H).setState({hidden:!0})}}updateTabs(){if(!this.state.tabs){const e=new H({});this.setState({tabs:e})}}getGridItems(){return this.state.body.state.children}getVizPanel(e){return e.state.body instanceof o.Eb?e.state.body:void 0}runPanelQuery(e){if(e.isActive){const n=(0,U.oh)(e);if(1===n.length){var t;const e=n[0],r=e.state.queries[0],a=null===(t=e.state.data)||void 0===t?void 0:t.timeRange,i=o.jh.getTimeRange(this),s=a?Math.abs(i.state.value.from.diff(null==a?void 0:a.from,"s")):1/0,l=a?Math.abs(i.state.value.to.diff(null==a?void 0:a.to,"s")):1/0,c=o.jh.interpolate(this,r.expr);(e.state.key!==c||s>0||l>0)&&(e.setState({key:c}),e.runQueries())}}}updateBody(e=!1){var t;const{labelsToQuery:n}=this.getLabels(null===(t=this.state.$data.state.data)||void 0===t?void 0:t.series),r=this.getSelectedTab();if(this.updateTabs(),this.state.paginationScene||this.setState({paginationScene:new re({})}),n&&0!==n.length){const t=[],a=this.getGridItems(),i=o.jh.getTimeRange(this).state.value,s=(0,h.vm)(this),l=(0,h.El)(this),c=(0,h.S9)(this),u=(this.state.currentPage-1)*this.state.countPerPage,d=u+this.state.countPerPage;for(const o of n.slice(u,d)){const n=a.filter((e=>{const t=this.getVizPanel(e);return(null==t?void 0:t.state.title)===o}));if(2===n.length)t.push(n[0],n[1]),n[0].isActive&&e&&this.runPanelQuery(n[0]),n[1].isActive&&e&&this.runPanelQuery(n[1]);else{const e=this.buildServiceLayout(r,o,i,s,l,c),n=this.buildServiceLogsLayout(r,o);t.push(e,n)}}this.state.body.setState({children:t,isLazy:!0,templateColumns:"repeat(auto-fit, minmax(350px, 1fr) minmax(300px, calc(70vw - 100px)))",autoRows:"200px",md:{templateColumns:"1fr",rowGap:1,columnGap:1}})}else this.state.body.setState({children:[]})}updateServiceLogs(e,t){var n;if(!this.state.body)return void this.updateBody();const{labelsToQuery:r}=this.getLabels(null===(n=this.state.$data.state.data)||void 0===n?void 0:n.series),a=null==r?void 0:r.indexOf(t);if(void 0===a||a<0)return;let i=[...this.getGridItems()];i.splice(2*a+1,1,this.buildServiceLogsLayout(e,t)),this.state.body.setState({children:i})}getLogExpression(e,t,n){return`{${e}=\`${t}\` , ${d.ll} }${n}`}getMetricExpression(e,t,n){const r=n.state.filters[0];return t.state.value===ce?r.key===d.OX?`sum by (${d.e4}) (sum_over_time({${ce}=\`${e}\` } | logfmt | unwrap count [$__auto]))`:`sum by (${d.e4}) (sum_over_time({${ce}=~\`.+\` } | logfmt | ${r.key}=\`${e}\` | unwrap count [$__auto]))`:`sum by (${d.e4}) (count_over_time({ ${r.key}=\`${e}\`, ${d.ll} } [$__auto]))`}getLabels(e){var t,n,r;const a=null!==(r=null==e||null===(t=e[0])||void 0===t?void 0:t.fields[0].values)&&void 0!==r?r:[],i=null===(n=(0,h.S9)(this).getValue())||void 0===n?void 0:n.toString(),s=(0,h.eY)(this).getValue(),l=this.getSelectedTab(),o=function(e,t,n,r){if(!(null==e?void 0:e.length))return[];".+"===n&&(n="");const a=(0,u.eT)(t,r).filter((t=>t.toLowerCase().includes(n.toLowerCase())&&e.includes(t)));return Array.from(new Set([...a,...e]))}(a,i,String(s),l);return{labelsByVolume:a,labelsToQuery:o}}constructor(e){var t,n;super(se({body:new o.gF({children:[]}),$variables:new o.Pj({variables:[new L.m({name:d.Du,label:"Service",hide:D.zL.hideVariable,skipUrlSync:!0,value:".+"}),new L.m({name:d.Wi,label:"",hide:D.zL.hideLabel,value:d.OX,skipUrlSync:!0,options:[{value:d.OX,label:d.OX},{value:ce,label:ce}]}),new o.H9({name:d.Gb,hide:D.zL.hideLabel,expressionBuilder:e=>function(e){if(e.length){const t=e[0];return`${t.key}${t.operator}\`${t.value}\``}return""}(e),filters:[{key:null!==(t=he().key)&&void 0!==t?t:d.OX,value:".+",operator:"=~"}]}),new o.H9({name:d.fi,datasource:d.eL,layout:"vertical",filters:[],expressionBuilder:x.VW,hide:D.zL.hideVariable,key:"adhoc_service_filter_replica",skipUrlSync:!0})]}),$data:(0,E.HF)({queries:[],runQueriesMode:"manual"}),serviceLevel:new Map,countPerPage:null!==(n=(0,u.KH)())&&void 0!==n?n:20,currentPage:1,showPopover:!1,tabOptions:[{label:d.ky,value:d.OX}]},e)),ie(this,"_urlSync",new o.So(this,{keys:[de]})),ie(this,"onSearchServicesChange",(0,a.debounce)((e=>{const t=(0,h.eY)(this);(e?(0,x.vC)(e):".+")!==t.state.value&&t.setState({value:e?(0,x.vC)(e):".+",label:null!=e?e:""});const n=(0,h.El)(this),r=n.state.filters[0];(0,x.vC)(t.state.value.toString())!==r.value&&n.setState({filters:[le(se({},r),{value:(0,x.vC)(t.state.value.toString())})]}),this.setState({currentPage:1}),(0,p.EE)(p.NO.service_selection,p.ir.service_selection.search_services_changed,{searchQuery:e})}),500)),ie(this,"getLevelFilterForService",(e=>{let t=this.state.serviceLevel.get(e)||[];if(0===t.length)return"";return` | ${t.map((e=>("logs"===e&&(e=""),`${d.e4}=\`${e}\``))).join(" or ")} `})),ie(this,"buildServiceLogsLayout",((e,t)=>{const n=this.getLevelFilterForService(t),r=new o.xK({$behaviors:[new o.Gg.K2({sync:l.DashboardCursorSync.Off})],body:o.d0.logs().setHoverHeader(!0).setData((0,E.rS)([(0,x.l)(this.getLogExpression(e,t,n),{maxLines:100,refId:`logs-${t}`})],{runQueriesMode:"manual"})).setTitle(t).setOption("showTime",!0).setOption("enableLogDetails",!1).build()});return r.addActivationHandler((()=>{var e;(null===(e=(0,U.oh)(r)[0].state.data)||void 0===e?void 0:e.state)!==l.LoadingState.Done&&this.runPanelQuery(r)})),r})),ie(this,"extendTimeSeriesLegendBus",((e,t,n,r)=>{const a=n.onToggleSeriesVisibility;n.onToggleSeriesVisibility=(n,i)=>{var s,l,o;null==a||a(n,i);const c=(0,j.vX)(null!==(o=null===(l=r.state.$data)||void 0===l||null===(s=l.state.data)||void 0===s?void 0:s.series)&&void 0!==o?o:[]),u=(0,j.pC)(n,this.state.serviceLevel.get(t),i,c);this.state.serviceLevel.set(t,u),this.updateServiceLogs(e,t)}})),this.addActivationHandler(this.onActivate.bind(this))}}function he(){const e=T.locationService.getLocation(),t=new URLSearchParams(e.search),n=t.get(de),r=null==n?void 0:n.split("|");return{key:null==r?void 0:r[0],search:t,location:e}}function fe(e){return{container:(0,r.css)({display:"flex",flexDirection:"column",flexGrow:1,position:"relative"}),headingWrapper:(0,r.css)({marginTop:e.spacing(1)}),loadingText:(0,r.css)({margin:0}),header:(0,r.css)({position:"absolute",right:0,top:"4px",zIndex:2}),bodyWrapper:(0,r.css)({flexGrow:1,display:"flex",flexDirection:"column"}),body:(0,r.css)({flexGrow:1,display:"flex",flexDirection:"column"}),searchPaginationWrap:(0,r.css)({label:"search-pagination-wrap",display:"flex",alignItems:"center",flexWrap:"wrap",flex:"1 0 auto",[e.breakpoints.down("md")]:{marginTop:e.spacing(1),width:"100%"}}),searchWrapper:(0,r.css)({label:"search-wrapper",display:"flex",alignItems:"center",flexWrap:"wrap",[e.breakpoints.down("md")]:{flexDirection:"column",alignItems:"flex-start"}}),searchField:(0,r.css)({marginTop:e.spacing(1),position:"relative"})}}ie(ge,"Component",(({model:e})=>{var t;const n=(0,c.useStyles2)(fe),{body:r,$data:a,tabs:i,paginationScene:o}=e.useState(),{data:u}=a.useState(),d=e.getSelectedTab(),p=(0,h.eY)(e),{label:f,value:v}=p.useState(),m=v&&".+"!==v,{labelsByVolume:b,labelsToQuery:y}=e.getLabels(null==u?void 0:u.series),O=(null==u?void 0:u.state)===l.LoadingState.Loading||(null==u?void 0:u.state)===l.LoadingState.Streaming||void 0===u,E=(null===(t=a.state.data)||void 0===t?void 0:t.state)===l.LoadingState.Error,C=e.formatPrimaryLabelForUI();let j=p.getValue().toString();".+"===j&&(j="");const L=(0,x.sT)(j);var _;return s().createElement("div",{className:n.container},s().createElement("div",{className:n.bodyWrapper},i&&s().createElement(i.Component,{model:i}),s().createElement(c.Field,{className:n.searchField},s().createElement("div",{className:n.searchWrapper},s().createElement(F.f,{initialFilter:{label:L,value:j,icon:"filter"},isLoading:O,value:j||f,onChange:t=>(t=>{e.onSearchServicesChange(t)})(t),selectOption:t=>{!function(e,t,n){const r=w(e,t,n);S(e,t,n),(0,g.ad)(r)}(d,t,e)},label:C,options:null!==(_=null==y?void 0:y.map((e=>({value:e,label:e}))))&&void 0!==_?_:[]}),!O&&s().createElement("span",{className:n.searchPaginationWrap},o&&s().createElement(re.PageCount,{model:o,totalCount:y.length}),o&&s().createElement(re.Component,{model:o,totalCount:y.length})))),!O&&E&&s().createElement(P,null),!O&&!E&&m&&!(null==b?void 0:b.length)&&s().createElement(k,null),!O&&!E&&!m&&!(null==b?void 0:b.length)&&s().createElement(G,{labelName:d}),!(!O&&E)&&s().createElement("div",{className:n.body},s().createElement(r.Component,{model:r}),s().createElement("div",{className:n.headingWrapper},o&&s().createElement(re.Component,{totalCount:y.length,model:o})))))}))},9641:(e,t,n)=>{n.d(t,{C:()=>s});var r=n(5959),a=n.n(r),i=n(2007);function s(e){return a().createElement(i.RadioButtonGroup,{options:[{label:"Logs",value:"logs",description:"Show results in logs visualisation"},{label:"Table",value:"table",description:"Show results in table visualisation"}],size:"sm",value:e.vizType,onChange:e.onChange})}},4702:(e,t,n)=>{n.d(t,{m:()=>s});var r=n(1269),a=n(9736);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class s extends a.n8{getValueOptions(e){return(0,r.of)(this.state.options)}constructor(e){super(function(e){for(var t=1;t(0,a.WY)({model:e})))},6464:(e,t,n)=>{n.d(t,{K:()=>g});var r=n(9736),a=n(6854),i=n(3241),s=n(20),l=n(5553),o=n(708),c=n(8428),u=n(4351);function d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e){for(var t=1;te)).forEach((e=>{const t=this.joinCombinedFiltersValues(e,"|");for(const n in e){const r=e[n].operator;a.push({key:n,operator:r,value:t[n]})}})),a}getExpr(){let{equalsFilters:e,notEqualsFilters:t,regexEqualFilters:n,regexNotEqualFilters:r,ltFilters:a,lteFilters:i,gtFilters:s,gteFilters:l}=this.getCombinedLabelFilters();this.options.debug;const o=this.buildLabelsLogQLFromFilters({equalsFilters:e,notEqualsFilters:t,regexEqualFilters:n,regexNotEqualFilters:r,ltFilters:a,lteFilters:i,gtFilters:s,gteFilters:l});var c;return o?(null!==(c=this.options.prefix)&&void 0!==c?c:"")+o:""}getLabelsExpr(e){return this.options=p({},{joinMatchFilters:!0,decodeFilters:!1,filterType:"indexed"},e),this.getExpr()}getMetadataExpr(e){return this.options=p({},{filterSeparator:" |",prefix:"| ",joinMatchFilters:!1,decodeFilters:!1,filterType:"field"},e),this.getExpr()}getLevelsExpr(e){return this.options=p({},{filterSeparator:" |",prefix:"| ",joinMatchFilters:!1,decodeFilters:!1,filterType:"field"},e),this.getExpr()}getFieldsExpr(e){return this.options=p({},{filterSeparator:" |",prefix:"| ",joinMatchFilters:!1,decodeFilters:!0,filterType:"field"},e),this.getExpr()}buildLabelsLogQLFromFilters({equalsFilters:e,notEqualsFilters:t,regexEqualFilters:n,regexNotEqualFilters:r,ltFilters:s,lteFilters:l,gtFilters:o,gteFilters:c}){let u,d,p,g,h,f,v,m;const b=[];var y;this.options.joinMatchFilters?(u=this.joinCombinedFiltersValues(e,"|"),d=this.joinCombinedFiltersValues(t,"|"),p=this.joinCombinedFiltersValues(n,"|"),g=this.joinCombinedFiltersValues(r,"|"),b.push(...this.buildJoinedFilters(u,a.KQ.Equal)),b.push(...this.buildJoinedFilters(d,a.KQ.NotEqual)),b.push(...this.buildJoinedFilters(p,a.KQ.RegexEqual)),b.push(...this.buildJoinedFilters(g,a.KQ.RegexNotEqual))):(u=this.getFilterValues(e),d=this.getFilterValues(t),p=this.getFilterValues(n),g=this.getFilterValues(r),b.push(...this.buildFilter(u,a.KQ.Equal)),b.push(...this.buildFilter(d,a.KQ.NotEqual)),b.push(...this.buildFilter(p,a.KQ.RegexEqual)),b.push(...this.buildFilter(g,a.KQ.RegexNotEqual))),h=this.getFilterValues(s),f=this.getFilterValues(l),v=this.getFilterValues(o),m=this.getFilterValues(c),b.push(...this.buildFilter(h,a.Rk.lt)),b.push(...this.buildFilter(f,a.Rk.lte)),b.push(...this.buildFilter(v,a.Rk.gt)),b.push(...this.buildFilter(m,a.Rk.gte)),this.options.debug;const S=(0,i.trim)(this.combineValues(b,`${null!==(y=this.options.filterSeparator)&&void 0!==y?y:","} `));return this.options.debug,S}getCombinedLabelFilters(){const{[a.KQ.Equal]:e,[a.KQ.NotEqual]:t,[a.KQ.RegexEqual]:n,[a.KQ.RegexNotEqual]:r,[a.Rk.lt]:i,[a.Rk.lte]:s,[a.Rk.gt]:l,[a.Rk.gte]:o}=this.groupFiltersByKey(this.filters);let c,u,d,p,g,h,f,v;return this.options.joinMatchFilters?(c=this.combineFiltersValues(e,a.KQ.RegexEqual),u=this.combineFiltersValues(t,a.KQ.RegexNotEqual),d=this.combineFiltersValues(n),p=this.combineFiltersValues(r)):(c=this.combineFiltersValues(e),u=this.combineFiltersValues(t),d=this.combineFiltersValues(n),p=this.combineFiltersValues(r)),g=this.combineFiltersValues(i),h=this.combineFiltersValues(s),f=this.combineFiltersValues(l),v=this.combineFiltersValues(o),this.options.debug,this.options.joinMatchFilters&&(c&&(d=this.mergeFilters(a.KQ.RegexEqual,c,d),c=this.removeStaleOperators(c,a.KQ.Equal)),u&&(p=this.mergeFilters(a.KQ.RegexNotEqual,u,p),u=this.removeStaleOperators(u,a.KQ.NotEqual))),{equalsFilters:c,notEqualsFilters:u,regexEqualFilters:d,regexNotEqualFilters:p,ltFilters:g,lteFilters:h,gtFilters:f,gteFilters:v}}buildFilter(e,t){const n=[];for(const r in e){const a=[],i=e[r];(0,o.iu)(t)?i.forEach((e=>a.push(this.buildFilterString(r,t,e,"")))):i.forEach((e=>a.push(this.buildFilterString(r,t,e)))),(0,o.BG)(t)?n.push(a.join(` ${this.positiveFilterValueSeparator} `)):n.push(a.join(` ${this.negativeFilterValueSeparator} `))}return n}buildJoinedFilters(e,t){const n=[];for(const r in e)n.push(this.buildFilterString(r,t,e[r]));return n}removeStaleOperators(e,t){const n={};return Object.keys(e).forEach((r=>{e[r].operator===t&&(n[r]=e[r])})),n}mergeFilters(e,t,n){return Object.keys(t).filter((n=>t[n].operator===e)).map((e=>({values:t[e].values,key:e}))).forEach((r=>{void 0===n&&(n={[r.key]:{values:[],operator:e}}),void 0===n[r.key]&&(n[r.key]={values:[],operator:e}),n[r.key].values.push(...this.mergeCombinedFiltersValues(t[r.key],e))})),n}mergeCombinedFiltersValues(e,t){var n;const r=[];return e.operator===t&&(null===(n=e.values)||void 0===n?void 0:n.length)&&r.push(...e.values),r}joinCombinedFiltersValues(e,t){const n={};for(const r in e)e[r].values.length&&(n[r]=this.combineValues(e[r].values,t));return n}getFilterValues(e){const t={};for(const n in e)e[n].values.length&&(t[n]=e[n].values);return t}combineValues(e,t){return e.join(`${t}`)}combineFiltersValues(e,t){let n={};for(const i in e){if(!e[i].length)continue;const s=(0,c.kR)(e[i][0].operator),l=null!=t?t:s,o=e[i][0];if(n[i]={values:[],operator:l},1===e[i].length){var r;const e=this.escapeFieldValue(o.operator,o.value,null!==(r=o.valueLabels)&&void 0!==r?r:[]);n[i]={operator:s,values:[e]},this.options.debug}else{const t=this.escapeFieldValues(i,e,l);var a;if(void 0===n[i].operator)n[i]={operator:l,values:t};else null===(a=n[i].values)||void 0===a||a.push(...t)}}return n}escapeFieldValues(e,t,n){return t[e].map((e=>{var t;return this.escapeFieldValue(n,e.value,null!==(t=e.valueLabels)&&void 0!==t?t:[])}))}escapeFieldValue(e,t,n){const a=(0,s.zE)(t);if(this.options.decodeFilters){t=(0,l.bu)({value:t,valueLabels:n}).value}return t===s.ZO?(this.options.debug,t):a?(this.options.debug,r.Go.escapeLabelValueInExactSelector((0,s.Dx)(t))):(0,o.SM)(e)?(this.options.debug,r.Go.escapeLabelValueInRegexSelector(t)):(this.options.debug,r.Go.escapeLabelValueInExactSelector(t))}buildFilterString(e,t,n,r='"'){if(n===s.ZO)return`${e}${t}${n}`;const a=`${e}${t}${r}${n}${r}`;return this.options.debug,a}groupFiltersByKey(e){let t=e.filter((e=>{var t;return!(null===(t=this.options.ignoreKeys)||void 0===t?void 0:t.includes(e.key))||(0,o.SM)(e.operator)}));"indexed"===this.options.filterType&&t.length<1&&(t=e);const n=t.filter((e=>(0,o.BG)(e.operator)&&!(0,o.SM)(e.operator))),r=t.filter((e=>(0,o.BG)(e.operator)&&(0,o.SM)(e.operator))),s=t.filter((e=>(0,o.Lw)(e.operator)&&!(0,o.SM)(e.operator))),l=t.filter((e=>(0,o.Lw)(e.operator)&&(0,o.SM)(e.operator))),c=t.filter((e=>e.operator===a.w7.gt)),u=t.filter((e=>e.operator===a.w7.gte)),d=t.filter((e=>e.operator===a.w7.lt)),p=t.filter((e=>e.operator===a.w7.lte)),g=(0,i.groupBy)(n,(e=>e.key)),h=(0,i.groupBy)(r,(e=>e.key)),f=(0,i.groupBy)(s,(e=>e.key)),v=(0,i.groupBy)(l,(e=>e.key)),m=(0,i.groupBy)(c,(e=>e.key)),b=(0,i.groupBy)(u,(e=>e.key)),y=(0,i.groupBy)(d,(e=>e.key)),S=(0,i.groupBy)(p,(e=>e.key));return{[a.w7.Equal]:g,[a.w7.RegexEqual]:h,[a.w7.NotEqual]:f,[a.w7.RegexNotEqual]:v,[a.w7.gt]:m,[a.w7.gte]:b,[a.w7.lt]:y,[a.w7.lte]:S}}constructor(e,t={joinMatchFilters:!0,decodeFilters:!1,filterType:"field"}){d(this,"filters",void 0),d(this,"options",void 0),d(this,"positiveFilterValueSeparator","or"),d(this,"negativeFilterValueSeparator","|"),this.filters=e,this.options=t,this.options.debug||(this.options.debug=(0,u.Rb)())}}},4509:(e,t,n)=>{n.d(t,{EE:()=>i,NO:()=>s,ir:()=>l});var r=n(8531),a=n(2533);const i=(e,t,n)=>{(0,r.reportInteraction)(((e,t)=>`${a.id.replace(/-/g,"_")}_${e}_${t}`)(e,t),n)},s={service_selection:"service_selection",service_details:"service_details",all:"all"},l={[s.service_selection]:{search_services_changed:"search_services_changed",service_selected:"service_selected",aggregated_metrics_toggled:"aggregated_metrics_toggled",add_to_filters:"add_to_filters"},[s.service_details]:{open_in_explore_clicked:"open_in_explore_clicked",action_view_changed:"action_view_changed",add_to_filters_in_breakdown_clicked:"add_to_filters_in_breakdown_clicked",select_field_in_breakdown_clicked:"select_field_in_breakdown_clicked",level_in_logs_volume_clicked:"level_in_logs_volume_clicked",label_in_panel_summary_clicked:"label_in_panel_summary_clicked",layout_type_changed:"layout_type_changed",search_string_in_logs_changed:"search_string_in_logs_changed",search_string_in_variables_changed:"search_string_in_variables_changed",pattern_removed:"pattern_removed",pattern_selected:"pattern_selected",pattern_field_clicked:"pattern_field_clicked",logs_visualization_toggle:"logs_visualization_toggle",logs_detail_filter_applied:"logs_detail_filter_applied",logs_popover_line_filter:"logs_popover_line_filter",logs_toggle_displayed_field:"logs_toggle_displayed_field",logs_clear_displayed_fields:"logs_clear_displayed_fields",value_breakdown_sort_change:"value_breakdown_sort_change",wasm_not_supported:"wasm_not_supported",change_viz_type:"change_viz_type"},[s.all]:{interval_too_long:"interval_too_long",open_in_explore_menu_clicked:"open_in_explore_menu_clicked"}}},1532:(e,t,n)=>{n.d(t,{B:()=>i,n:()=>s});var r=n(3241),a=n.n(r);const i=(e,t)=>{if(typeof e!=typeof t)return!1;const n=new Set(e),r=new Set(t);return n.size===r.size&&a().isEqual(n,r)},s=(e,t)=>typeof e==typeof t&&a().isEqual(e,t)},8955:(e,t,n)=>{n.r(t),n.d(t,{DETECTED_FIELDS_CARDINALITY_NAME:()=>G,DETECTED_FIELDS_NAME_FIELD:()=>K,DETECTED_FIELDS_PARSER_NAME:()=>U,DETECTED_FIELDS_TYPE_NAME:()=>q,WRAPPED_LOKI_DS_UID:()=>Q,WrappedLokiDatasource:()=>J,default:()=>Y});var r=n(7781),a=n(8531),i=n(9736),s=n(1269),l=n(5719),o=n(8502),c=n(20),u=n(2533),d=n(5745),p=n(2344),g=n(3257);function h(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e){for(var t=1;t2&&!function(e,t){let n=!1;return p.K3.parse(e).iterate({enter:({type:e})=>{if(e.id===t)return n=!0,!1}}),n}(e,p.Yw)}function b(e){if(function(e){return void 0!==e.targets.find((e=>m(e.expr)))}(e))return!1;if(function(e){return e.targets.find((e=>"instant"===e.queryType))}(e))return!1;for(let n=0;ne.replace("}",`, __stream_shard__=~"${y}"}`),w=(e,t)=>{if(void 0===t||0===t.length)return e.map((e=>v(f({},e),{expr:e.expr.replace(`, __stream_shard__=~"${y}"}`,"}")})));let n=t.join("|");return"-1"===n||1===t.length?(n="-1"===n?"":n,e.map((e=>v(f({},e),{expr:e.expr.replace(`, __stream_shard__=~"${y}"}`,`, __stream_shard__="${n}"}`)})))):e.map((e=>v(f({},e),{expr:e.expr.replace(new RegExp(`${y}`,"g"),n)})))};var O=n(5953);function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function E(e){for(var t=1;t{const n=e.data.find((e=>function(e,t){var n,a,i,s,l,o;if(e.refId!==t.refId)return!1;if(null!=e.name&&null!=t.name&&e.name!==t.name)return!1;const c=null===(n=e.meta)||void 0===n?void 0:n.type,u=null===(a=t.meta)||void 0===a?void 0:a.type;if(c!==u)return!1;if(c===r.DataFrameType.TimeSeriesMulti)return function(e,t){const n=e.fields.find((e=>e.type===r.FieldType.number)),a=t.fields.find((e=>e.type===r.FieldType.number));if(void 0===n||void 0===a)return!1;null==e.name&&(e.name=JSON.stringify(n.labels));null==t.name&&(t.name=JSON.stringify(a.labels));return e.name===t.name}(e,t);const d=null===(s=e.meta)||void 0===s||null===(i=s.custom)||void 0===i?void 0:i.frameType,p=null===(o=t.meta)||void 0===o||null===(l=o.custom)||void 0===l?void 0:l.frameType;if("LabeledTimeValues"===d&&"LabeledTimeValues"===p)return!0;if(d===p)return!0;return!1}(e,t)));n?function(e,t){var n,a;const i=e.fields.find((e=>e.type===r.FieldType.time)),s=e.fields.find((e=>e.type===r.FieldType.string&&"id"===e.name)),l=t.fields.find((e=>e.type===r.FieldType.time)),o=t.fields.find((e=>e.type===r.FieldType.string&&"id"===e.name));if(!i||!l)return void O.v.error(new Error("Time fields not found in the data frames"));var c;const u=null!==(c=null==l?void 0:l.values.slice(0))&&void 0!==c?c:[],d=Math.max(e.fields.length,t.fields.length);for(let n=0;n0&&(e.errors=s);const o=null!==(l=e.error)&&void 0!==l?l:t.error;var c,u;null!=o&&(e.error=o);const d=[...null!==(c=e.traceIds)&&void 0!==c?c:[],...null!==(u=t.traceIds)&&void 0!==u?u:[]];return d.length>0&&(e.traceIds=d),e}function k(e,t,n){const a=(0,r.closestIdx)(t.values[n],e.values);return a<0?0:t.values[n]===e.values[a]&&null!=t.nanos&&null!=e.nanos?t.nanos[n]>e.nanos[a]?a+1:a:t.values[n]>e.values[a]?a+1:a}function j(e,t,n,r,a,i){const s=function(e,t,n,r){if(e.nanos&&n.nanos)return void 0!==e.values[t]&&e.values[t]===n.values[r]&&void 0!==e.nanos[t]&&e.nanos[t]===n.nanos[r];return void 0!==e.values[t]&&e.values[t]===n.values[r]}(e,n,r,i);return!!s&&(null==t||null==a||void 0!==t.values[n]&&t.values[n]===a.values[i])}function F(e,t,n){const r=t.filter((t=>t.name===e.name));return 1===r.length?r[0]:t[n]}const L="Summary: total bytes processed";function _(e,t){const n=e.find((e=>e.displayName===L)),r=t.find((e=>e.displayName===L));if(null!=r&&null!=n)return[{value:r.value+n.value,displayName:L,unit:n.unit}];const a=null!=r?r:n;return null!=a?[a]:[]}function T(e){return C(E({},e),{fields:e.fields.map((e=>C(E({},e),{values:e.values})))})}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function N(e){for(var t=1;te.expr)).map((e=>$(N({},e),{expr:S(e.expr)})));return function(e,t,n){let a=!1,i={data:[],state:r.LoadingState.Streaming,key:(0,d.A)()},l=null,o=new Map,c=null;const u=(s,d,p,g)=>{let h=g,f=!1;null!=l&&(l.unsubscribe(),l=null);const v=()=>{i.state=a?r.LoadingState.Error:r.LoadingState.Done,s.next(i),s.complete()};if(a)return void v();const m=()=>{const e=Math.min(d+g,p.length);d{try{if(e&&!function(e){var t,n,r;const a=e.errors?(null!==(n=e.errors[0].message)&&void 0!==n?n:"").toLowerCase():null!==(r=null===(t=e.error)||void 0===t?void 0:t.message)&&void 0!==r?r:"";if(a.includes("timeout"))return!0;if(a.includes("parse error"))throw new Error(a);return!1}(e))return!1}catch(s){var t,n,r,i,l,h;return O.v.error(s,{msg:"sharding retry error",error:null!==(i=null==e||null===(t=e.error)||void 0===t?void 0:t.message)&&void 0!==i?i:"",errors:null!==(l=null==e||null===(n=e.errors)||void 0===n?void 0:n.map((e=>e.message)).join(" | "))&&void 0!==l?l:"",traces:null!==(h=null==e||null===(r=e.traceIds)||void 0===r?void 0:r.join("|"))&&void 0!==h?h:""}),a=!0,!1}if(g>1)return B(`Possible time out, new group size ${g=Math.floor(Math.sqrt(g))}`),f=!0,u(s,d,p,g),!0;var v;const m=null!==(v=o.get(d))&&void 0!==v?v:0;return m>3?(a=!0,!1):(o.set(d,m+1),c=setTimeout((()=>{O.v.info(`Retrying ${d} (${m+1})`),u(s,d,p,g),c=null}),1500*Math.pow(2,m)),f=!0,!0)},y=function(e,t,n){if(t===e.length)return[-1];return e.slice(t,t+n)}(p,d,g);B(`Querying ${y.join(", ")}`);const S=$(N({},t),{targets:w(n,y)});t.requestId&&(S.requestId=`${t.requestId}_shard_${d}_${g}`),l=e.runQuery(S).subscribe({next:e=>{var t;((null!==(t=e.errors)&&void 0!==t?t:[]).length>0||null!=e.error)&&b(e)||(h=function(e,t,n){const r=.7;return Math.min(t,Math.max(Math.floor((n-e)*r),1))}(d+g,function(e,t){var n,r;if(!e.data.length)return t+1;const a=null===(r=e.data[0].meta)||void 0===r||null===(n=r.stats)||void 0===n?void 0:n.find((e=>"Summary: exec time"===e.displayName));if(a){const e=Math.round(a.value);return B(`${a.value}`),e<=1?Math.floor(1.5*t):e<6?Math.ceil(1.1*t):1===t?t:e<20?Math.ceil(.9*t):Math.floor(t/2)}return t}(e,g),p.length),h!==g&&B(`New group size ${h}`),i=P(i,e))},complete:()=>{f||(i.data.length&&s.next(i),m())},error:e=>{O.v.error(e,{msg:"failed to shard"}),s.next(i),b()||m()}})},h=n=>{l=e.query(t).subscribe({next:e=>{i=e},complete:()=>{n.next(i)},error:e=>{O.v.error(e,{msg:"runNonSplitRequest subscription error"}),n.error(i)}})},f=new s.Observable((r=>{const i=(e=>{const t=(0,g.QH)(e,[p.MD]);return t.length>0?e.substring(t[0].from,t[0].to).replace(`, __stream_shard__=~"${y}"}`,"}"):""})(n[0].expr);return(0,g.T0)(i)?(e.languageProvider.fetchLabelValues("__stream_shard__",{timeRange:t.range,streamSelector:i||void 0}).then((e=>{const t=e.map((e=>parseInt(e,10)));t&&t.length?(t.sort(((e,t)=>t-e)),B(`Querying ${t.join(", ")} shards`),u(r,0,t,function(e){return Math.floor(Math.sqrt(e.length))}(t))):(O.v.warn("Shard splitting not supported. Issuing a regular query."),h(r))})).catch((e=>{O.v.error(e,{msg:"failed to fetch label values for __stream_shard__"}),h(r)})),()=>{a=!0,c&&clearTimeout(c),null!=l&&(l.unsubscribe(),l=null)}):(B(`Skipping invalid selector: ${i}`),void r.complete())}));return f}(e,t,n)}Boolean(localStorage.getItem(`${u.id}.sharding_debug_enabled`));function B(e){}var A=n(9598),M=n(7985);function R(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function V(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){R(i,r,a,s,l,"next",e)}function l(e){R(i,r,a,s,l,"throw",e)}s(void 0)}))}}function W(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function z(e){for(var t=1;t{var n;if(!(null===(n=e.scopedVars)||void 0===n?void 0:n.__sceneObject))throw new Error("Scene object not found in request");var r=this;(0,a.getDataSourceSrv)().get((0,l.U4)(e.scopedVars.__sceneObject.valueOf())).then(function(){var n=V((function*(n){var i;if(!(n instanceof a.DataSourceWithBackend&&"interpolateString"in n&&"getTimeRangeParams"in n))throw new Error("Invalid datasource!");const s=n;e.targets=null===(i=e.targets)||void 0===i?void 0:i.map((e=>(e.datasource=s,e)));const l=new Set;if(e.targets.forEach((e=>{var t;l.add(null!==(t=e.resource)&&void 0!==t?t:"")})),1!==l.size)throw new Error("A request cannot contain queries to multiple endpoints");switch(e.targets[0].resource){case"volume":yield r.getVolume(e,s,t);break;case"patterns":yield r.getPatterns(e,s,t);break;case"detected_labels":yield r.getDetectedLabels(e,s,t);break;case"detected_fields":yield r.getDetectedFields(e,s,t);break;case"labels":yield r.getLabels(e,s,t);break;default:r.getData(e,s,t)}}));return function(e){return n.apply(this,arguments)}}())}))}getData(e,t,n){const r=a.config.featureToggles.exploreLogsShardSplitting,i=H(z({},e),{targets:t.interpolateVariablesInQueries(e.targets,e.scopedVars).map((e=>H(z({},e),{resource:void 0,expr:(0,M.VT)(e.expr)})))});return(!1!==b(i)&&r?I(t,i):t.query(i)).subscribe(n),n}getPatterns(e,t,n){var a=this;return V((function*(){const i=e.targets.filter((e=>"patterns"===e.resource));if(1!==i.length)throw new Error("Patterns query can only have a single target!");const{interpolatedTarget:s,expression:l}=a.interpolate(t,i,e);n.next({data:[],state:r.LoadingState.Loading});try{var o;const a=t.getResource("patterns",{query:l,start:e.range.from.utc().toISOString(),end:e.range.to.utc().toISOString(),step:e.interval},{requestId:null!==(o=e.requestId)&&void 0!==o?o:"patterns",headers:{"X-Query-Tags":`Source=${A.s_}`}}),i=yield a,u=null==i?void 0:i.data;let d=-1/0,p=0;var c;const g=null!==(c=null==u?void 0:u.map((e=>{const t=[],n=[];let a=0;return e.samples.forEach((([e,r])=>{t.push(1e3*e),n.push(r),r>d&&(d=r),rd&&(d=r),r{var n,r,a,i;return(null===(r=t.meta)||void 0===r||null===(n=r.custom)||void 0===n?void 0:n.sum)-(null===(i=e.meta)||void 0===i||null===(a=i.custom)||void 0===a?void 0:a.sum)})),n.next({data:g,state:r.LoadingState.Done})}catch(e){n.next({data:[],state:r.LoadingState.Error})}return n}))()}interpolate(e,t,n){const r=e.interpolateVariablesInQueries(t,n.scopedVars);if(!r.length)throw new Error("Datasource failed to interpolate query!");const a=r[0];return{interpolatedTarget:a,expression:(0,M.VT)(a.expr)}}getDetectedLabels(e,t,n){var a=this;return V((function*(){const i=e.targets.filter((e=>"detected_labels"===e.resource));if(1!==i.length)throw new Error("Detected labels query can only have a single target!");let{interpolatedTarget:s,expression:l}=a.interpolate(t,i,e);"{}"===l&&(l=""),n.next({data:[],state:r.LoadingState.Loading});try{var c,u,d;const a=null===(u=(yield t.getResource("detected_labels",{query:l,start:e.range.from.utc().toISOString(),end:e.range.to.utc().toISOString()},{requestId:null!==(d=e.requestId)&&void 0!==d?d:"detected_labels",headers:{"X-Query-Tags":`Source=${A.s_}`}})).detectedLabels)||void 0===u||null===(c=u.filter((e=>!o.rm.includes(e.label))))||void 0===c?void 0:c.sort(((e,t)=>(0,o.p_)(e,t))),i=null==a?void 0:a.map((e=>({name:e.label,values:[e.cardinality]}))),p=(0,r.createDataFrame)({refId:s.refId,fields:null!=i?i:[]});n.next({data:[p],state:r.LoadingState.Done})}catch(e){n.next({data:[],state:r.LoadingState.Error})}return n}))()}getDetectedFields(e,t,n){var a=this;return V((function*(){const i=e.targets.filter((e=>"detected_fields"===e.resource));if(1!==i.length)throw new Error("Detected fields query can only have a single target!");n.next({data:[],state:r.LoadingState.Loading});const{interpolatedTarget:s,expression:l}=a.interpolate(t,i,e);try{var c,u;const a=yield t.getResource("detected_fields",{query:l,start:e.range.from.utc().toISOString(),end:e.range.to.utc().toISOString()},{requestId:null!==(u=e.requestId)&&void 0!==u?u:"detected_fields",headers:{"X-Query-Tags":`Source=${A.s_}`}}),i={name:K,type:r.FieldType.string,values:[],config:{}},d={name:G,type:r.FieldType.number,values:[],config:{}},p={name:U,type:r.FieldType.string,values:[],config:{}},g={name:q,type:r.FieldType.string,values:[],config:{}};null===(c=a.fields)||void 0===c||c.forEach((e=>{var t;o.$R.includes(e.label)||(i.values.push(e.label),d.values.push(e.cardinality),p.values.push((null===(t=e.parsers)||void 0===t?void 0:t.length)?e.parsers.join(", "):"structuredMetadata"),g.values.push(e.type))}));const h=(0,r.createDataFrame)({refId:s.refId,fields:[i,d,p,g]});n.next({data:[h],state:r.LoadingState.Done})}catch(e){O.v.error(e,{msg:"Detected fields error"}),n.next({data:[],state:r.LoadingState.Error})}return n}))()}getVolume(e,t,n){return V((function*(){if(1!==e.targets.length)throw new Error("Volume query can only have a single target!");const a=e.targets[0],i=a.primaryLabel;if(!i)throw new Error("Primary label is required for volume queries!");const s=t.interpolateVariablesInQueries([a],e.scopedVars),l=(0,M.VT)(s[0].expr.replace(".*.*",".+"));n.next({data:[],state:r.LoadingState.Loading});try{var o,u,d;const a=yield t.getResource("index/volume",{query:l,start:e.range.from.utc().toISOString(),end:e.range.to.utc().toISOString(),limit:5e3},{requestId:null!==(d=e.requestId)&&void 0!==d?d:"volume",headers:{"X-Query-Tags":`Source=${A.s_}`}});null==a||a.data.result.sort(((e,t)=>{const n=e.value[1],r=t.value[1];return Number(r)-Number(n)}));const s=(0,r.createDataFrame)({fields:[{name:c.OX,values:null==a||null===(o=a.data.result)||void 0===o?void 0:o.map((e=>e.metric[i]))},{name:"volume",values:null==a||null===(u=a.data.result)||void 0===u?void 0:u.map((e=>Number(e.value[1])))}]});n.next({data:[s]})}catch(e){O.v.error(e),n.next({data:[],state:r.LoadingState.Error})}return n.complete(),n}))()}getLabels(e,t,n){return V((function*(){if(1!==e.targets.length)throw new Error("Volume query can only have a single target!");try{var a;const i=yield t.getResource("labels",{start:e.range.from.utc().toISOString(),end:e.range.to.utc().toISOString()},{requestId:null!==(a=e.requestId)&&void 0!==a?a:"labels",headers:{"X-Query-Tags":`Source=${A.s_}`}}),s=(0,r.createDataFrame)({fields:[{name:"labels",values:null==i?void 0:i.data}]});n.next({data:[s],state:r.LoadingState.Done})}catch(e){n.next({data:[],state:r.LoadingState.Error})}return n.complete(),n}))()}testDatasource(){return Promise.resolve({status:"success",message:"Data source is working",title:"Success"})}constructor(e,t){super(e,t)}}const Y=function(){i.Go.registerRuntimeDataSource({dataSource:new J("wrapped-loki-ds",Q)})}},6838:(e,t,n)=>{n.d(t,{O:()=>o,m:()=>l});var r=n(20),a=n(376),i=n(5553),s=n(5953);function l(e,t,n=!0){const s=(0,i.ir)(e);let l="";n&&t===r.e4&&(l=`| ${r.e4} != ""`);const o=s.state.filters,c=(0,a.k$)(s);if(o.length){if("mixed"===c)return`sum(count_over_time({${r.S1}} ${l} ${r.S6} ${r.sC} ${r.rl} ${r.YN} ${r.Oc} [$__auto])) by (${t})`;if("json"===c)return`sum(count_over_time({${r.S1}} ${l} ${r.S6} ${r.sC} ${r.rl} ${r.VL} ${r.Oc} [$__auto])) by (${t})`;if("logfmt"===c)return`sum(count_over_time({${r.S1}} ${l} ${r.S6} ${r.sC} ${r.rl} ${r.mF} ${r.Oc} [$__auto])) by (${t})`}return`sum(count_over_time({${r.S1}} ${l} ${r.S6} ${r.sC} ${r.rl} ${r.Oc} [$__auto])) by (${t})`}function o(e){switch(e){case r._Y:return r.Sy;case r.sL:return r.fJ;default:const t=new Error(`Unknown variable type: ${e}`);throw s.v.error(t,{variableType:e,msg:`getFieldsTagValuesExpression: Unknown variable type: ${e}`}),t}}},696:(e,t,n)=>{n.d(t,{_J:()=>u,wy:()=>d});var r=n(9736),a=n(2661),i=n(577),s=n(173),l=n(5553),o=n(4351);function c(e){const t=r.jh.getAncestor(e,a.P);r.jh.findAllObjects(t,(e=>e instanceof i.p)).forEach((e=>e.forceRender()));r.jh.findDescendents(t,s.y).forEach((e=>e.forceRender()))}function u(e,t,n){const r=(0,l.S9)(n).getValue();(0,o.OB)(r,e,t),c(n)}function d(e,t,n){const r=(0,l.S9)(n).getValue();(0,o.cC)(r,e,t),c(n)}},376:(e,t,n)=>{n.d(t,{JI:()=>E,Jl:()=>P,OE:()=>O,Qg:()=>y,Ri:()=>S,Zp:()=>w,k$:()=>x,ph:()=>C});var r=n(7781),a=n(2007),i=n(9736),s=n(9405),l=n(20),o=n(1475),c=n(1269),u=n(7352),d=n(5553),p=n(5953),g=n(5700),h=n(3142),f=n(4247);const v=e=>{if(e){if(Object.values(r.ReducerID).includes(e))return e}};function m(e){switch(e){case"json":return"json";case"logfmt":return"logfmt";case"":case"structuredMetadata":return"structuredMetadata";default:return"mixed"}}function b(e){switch(e){case"int":case"float":case"duration":case"boolean":case"bytes":return e;default:return"string"}}function y(e){var t;const n=new Set(null!==(t=null==e?void 0:e.map((e=>e.toString())))&&void 0!==t?t:[]);n.delete("structuredMetadata");const r=Array.from(n);return 1===r.length?m(r[0]):0===n.size?"structuredMetadata":"mixed"}function S(e,t){var n;const r=(0,u.rD)(t),a=null==r?void 0:r.fields[2],i=null==r?void 0:r.fields[0],s=null==i?void 0:i.values.indexOf(e);var l;const o=void 0!==s&&-1!==s?m(null!==(l=null==a||null===(n=a.values)||void 0===n?void 0:n[s])&&void 0!==l?l:""):void 0;return void 0===o?(p.v.warn("missing parser, using mixed format for",{fieldName:e}),"mixed"):o}function w(e,t,n,r,u){return(d,p)=>{const h=v(r.state.sortBy),f=i.d0.timeseries().setOption("legend",{showLegend:!1}).setCustomFieldConfig("fillOpacity",9).setTitle(e(d)).setShowMenuAlways(!0).setData(new i.Es({transformations:[()=>function(e){return t=>t.pipe((0,c.map)((()=>[e])))}(d)]})).setOverrides(o.jC).setMenu(new g.GD({investigationOptions:{frame:d,fieldName:e(d),labelName:u}})).setHeaderActions([new s.oR({frame:d,variableName:n,hideExclude:u===l.e4})]);return t===a.DrawStyle.Bars&&f.setCustomFieldConfig("stacking",{mode:a.StackingMode.Normal}).setCustomFieldConfig("fillOpacity",100).setCustomFieldConfig("lineWidth",0).setCustomFieldConfig("pointSize",0).setOverrides(o.jC).setCustomFieldConfig("drawStyle",a.DrawStyle.Bars),h&&(f.setOption("legend",{showLegend:!0,calcs:[h]}),f.setDisplayName(" ")),new i.xK({body:f.build()})}}function O(e,t,n){const r=e?(0,h.E)(t,e):f.H.Parsed;if(r)return function(e,t){switch(e){case f.H.Indexed:return l.MB;case f.H.Parsed:return l.mB;case f.H.StructuredMetadata:return t===l.e4?l._Y:l._P;default:{const n=new Error(`Invalid label type for ${t}`);throw p.v.error(n,{type:e,msg:`Invalid label type for ${t}`}),n}}}(r,t);const a=S(t,n);return"structuredMetadata"===a?l._P:(p.v.warn("unable to determine label variable, falling back to parsed field",{key:t,parserForThisField:null!=a?a:""}),l.mB)}function x(e){return y(e.state.filters.map((e=>(0,d.bu)(e).parser)))}function E(e){return"duration"===e||"bytes"===e||"float"===e}function C(e,t){var n;const r=null==t?void 0:t.fields[0],a=null==t?void 0:t.fields[3],i=null==r?void 0:r.values.indexOf(e);return void 0!==i&&-1!==i?b(null==a||null===(n=a.values)||void 0===n?void 0:n[i]):void 0}function P(e,t,n){var r,a;const i=null==n?void 0:n.fields[2],s=null==n?void 0:n.fields[0],l=null==n?void 0:n.fields[3],o=null==s?void 0:s.values.indexOf(e),c=void 0!==o&&-1!==o?m(null==i||null===(r=i.values)||void 0===r?void 0:r[o]):"mixed",u=void 0!==o&&-1!==o?b(null==l||null===(a=l.values)||void 0===a?void 0:a[o]):void 0,p=t.state.filters.map((e=>{var t;const n=null==s?void 0:s.values.indexOf(e.key),r=(0,d.bu)(e);if(r.parser)return r.parser;var a;const l=void 0!==n&&-1!==n?m(null!==(a=null==i||null===(t=i.values)||void 0===t?void 0:t[n])&&void 0!==a?a:"mixed"):void 0;return null!=l?l:"mixed"}));let g="",h="";"structuredMetadata"===c?h=`| ${e}!=""`:g=`| ${e}!=""`;return function(e,t){return t.fieldType&&["bytes","duration"].includes(t.fieldType)?`avg_over_time(${(0,d.DX)(t)} | unwrap `+t.fieldType+`(${e}) | __error__="" [$__auto]) by ()`:t.fieldType&&"float"===t.fieldType?`avg_over_time(${(0,d.DX)(t)} | unwrap `+e+' | __error__="" [$__auto]) by ()':`sum by (${e}) (count_over_time(${(0,d.DX)(t)} [$__auto]))`}(e,{structuredMetadataToAdd:h,fieldExpressionToAdd:g,parser:y([...p,c]),fieldType:u})}},8502:(e,t,n)=>{n.d(t,{$R:()=>s,OH:()=>c,dD:()=>i,p_:()=>a,rd:()=>o,rm:()=>l});var r=n(20);function a(e,t){return 1===e.cardinality?1:1===t.cardinality?-1:e.cardinality-t.cardinality}function i(e){const t=[...e];e.includes(r.e4)||t.unshift(r.e4);const n=t.map((e=>({label:e,value:String(e)})));return[{label:"All",value:r.To},...n]}const s=["level_extracted",r.e4,"level"],l=["__aggregated_metric__","__stream_shard__"];function o(e){const t=[...e].map((e=>({label:e,value:String(e)})));return[{label:"All",value:r.To},...t]}function c(e){var t;return((0,r.zE)(e.value)?(0,r.Dx)(e.value):e.value)===(null===(t=e.valueLabels)||void 0===t?void 0:t[0])}},42:(e,t,n)=>{n.d(t,{CP:()=>m,R7:()=>h,_t:()=>v,de:()=>p,di:()=>u,ec:()=>f,oj:()=>d,zr:()=>g});var r=n(20),a=n(376),i=n(7985),s=n(5553),l=n(9405),o=n(708),c=n(5570);const u="repeat(auto-fit, minmax(400px, 1fr))";function d(e,t,n){let l="",o="";const c=(0,s.ir)(e),u=(0,a.k$)(c);return n&&n!==r.e4?l=` ,${n} != ""`:n&&n===r.e4&&(o=` | ${n} != ""`),(0,i.l)(`sum(count_over_time(${(0,s.DX)({labelExpressionToAdd:l,structuredMetadataToAdd:o,parser:u})} [$__auto])) by (${t})`,{legendFormat:`{{${t}}}`,refId:"LABEL_BREAKDOWN_VALUES"})}function p(e){return e.map((e=>(0,c.H7)(e))).flatMap((e=>e?[e]:[]))}function g(e,t,n){const i=(0,s.YS)(n),c=0===i.state.filters.length,u="structuredMetadata"===(0,a.Ri)(e,n),d=i.state.filters.find((e=>u?(0,o.BG)(e.operator)&&e.value===t:(0,o.BG)(e.operator)&&(0,s.bu)(e).value===t));return c||!d?((0,l.Qt)(e,t,"include",n,u?r._P:r.mB),"include"):((0,l.Qt)(e,t,"toggle",n,u?r._P:r.mB),"toggle")}function h(e,t,n){const a=(0,s.cR)(n),i=0===a.state.filters.length,c=a.state.filters.find((e=>e.value===t&&(0,o.BG)(e.operator)));return i||!c?((0,l.Qt)(e,t,"include",n,r.MB),"include"):((0,l.Qt)(e,t,"toggle",n,r.MB),"toggle")}function f(e,t,n){return b(e,t,(0,s.cR)(n))}function v(e,t,n){return b(e,t,(0,s.ir)(n))}function m(e,t,n){return b(e,t,(0,s.oY)(n))}function b(e,t,n){const a=n.state.filters.filter((t=>t.key===e&&(0,o.BG)(t.operator))).map((e=>n.state.name===r.mB?(0,s.bu)(e).value:e.value)),i=n.state.filters.filter((t=>t.key===e&&(0,o.Lw)(t.operator))).map((e=>n.state.name===r.mB?(0,s.bu)(e).value:e.value));return t.filter((e=>!i.includes(e)&&(0===a.length||a.includes(e))))}},5570:(e,t,n)=>{n.d(t,{Ex:()=>d,H7:()=>u,PE:()=>g,pC:()=>o,vX:()=>c});var r=n(2007),a=n(20),i=n(9405),s=n(5553),l=n(708);function o(e,t,n,a){if(n===r.SeriesVisibilityChangeMode.ToggleSelection){const n=null!=t?t:[];return 1===n.length&&n.includes(e)?[]:[e]}let i=(null==t?void 0:t.length)?t:a;return i.includes(e)?i.filter((t=>t!==e)):[...i,e]}function c(e){return e.map((e=>{var t;return null!==(t=u(e))&&void 0!==t?t:"logs"}))}function u(e){var t;const n=null===(t=e.fields[1])||void 0===t?void 0:t.labels;if(!n)return null;const r=Object.keys(n);return 0===r.length?null:n[r[0]]}function d(e,t){const n=(0,s.iw)(t),r=n.state.filters.filter((e=>(0,l.BG)(e.operator))).map((e=>e.value.split("|").map(p))).join("|"),a=n.state.filters.filter((e=>(0,l.Lw)(e.operator))).map((e=>e.value.split("|").map(p))).join("|");return e.filter((e=>!a.includes(e)&&(0===r.length||r.includes(e))))}function p(e){return'""'===e?"logs":e}function g(e,t){const n=(0,s.iw)(t),r=0===n.state.filters.length,o=n.state.filters.find((t=>t.value===e&&(0,l.BG)(t.operator)));return"logs"===e&&(e='""'),r||!o?((0,i.Qt)(a.e4,e,"include",t,a._Y),"include"):((0,i.Qt)(a.e4,e,"toggle",t,a._Y),"toggle")}},2165:(e,t,n)=>{n.d(t,{Il:()=>g,Os:()=>d,bz:()=>c,fF:()=>p,hy:()=>m,po:()=>h,y2:()=>b,z5:()=>f});var r=n(7781);function a(e,t,n){const r=e.getFieldByName(t);if(void 0!==r)return r.type===n?r:void 0}const i="timestamp",s="body",l="severity",o="id",c="labels";function u(e){const t={};return Object.entries(e).forEach((([e,n])=>{t[e]="string"==typeof n?n:JSON.stringify(n)})),t}function d(e){var t;return(null===(t=e.meta)||void 0===t?void 0:t.type)===r.DataFrameType.LogLines?function(e){const t=new r.FieldCache(e),n=a(t,i,r.FieldType.time),d=a(t,s,r.FieldType.string);if(void 0===n||void 0===d)return null;var p;const g=null!==(p=a(t,l,r.FieldType.string))&&void 0!==p?p:null;var h;const f=null!==(h=a(t,o,r.FieldType.string))&&void 0!==h?h:null;var v;const m=null!==(v=a(t,c,r.FieldType.other))&&void 0!==v?v:null,b=null===m?null:m.values,y=t.fields.filter(((e,t)=>t!==n.index&&t!==d.index&&t!==(null==g?void 0:g.index)&&t!==(null==f?void 0:f.index)&&t!==(null==m?void 0:m.index)));return{raw:e,timeField:n,bodyField:d,severityField:g,idField:f,getLogFrameLabels:()=>b,timeNanosecondField:null,getLogFrameLabelsAsLabels:()=>null!==b?b.map(u):null,getLabelFieldName:()=>null!==m?m.name:null,extraFields:y}}(e):function(e){const t=new r.FieldCache(e),n=t.getFirstFieldOfType(r.FieldType.time),a=t.getFirstFieldOfType(r.FieldType.string);if(void 0===n||void 0===a)return null;var i;const s=null!==(i=t.getFieldByName("tsNs"))&&void 0!==i?i:null;var l;const o=null!==(l=t.getFieldByName("level"))&&void 0!==l?l:null;var c;const d=null!==(c=t.getFieldByName("id"))&&void 0!==c?c:null,[p,g]=function(e,t,n){const a=e.getFieldByName("labels");if(void 0!==a&&a.type===r.FieldType.other){const e=a.values.map(u);return[a,()=>e]}return[null,()=>function(e,t){const n=e.labels;if(void 0!==n){const e=new Array(t);return e.fill(n),e}return null}(t,n.length)]}(t,a,e),h=t.fields.filter(((e,t)=>t!==n.index&&t!==a.index&&t!==(null==s?void 0:s.index)&&t!==(null==o?void 0:o.index)&&t!==(null==d?void 0:d.index)&&t!==(null==p?void 0:p.index)));return{timeField:n,bodyField:a,timeNanosecondField:s,severityField:o,idField:d,getLogFrameLabels:g,getLogFrameLabelsAsLabels:g,getLabelFieldName:()=>{var e;return null!==(e=null==p?void 0:p.name)&&void 0!==e?e:null},extraFields:h,raw:e}}(e)}function p(e){var t;return null!==(t=null==e?void 0:e.timeField.name)&&void 0!==t?t:i}function g(e){var t;return null!==(t=null==e?void 0:e.bodyField.name)&&void 0!==t?t:s}function h(e){var t,n;return null!==(n=null==e||null===(t=e.idField)||void 0===t?void 0:t.name)&&void 0!==n?n:o}function f(e){var t;let n=0,a=0;const i=null===(t=e[0])||void 0===t?void 0:t.fields.find((e=>e.type===r.FieldType.time));if(i){const e=[...i.values].sort(),t=e[0]{let r;function a(){r||(r=new i)}n.d(t,{JO:()=>s,rX:()=>a});class i{getServiceSceneState(){return this.serviceSceneState}setPatternsCount(e){this.serviceSceneState||(this.serviceSceneState={}),this.serviceSceneState.patternsCount=e}setLabelsCount(e){this.serviceSceneState||(this.serviceSceneState={}),this.serviceSceneState.labelsCount=e}setFieldsCount(e){this.serviceSceneState||(this.serviceSceneState={}),this.serviceSceneState.fieldsCount=e}setServiceSceneState(e){this.serviceSceneState={patternsCount:e.patternsCount,labelsCount:e.labelsCount,fieldsCount:e.fieldsCount,loading:e.loading,logsCount:e.logsCount,totalLogsCount:e.totalLogsCount}}constructor(){var e,t,n;n=void 0,(t="serviceSceneState")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}}function s(){return r}},7478:(e,t,n)=>{n.d(t,{FB:()=>f,Ns:()=>O,Vt:()=>y,ad:()=>S,bN:()=>w,fg:()=>v,k9:()=>m,rs:()=>b});var r=n(2661),a=n(20),i=n(2152),s=n(8531),l=n(9683),o=n(9736),c=n(7781),u=n(7389),d=n(9598);function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let g;function h(e,t){return c.urlUtil.renderUrl(e,function(e){return function(e){for(var t=1;t(l.tm.includes(t)&&(e[t]=n),e)),{}),e)}(t))}function f(e,t,n){var s,c;const p=o.jh.getAncestor(n,r.P),g=null===(s=p.state.routeMatch)||void 0===s?void 0:s.params.labelName,f=null===(c=p.state.routeMatch)||void 0===c?void 0:c.params.labelValue;if(g&&f){let r=function(e,t,n,r="service"){return e===a.To&&t===l._J.label?(0,d._F)(`${l.G3.explore}/${r}/${(0,u.uu)(n)}/${l.G3.labels}`):e===a.To&&t===l._J.field?(0,d._F)(`${l.G3.explore}/${r}/${(0,u.uu)(n)}/${l.G3.fields}`):(0,d._F)(`${l.G3.explore}/${r}/${(0,u.uu)(n)}/${t}/${(0,u.uu)(e)}`)}(t,e,f,g);const s=h(r);if(n){(0,i.JO)().setServiceSceneState(n.state)}return s}return""}function v(e,t,n){const r=f(e,t,n);r&&S(r)}function m(e,t,n){return h(l.bw.logs(t,e),n)}function b(e,t,n){var a,i;const s=o.jh.getAncestor(t,r.P),c=null===(a=s.state.routeMatch)||void 0===a?void 0:a.params.labelValue,p=null===(i=s.state.routeMatch)||void 0===i?void 0:i.params.labelName;if(c){return h((0,d._F)(`${l.G3.explore}/${p}/${(0,u.uu)(c)}/${e}`),n)}return""}function y(e,t,n){const r=b(e,t,n);if(r){if(t){(0,i.JO)().setServiceSceneState(t.state)}S(r)}else;}function S(e){g=e,s.locationService.push(e)}function w(){const e=s.locationService.getLocation();s.locationService.push(e.pathname+e.search)}function O(){const e=s.locationService.getLocation(),t=(0,l.qe)(l.bw.explore()),n=e.pathname+e.search,r=s.locationService.getSearch();t===n||n.includes(t)||(r.get("var-filters")?S(t):(g&&s.locationService.replace(g),s.locationService.push(t)))}},1475:(e,t,n)=>{n.d(t,{rS:()=>I,FH:()=>$,HF:()=>B,jC:()=>P,ZC:()=>k,Nr:()=>T,dO:()=>_,C6:()=>L});var r=n(7781),a=n(9736),i=n(1269),s=n(1625),l=n(8955);class o extends a.dt{runQueries(){const e=a.jh.getTimeRange(this);this.runWithTimeRangeAndScopes(e)}constructor(e){super(e)}}var c=n(2007),u=n(5570),d=n(3142),p=n(7352),g=n(2649),h=n(42),f=n(376);function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;te.pipe((0,i.map)((e=>e.map(((t,n)=>b(m({},t),{fields:t.fields.map(((n,a)=>{if(n.type===r.FieldType.time)return n;const i=(0,r.getFieldDisplayName)(n,t,e);return b(m({},n),{config:b(m({},n.config),{displayName:i,color:{mode:r.FieldColorModeId.PaletteClassicByName}})})}))}))))))}function N(){return e=>e.pipe((0,i.map)((e=>e.map((e=>(e.fields.length<2||e.fields[1].config.displayNameFromDS||(e.fields[1].config.displayNameFromDS=y),e))).sort(((e,t)=>{if(e.fields.length<2||t.fields.length<2)return 0;const n=e.fields[1].config.displayNameFromDS,r=(null==n?void 0:n.match(E))?5:(null==n?void 0:n.match(x))?4:(null==n?void 0:n.match(O))?3:(null==n?void 0:n.match(w))||(null==n?void 0:n.match(S))?2:1,a=t.fields[1].config.displayNameFromDS;return r-((null==a?void 0:a.match(E))?5:(null==a?void 0:a.match(x))?4:(null==a?void 0:a.match(O))?3:(null==a?void 0:a.match(w))||(null==a?void 0:a.match(S))?2:1)})))))}function $(e){return new o({datasource:{uid:l.WRAPPED_LOKI_DS_UID},queries:e})}function I(e,t){const n=e.find((e=>{var t;return null===(t=e.legendFormat)||void 0===t?void 0:t.toLowerCase().includes("level")})),r=e.find((e=>e.refId===p.DS||e.refId===p.AA));return n?new a.Es({$data:B(m({datasource:{uid:l.WRAPPED_LOKI_DS_UID},queries:e},t)),transformations:[N]}):r?(e=e.map((e=>b(m({},e),{get direction(){return((0,g.PY)()||(0,g.zQ)())===s.uH.Descending?d.t.Backward:d.t.Forward}}))),B(m({datasource:{uid:l.WRAPPED_LOKI_DS_UID},queries:e},t))):new a.Es({$data:B(m({datasource:{uid:l.WRAPPED_LOKI_DS_UID},queries:e},t)),transformations:[D]})}function B(e){return new a.dt(m({datasource:{uid:l.WRAPPED_LOKI_DS_UID},queries:[]},e))}},9598:(e,t,n)=>{n.d(t,{Gy:()=>a,_F:()=>i,s_:()=>r});const r=n(2533).id,a=`/a/${r}`;function i(e){return`${a}/${e}`}},7985:(e,t,n)=>{n.d(t,{$k:()=>f,BM:()=>p,CY:()=>O,E3:()=>S,PP:()=>b,VT:()=>C,VW:()=>v,ZX:()=>w,_q:()=>y,by:()=>P,c0:()=>m,l:()=>g,sT:()=>E,vC:()=>x});var r=n(20),a=n(9598),i=n(9736),s=n(6854),l=n(1459),o=n(6464);function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e){for(var t=1;td(u(d(u({},h),{resource:t,refId:t}),n),{datasource:{uid:r.gR},expr:e,primaryLabel:a}),g=(e,t)=>d(u({},h,t),{expr:e}),h={refId:"A",queryType:"range",editorMode:"code",supportingQueryType:a.s_},f=(e,t,n,r)=>p(e,t,u({},r),n);function v(e,t){return new o.K(e).getLabelsExpr({ignoreKeys:t})}function m(e){var t,n,a;return e.value?{value:(0,r.OQ)(e.value),valueLabels:[null!==(t=e.label)&&void 0!==t?t:e.value]}:{value:e.value,valueLabels:[null!==(a=null!==(n=e.label)&&void 0!==n?n:e.value)&&void 0!==a?a:""]}}function b(e,t){var n,a,i;const s={value:null!==(a=e.value)&&void 0!==a?a:"",parser:null!==(i=null==t||null===(n=t.meta)||void 0===n?void 0:n.parser)&&void 0!==i?i:"mixed"};var l,o;return"structuredMetadata"===s.parser?{value:(0,r.OQ)(s.value),valueLabels:[null!==(l=e.label)&&void 0!==l?l:s.value]}:{value:(0,r.OQ)(JSON.stringify(s)),valueLabels:[null!==(o=e.label)&&void 0!==o?o:s.value]}}function y(e,t){return new o.K(e).getLevelsExpr({ignoreKeys:t})}function S(e,t){return new o.K(e).getMetadataExpr({ignoreKeys:t})}function w(e,t){return new o.K(e).getFieldsExpr({ignoreKeys:t})}function O(e){return(0,l.F)(e),e.map((e=>{if(!e.value)return"";const t=function(e){var t,n,r;return e.operator===s.cK.match||e.operator===s.cK.negativeMatch?e.key===s.ld.caseInsensitive?i.Go.escapeLabelValueInRegexSelector(null!==(t=e.value)&&void 0!==t?t:""):i.Go.escapeLabelValueInExactSelector(null!==(n=e.value)&&void 0!==n?n:""):i.Go.escapeLabelValueInExactSelector(null!==(r=e.value)&&void 0!==r?r:"")}(e);return function(e,t){return e.key===s.ld.caseInsensitive?e.operator===s.cK.negativeRegex||e.operator===s.cK.negativeMatch?`${s.cK.negativeRegex} "(?i)${t}"`:`${s.cK.regex} "(?i)${t}"`:`${e.operator} "${t}"`}(e,t)})).join(" ")}function x(e){return".+"===e?e:"(?i).*"!==e.substring(0,6)?`(?i).*${e}.*`:e}function E(e){return"(?i).*"===e.substring(0,6)&&".*"===e.slice(-2)?e.slice(6).slice(0,-2):e}function C(e){return e.replace(/\s*,\s*}/,"}")}const P=1e3},9683:(e,t,n)=>{n.d(t,{FT:()=>y,G3:()=>d,HU:()=>f,KL:()=>v,NX:()=>E,W6:()=>S,XJ:()=>x,Zt:()=>m,_J:()=>p,bw:()=>g,er:()=>w,mC:()=>h,qe:()=>O,tm:()=>b});var r=n(7781),a=n(20),i=n(8531),s=n(7389),l=n(5553),o=n(5953),c=n(9598);function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e){return e.explore="explore",e.logs="logs",e.labels="labels",e.patterns="patterns",e.fields="fields",e}({}),p=function(e){return e.field="field",e.label="label",e}({});const g={explore:()=>(0,c._F)("explore"),logs:(e,t="service")=>(0,c._F)(`explore/${t}/${(0,s.uu)(e)}/logs`),fields:(e,t="service")=>(0,c._F)(`explore/${t}/${(0,s.uu)(e)}/fields`),patterns:(e,t="service")=>(0,c._F)(`explore/${t}/${(0,s.uu)(e)}/patterns`),labels:(e,t="service")=>(0,c._F)(`explore/${t}/${(0,s.uu)(e)}/labels`)},h={label:(e,t="service",n)=>(0,c._F)(`explore/${t}/${(0,s.uu)(e)}/label/${n}`),field:(e,t="service",n)=>(0,c._F)(`explore/${t}/${(0,s.uu)(e)}/field/${n}`)},f={explore:"explore/*",logs:":labelName/:labelValue/logs",fields:":labelName/:labelValue/fields",patterns:":labelName/:labelValue/patterns",labels:":labelName/:labelValue/labels"},v={field:":labelName/:labelValue/field/:breakdownLabel",label:":labelName/:labelValue/label/:breakdownLabel"},m=["from","to",`var-${a.EY}`,`var-${a.MB}`],b=["from","to","mode","urlColumns","visualizationType","selectedLine","displayedFields","panelState",a.uw,`var-${a.uw}`,`var-${a.EY}`,`var-${a.MB}`,`var-${a.mB}`,`var-${a._Y}`,`var-${a.LI}`,`var-${a.Jg}`,`var-${a.EY}`,`var-${a.WM}`,`var-${a._P}`,`var-${a.NW}`];function y(){const e=i.locationService.getLocation();return e.pathname.slice(e.pathname.lastIndexOf("/")+1,e.pathname.length)}function S(){const e=i.locationService.getLocation(),t="/a/grafana-lokiexplore-app/explore",n=e.pathname.slice(e.pathname.indexOf(t)+34+1).split("/");let r=n[0];const s=n[1],l=n[3];return r===a.OX&&(r=a.ky),{labelName:r,labelValue:s,breakdownLabel:l}}function w(){const e=i.locationService.getLocation().pathname.split("/");return e[e.length-2]}function O(e,t){return r.urlUtil.renderUrl(e,function(e){return function(e){for(var t=1;t(m.includes(t)&&(e[t]=n),e)),{}),e)}(t))}function x(e){return{labelName:e.params.labelName,labelValue:e.params.labelValue,breakdownLabel:e.params.breakdownLabel}}function E(e){const t=(0,l.cR)(e);let{labelName:n,labelValue:r}=S();n===a.ky&&(n=a.OX);if(!t.state.filters.find((e=>e.key===n))){const e=i.locationService.getLocation();o.v.info("invalid primary label name in url",{labelName:n,url:`${e.pathname}${e.search}`})}if(!t.state.filters.find((e=>(0,s.uu)(e.value)===r))){const e=i.locationService.getLocation();o.v.info("invalid primary label value in url",{labelValue:r,url:`${e.pathname}${e.search}`})}}},5719:(e,t,n)=>{n.d(t,{Mq:()=>p,Ti:()=>c,U4:()=>u,UX:()=>v,hJ:()=>g,m0:()=>m,oh:()=>f,u9:()=>d});n(7781);var r=n(8531),a=n(9736),i=n(20),s=(n(9683),n(2661)),l=n(5953);function o(e,t,n,r,a,i,s){try{var l=e[i](s),o=l.value}catch(e){return void n(e)}l.done?t(o):Promise.resolve(o).then(r,a)}function c(e){return a.jh.getAncestor(e,s.P)}function u(e){return a.jh.interpolate(e,i.gR)}function d(e){return a.jh.interpolate(e,i.SA).replace(/\s+/g," ")}function p(e){return a.jh.interpolate(e,i.FX).replace(/\s+/g," ")}function g(e){return h.apply(this,arguments)}function h(){var e;return e=function*(e){return yield(0,r.getDataSourceSrv)().get(i.gR,{__sceneObject:{value:e}})},h=function(){var t=this,n=arguments;return new Promise((function(r,a){var i=e.apply(t,n);function s(e){o(i,r,a,s,l,"next",e)}function l(e){o(i,r,a,s,l,"throw",e)}s(void 0)}))},h.apply(this,arguments)}function f(e){return a.jh.findDescendents(e,a.dt)}function v(e,t,n){const r=a.jh.findObject(e,t);return r instanceof n?r:(null!==r&&l.v.warn(`invalid return type: ${n.toString()}`),null)}function m(e){var t;return null===(t=e.state.controls)||void 0===t?void 0:t.find((e=>e instanceof a.KE))}},9193:(e,t,n)=>{n.d(t,{E:()=>l,X:()=>s});var r=n(7993),a=n(3241);const i=new r.A({intraMode:1,intraIns:1,intraSub:1,intraTrn:1,intraDel:1});function s(e,t,n){const[a,s,l]=i.search(e,t,0,1e5);let o=[],c=new Set;if(a&&l){const t=(e,t)=>{t&&c.add(e)};for(let n=0;n{n.r(t),n.d(t,{DEFAULT_SORT_BY:()=>u,calculateDataFrameChangepoints:()=>p,calculateOutlierValue:()=>v,sortSeries:()=>d,sortSeriesByName:()=>g,wasmSupported:()=>m});var r=n(1854),a=n(6944),i=n(7781),s=n(5570),l=n(3241),o=n(4509),c=n(5953);const u="changepoint",d=(0,l.memoize)(((e,t,n)=>{if("alphabetical"===t)return g(e,n);"outliers"===t&&h(e);const r=n=>{var r;try{if("changepoint"===t)return p(n);if("outliers"===t)return v(e,n)}catch(e){c.v.error(e,{msg:"failed to sort"}),t=i.ReducerID.stdDev}const a=i.fieldReducers.get(t);var s;var l;return null!==(l=(null!==(s=null===(r=a.reduce)||void 0===r?void 0:r.call(a,n.fields[1],!0,!0))&&void 0!==s?s:(0,i.doStandardCalcs)(n.fields[1],!0,!0))[t])&&void 0!==l?l:0},a=e.map((e=>({value:r(e),dataFrame:e})));return a.sort(((e,t)=>void 0!==e.value&&void 0!==t.value?t.value-e.value:0)),"asc"===n&&a.reverse(),a.map((({dataFrame:e})=>e))}),((e,t,n)=>{const r=e.length>0?e[0].fields[0].values[0]:0,a=e.length>0?e[e.length-1].fields[0].values[e[e.length-1].fields[0].values.length-1]:0,i=e.length>0?(0,s.H7)(e[0]):"",l=e.length>0?(0,s.H7)(e[e.length-1]):"",o=e.map((e=>e.length+"_"+e.fields.map((e=>e.name+"_"+e.values[0]+"_"+e.values[e.values.length-1]))));return`${i}_${l}_${r}_${a}_${e.length}_${o}_${t}_${n}`})),p=e=>{if(!m())throw new Error("WASM not supported, fall back to stdDev");const t=e.fields.filter((e=>e.type===i.FieldType.number)),n=t[0].values.length;let a=Math.floor(n/100)||1;a>1&&(a=Math.ceil(a/2));const s=t[0].values.filter(((e,t)=>t%a==0)),l=new Float64Array(s);return r.ChangepointDetector.defaultArgpcp().detectChangepoints(l).indices.length},g=(e,t)=>{const n=[...e];return n.sort(((e,t)=>{const n=(0,s.H7)(e),r=(0,s.H7)(t);return n&&r&&null!==(a=null==n?void 0:n.localeCompare(r))&&void 0!==a?a:0;var a})),"desc"===t&&n.reverse(),n},h=e=>{if(!m())return;const t=(0,i.outerJoinDataFrames)({frames:e});if(!t)return;const n=t.fields.filter((e=>e.type===i.FieldType.number)).flatMap((e=>new Float64Array(e.values)));try{const e=a.OutlierDetector.dbscan({sensitivity:.4}).preprocess(n);f=e.detect()}catch(e){c.v.error(e,{msg:"initOutlierDetector: OutlierDetector error"})}};let f;const v=(e,t)=>{if(!m())throw new Error("WASM not supported, fall back to stdDev");if(!f)throw new Error("Initialize outlier detector first");const n=e.indexOf(t);return f.seriesResults[n].isOutlier?f.seriesResults[n].outlierIntervals.length:0},m=()=>{const e="object"==typeof WebAssembly;return e||(0,o.EE)(o.NO.service_details,o.ir.service_details.wasm_not_supported),e}},4351:(e,t,n)=>{n.d(t,{Bq:()=>R,Dy:()=>X,GL:()=>M,Gg:()=>v,IW:()=>K,KH:()=>J,N$:()=>P,OB:()=>g,QB:()=>S,RN:()=>T,Rb:()=>U,Rf:()=>D,Xo:()=>A,YK:()=>L,YM:()=>F,ZF:()=>k,Zs:()=>z,cC:()=>h,cO:()=>f,eT:()=>p,ex:()=>Q,fq:()=>E,hp:()=>V,k5:()=>$,ke:()=>w,o5:()=>I,og:()=>W,sj:()=>m,uF:()=>Y,vs:()=>x,zu:()=>Z});var r=n(2533),a=n(5553),i=n(5953),s=n(20),l=n(8428);const o=`${r.id}.services.favorite`,c=`${r.id}.primarylabels.tabs.favorite`,u=`${r.id}.datasource`,d=`${r.id}.scene.layout`;function p(e,t){if(!e||"string"!=typeof e)return[];const n=b(e,t);let r=[];try{r=(0,l.aJ)(JSON.parse(localStorage.getItem(n)||"[]"))}catch(e){i.v.error(e,{msg:"Error parsing favorite services from local storage"})}return Array.isArray(r)||(r=[]),r}function g(e,t,n){if(!e||"string"!=typeof e)return;const r=b(e,t);let a=[];try{a=(0,l.aJ)(JSON.parse(localStorage.getItem(r)||"[]"))}catch(e){i.v.error(e,{msg:"Error parsing favorite services from local storage"})}Array.isArray(a)||(a=[]);const s=a.filter((e=>e!==n));s.unshift(n),localStorage.setItem(r,JSON.stringify(s))}function h(e,t,n){if(!e||!t||!n||"string"!=typeof e)return;const r=b(e,t);let a=[];try{a=(0,l.aJ)(JSON.parse(localStorage.getItem(r)||"[]"))}catch(e){i.v.error(e,{msg:"Error parsing favorite services from local storage"})}Array.isArray(a)||(a=[]);const s=a.filter((e=>e!==n));localStorage.setItem(r,JSON.stringify(s))}function f(e,t){if(!e||!t)return;const n=y(e);let r=[];try{r=(0,l.aJ)(JSON.parse(localStorage.getItem(n)||"[]"))}catch(e){i.v.error(e,{msg:"Error parsing saved tabs from local storage"})}if(Array.isArray(r)||(r=[]),-1===r.indexOf(t)){const e=r.filter((e=>e!==t));e.unshift(t),localStorage.setItem(n,JSON.stringify(e))}}function v(e,t){if(!e||!t)return;const n=y(e);let r=[];try{r=(0,l.aJ)(JSON.parse(localStorage.getItem(n)||"[]"))}catch(e){i.v.error(e,{msg:"Error parsing favorite services from local storage"})}Array.isArray(r)||(r=[]);const a=r.filter((e=>e!==t));localStorage.setItem(n,JSON.stringify(a))}function m(e){if(!e||"string"!=typeof e)return[];const t=y(e);let n=[];try{n=(0,l.aJ)(JSON.parse(localStorage.getItem(t)||"[]"))}catch(e){i.v.error(e,{msg:"Error parsing favorite services from local storage"})}return Array.isArray(n)||(n=[]),n}function b(e,t){return t=t===s.OX?"":`_${t}`,`${o}_${e}${t}`}function y(e){return`${c}_${e}`}function S(){var e;return null!==(e=localStorage.getItem(u))&&void 0!==e?e:void 0}function w(e){localStorage.setItem(u,e)}const O=`${r.id}.values.sort`;function x(e,t,n){var r;const a=(null!==(r=localStorage.getItem(`${O}.${e}.by`))&&void 0!==r?r:"").split(".");if(!a[0]||!a[1])return{sortBy:t,direction:n};return{sortBy:a[0],direction:a[1]}}function E(e,t,n){t&&n&&localStorage.setItem(`${O}.${e}.by`,`${t}.${n}`)}function C(e){return`${(0,a.nH)(e)}.${(0,a.p_)(e)}`}function P(e){const t=C(e),n=localStorage.getItem(`${r.id}.${t}.logs.fields`);return n?JSON.parse(n):[]}function k(e,t){const n=C(e);localStorage.setItem(`${r.id}.${n}.logs.fields`,JSON.stringify(t))}const j=`${r.id}.logs.option`;function F(e,t){const n=localStorage.getItem(`${j}.${e}`);return n||t}function L(e,t){let n=t.toString();"boolean"!=typeof t||t||(n=""),localStorage.setItem(`${j}.${e}`,n)}const _="grafana.explore.logs.logsVolume";function T(e,t){const n=`${_}.${e}`;void 0!==t?localStorage.setItem(n,t):localStorage.removeItem(n)}function D(e){return Boolean(localStorage.getItem(`${_}.${e}`))}const N="grafana.explore.logs.visualisationType";function $(){var e;const t=null!==(e=localStorage.getItem(N))&&void 0!==e?e:"";switch(t){case"table":case"logs":return t;default:return"logs"}}function I(e){localStorage.setItem(N,e)}const B=`${r.id}.linefilter.option`;function A(e){let t=e.toString();e||(t=""),localStorage.setItem(`${B}.caseSensitive`,t)}function M(e){let t=e.toString();e||(t=""),localStorage.setItem(`${B}.regex`,t)}function R(e){let t=e.toString();e||(t=""),localStorage.setItem(`${B}.exclusive`,t)}function V(e){return"true"===localStorage.getItem(`${B}.caseSensitive`)||e}function W(e){return"true"===localStorage.getItem(`${B}.regex`)||e}function z(e){return"true"===localStorage.getItem(`${B}.exclusive`)||e}const H=`${r.id}.panel.option`;function Q(e,t){const n=localStorage.getItem(`${H}.${e}`);var r;return null!==n&&null!==(r=t.find((e=>n===e)))&&void 0!==r?r:null}function K(e,t){localStorage.setItem(`${H}.${e}`,t)}const G=`${r.id}.expressionBuilder.debug`;function U(){return!!localStorage.getItem(G)}const q=`${r.id}.serviceSelection.pageCount`;function J(){const e=localStorage.getItem(q);return e?parseInt(e,10):void 0}function Y(e){localStorage.setItem(q,e.toString(10))}function X(){return localStorage.getItem(d)}function Z(e){localStorage.setItem(d,e)}},3571:(e,t,n)=>{n.d(t,{b:()=>r});const r={appConfig:{container:"data-testid ac-container",apiKey:"data-testid ac-api-key",apiUrl:"data-testid ac-api-url",submit:"data-testid ac-submit-form"},exploreServiceSearch:{search:"data-testid search-services"},header:{refreshPicker:"data-testid RefreshPicker run button"},variables:{datasource:{label:"data-testid Dashboard template variables submenu Label Data source"},combobox:{},serviceName:{label:"data-testid Dashboard template variables submenu Label Labels"},levels:{inputWrap:"data-testid detected_level filter variable"}},breakdowns:{labels:{},fields:{},common:{sortByFunction:"data-testid SortBy function",sortByDirection:"data-testid SortBy direction",filterButtonGroup:"data-testid filter-button-group",filterButton:"data-testid filter-button",filterSelect:"data-testid filter-select",filterNumericPopover:{removeButton:"data-testid filter-numeric-remove",submitButton:"data-testid filter-numeric-submit",cancelButton:"data-testid filter-numeric-cancel",inputGreaterThan:"data-testid filter-numeric-gt",inputGreaterThanUnit:"data-testid filter-numeric-gtu",inputGreaterThanInclusive:"data-testid filter-numeric-gte",inputLessThan:"data-testid filter-numeric-lt",inputLessThanUnit:"data-testid filter-numeric-ltu",inputLessThanInclusive:"data-testid filter-numeric-lte"}}},index:{showLogsButton:"data-testid button-filter-include",selectServiceButton:"data-testid button-select-service",addNewLabelTab:"data-testid Tab Add label",searchLabelValueInput:"data-testid search-services-input",aggregatedMetricsMenu:"data-testid aggregated-metrics-menu",aggregatedMetricsToggle:"data-testid aggregated-metrics-toggle",header:{showLogsButton:"data-testid Show logs header"}},exploreServiceDetails:{searchLogs:"data-testid search-logs",openExplore:"data-testid open-explore",tabPatterns:"data-testid tab-patterns",tabLogs:"data-testid tab-logs",tabFields:"data-testid tab-fields",tabLabels:"data-testid tab-labels",buttonRemovePattern:"data-testid button-remove-pattern",buttonFilterInclude:"data-testid button-filter-include",buttonFilterExclude:"data-testid button-filter-exclude"},patterns:{tableWrapper:"data-testid table-wrapper",buttonIncludedPattern:"data-testid button-included-pattern",buttonExcludedPattern:"data-testid button-excluded-pattern"},logsPanelHeader:{header:"data-testid Panel header Logs",radio:"data-testid radio-button"},table:{wrapper:"data-testid table-wrapper",inspectLine:"data-testid inspect",rawLogLine:"data-testid raw-log-line"}}},5002:(e,t,n)=>{n.d(t,{Dk:()=>s,EJ:()=>c,Ki:()=>u,Zr:()=>o,gW:()=>l});var r=n(8531),a=n(5953),i=n(7781);const s=e=>{if(navigator.clipboard&&window.isSecureContext)navigator.clipboard.writeText(e);else{const t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}};const l=(e,t,n)=>{const a=r.locationService.getLocation(),s=i.urlUtil.getUrlSearchParams();return s.from=n.from.toISOString(),s.to=n.to.toISOString(),s[e]=JSON.stringify(t),l=i.urlUtil.renderUrl(a.pathname,s),`${window.location.protocol}//${window.location.host}${r.config.appSubUrl}${l}`;var l};function o(e){return e.length?(null==e?void 0:e.charAt(0).toUpperCase())+e.slice(1):(a.v.warn("invalid string argument"),e)}function c(e,t,n){return e.substring(0,t)+(n&&e.length>t?"…":"")}function u(e){const t=(0,i.dateTime)(e.timeEpochMs-1),n=(0,i.dateTime)(e.timeEpochMs+1);return{from:t,to:n,raw:{from:t,to:n}}}},5553:(e,t,n)=>{n.d(t,{BL:()=>k,DX:()=>c,El:()=>P,Gk:()=>O,Hj:()=>S,Ku:()=>u,P4:()=>b,Rr:()=>m,S9:()=>w,YS:()=>h,aW:()=>p,bY:()=>x,bu:()=>F,cR:()=>d,eY:()=>E,h:()=>C,ir:()=>f,iw:()=>v,n5:()=>j,nH:()=>T,oY:()=>g,p_:()=>_,vm:()=>y,z2:()=>L});var r=n(9736),a=n(4702),i=n(20),s=n(5953),l=n(8428),o=n(8502);function c(e){const{labelExpressionToAdd:t="",structuredMetadataToAdd:n="",fieldExpressionToAdd:r="",parser:a}=e;switch(a){case"structuredMetadata":return`{${i.S1}${t}} ${n} ${i.qZ} ${i.S6} ${i.sC} ${i.rl} ${r} ${i.Oc}`;case"json":return`{${i.S1}${t}} ${n} ${i.qZ} ${i.S6} ${i.sC} ${i.rl} ${i.VL} ${r} ${i.Oc}`;case"logfmt":return`{${i.S1}${t}} ${n} ${i.qZ} ${i.S6} ${i.sC} ${i.rl} ${i.mF} ${r} ${i.Oc}`;default:return`{${i.S1}${t}} ${n} ${i.qZ} ${i.S6} ${i.sC} ${i.rl} ${i.YN} ${r} ${i.Oc}`}}function u(e){const t=r.jh.lookupVariable(i.uw,e);if(!(t instanceof r.yP))throw new Error("VAR_PATTERNS not found");return t}function d(e){return x(i.MB,e)}function p(e){return x(i.fi,e)}function g(e){return x(i._P,e)}function h(e){return x(i.sL,e)}function f(e){return x(i.mB,e)}function v(e){return x(i._Y,e)}function m(e){const t=r.jh.lookupVariable(i.WM,e);if(!(t instanceof r.H9))throw new Error("VAR_LINE_FILTER not found");return t}function b(e){const t=r.jh.lookupVariable(i.Jg,e);if(!(t instanceof a.m))throw new Error("VAR_LABEL_GROUP_BY not found");return t}function y(e){const t=r.jh.lookupVariable(i.Wi,e);if(!(t instanceof a.m))throw new Error("SERVICE_LABEL_VAR not found");return t}function S(e){const t=r.jh.lookupVariable(i.LI,e);if(!(t instanceof a.m))throw new Error("VAR_FIELD_GROUP_BY not found");return t}function w(e){const t=r.jh.lookupVariable(i.EY,e);if(!(t instanceof r.mI))throw new Error("VAR_DATASOURCE not found");return t}function O(e){const t=r.jh.lookupVariable(i.NW,e);if(!(t instanceof r.H9))throw new Error("VAR_LINE_FILTERS not found");return t}function x(e,t){const n=r.jh.lookupVariable(e,t);if(!(n instanceof r.H9))throw new Error(`Could not get AdHocFiltersVariable ${e}. Variable not found.`);return n}function E(e){const t=r.jh.lookupVariable(i.Du,e);if(!(t instanceof a.m))throw new Error("VAR_PRIMARY_LABEL_SEARCH not found");return t}function C(e){E(e).setState({value:".+",label:""})}function P(e){const t=r.jh.lookupVariable(i.Gb,e);if(!(t instanceof r.H9))throw new Error("VAR_PRIMARY_LABEL not found");return t}function k(e,t){P(t).setState({filters:[{value:".+",operator:"=~",key:e}]})}function j(e){return`var-${e}`}function F(e,t=i.mB){if((0,o.OH)(e))return{value:e.value,parser:"structuredMetadata"};try{const t=(0,i.zE)(e.value)?(0,i.Dx)(e.value):e.value,n=(0,l.fS)(JSON.parse(t));if(!1!==n)return n;throw new l.QX("getValueFromFieldsFilter: invalid filter value!")}catch(n){if(n instanceof l.QX?s.v.error(n,{msg:`getValueFromFieldsFilter: Failed to validate ${t}`,value:e.value}):s.v.error(n,{msg:`getValueFromFieldsFilter: Failed to parse ${t}`,value:e.value}),e.value)return{value:e.value,parser:"mixed"};throw n}}function L(e,t){return e===i.mB&&t?F(t):{value:null==t?void 0:t.value}}function _(e){return function(e){const t=e.filters.filter((e=>e.key===i.OX)).map((e=>e.value));if(!t)throw new Error("Service present in filters selected");return t[0]}(d(e).state)}function T(e){return w(e).getValue()}},5548:(e,t,n)=>{n.d(t,{Ht:()=>g,mE:()=>d,rA:()=>p});var r=n(9736),a=n(4702),i=n(20),s=n(2661),l=n(9683),o=n(6854),c=n(4532),u=n(708);function d(e){const t=r.jh.getVariables(e);let n=[];for(const e of t.state.variables)e instanceof r.H9&&e.state.filters.length&&n.push(e),e instanceof a.m&&e.state.value&&"logsFormat"!==e.state.name&&n.push(e);return n}function p(e){const t=r.jh.getAncestor(e,s.P);t.setState({patterns:[]});d(t).forEach((e=>{if(e instanceof r.H9&&"adhoc_service_filter"===e.state.key){let{labelName:t}=(0,l.W6)();t===i.ky&&(t=i.OX),e.setState({filters:e.state.filters.filter((e=>e.key===t))})}else e instanceof r.H9?e.setState({filters:[]}):e instanceof a.m&&e.setState({value:"",text:""})}))}const g=function(e){const t=e.state._wip;if(t&&e.state.filters.some((e=>e.key===t.key&&e.operator===o.w7.Equal)))return c._i;const n=e.state.name===i.MB,r=e.state.filters.filter((e=>(0,u.BG)(e.operator))).length,a=!(null==t?void 0:t.key)&&1===r,s=(null==t?void 0:t.key)&&r<1;if(n&&(a||s))return c._i;if(null==t?void 0:t.meta){const e=t.meta.type;if("float"===e||"bytes"===e||"duration"===e)return c.hI}return c.II}}}]); +//# sourceMappingURL=386.js.map?_cache=46b2efad8f9b648bc3ff \ No newline at end of file diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/386.js.map b/compose/grafana/plugins/grafana-lokiexplore-app/386.js.map new file mode 100644 index 0000000..cfc3145 --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/386.js.map @@ -0,0 +1 @@ +{"version":3,"file":"386.js?_cache=46b2efad8f9b648bc3ff","mappings":"uMAoBO,MAAMA,EAAgBC,IAC3B,MAAM,WAAEC,EAAU,WAAEC,EAAU,UAAEC,EAAS,UAAEC,EAAS,QAAEC,EAAO,OAAEC,EAAM,WAAEC,EAAU,YAAEC,GAAgBR,EAC7FS,GAASC,EAAAA,EAAAA,YAAWC,EAAWT,EAAYD,EAAYO,GAC7D,OACE,kBAACI,MAAAA,CAAIC,UAAWJ,EAAOK,WACrB,kBAACC,EAAAA,OAAMA,CACLC,QAASd,EAAa,UAAY,YAClCe,KAAMV,EACNW,KAAK,KACLC,gBAAejB,EACfW,UAAWJ,EAAOW,cAClBC,QAASnB,EAAaG,EAAUF,EAChCmB,cAAaC,EAAAA,EAAQC,sBAAsBC,oBAC3CC,MAAOpB,aAAAA,EAAAA,EAAQqB,SAChB,YAGCnB,GACA,kBAACO,EAAAA,OAAMA,CACLC,QAASf,EAAa,UAAY,YAClCgB,KAAMV,EACNW,KAAK,KACLC,gBAAelB,EACfY,UAAWJ,EAAOmB,cAClBP,QAASpB,EAAaI,EAAUD,EAChCsB,MAAOpB,aAAAA,EAAAA,EAAQuB,QACfP,cAAaC,EAAAA,EAAQC,sBAAsBM,qBAC5C,aAQHnB,EAAY,CAACoB,EAAsB7B,EAAqBD,EAAqBO,KAC1E,CACLM,WAAWkB,EAAAA,EAAAA,KAAI,CACbC,QAAS,OACTC,eAAgB,WAElBd,eAAeY,EAAAA,EAAAA,KAAI,CACjBG,aAAc,EACdC,YAAalC,GAAcM,OAAc6B,EAAY,SAEvDT,eAAeI,EAAAA,EAAAA,KAAI,CACjBG,aAAc,KAAKJ,EAAMO,MAAMC,OAAOC,WAAWT,EAAMO,MAAMC,OAAOC,YACpEC,WAAYxC,OAAaoC,EAAY,U,6ECxDpC,MAAMK,EAAY,EAAGC,eAC1B,MAAMlC,GAASC,EAAAA,EAAAA,YAAWC,GAC1B,OACE,kBAACC,MAAAA,CAAIC,UAAWJ,EAAOmC,MACrB,kBAACC,EAAAA,WAAUA,CAAC7B,QAAQ,YAAY8B,QAASH,EAAW,GAAK,qBACtDA,GAAYA,GAAAA,EAMfhC,EAAaoB,IACV,CACLa,MAAMZ,EAAAA,EAAAA,KAAI,CACRe,OAAQ,Y,uICpBP,SAASC,EAAgBhD,GAC9B,MAAMS,GAASC,EAAAA,EAAAA,YAAWC,GAC1B,OACE,oCACE,kBAACsC,EAAAA,MAAKA,CACJpC,UAAWJ,EAAOyC,MAClBC,SAAU,OACVzB,MAAO,qCACP0B,SAAUpD,EAAMoD,UAEhB,kBAACxC,MAAAA,KAAI,gBACW,IACd,kBAACyC,IAAAA,CACCxC,UAAU,gBACVyC,OAAO,SACPC,KAAK,qFACLC,IAAI,cACL,mBAEG,WACK,IACT,kBAACH,IAAAA,CACCxC,UAAU,gBACVyC,OAAO,SACPC,KAAK,mDACLC,IAAI,cACL,kBAEG,IACH,kBAACC,KAAAA,MAAK,uCAC8B,IACrC,kBAACJ,IAAAA,CAAExC,UAAU,gBAAgByC,OAAO,SAASC,KAAK,sCAAsCC,IAAI,cAAa,oBAEpG,IAAI,uBACY,IACrB,kBAACH,IAAAA,CACCxC,UAAU,gBACVyC,OAAO,SACPC,KAAK,2EACLC,IAAI,cACL,UAEG,MAMd,CAEA,SAAS7C,EAAUoB,GACjB,MAAO,CACLmB,OAAOlB,EAAAA,EAAAA,KAAI,CACT0B,KAAM,SAGZ,C,kCCxDO,MAAMC,EAAqB,KAChC,MAAMlD,GAASC,EAAAA,EAAAA,YAAWC,GAC1B,OACE,kBAACC,MAAAA,CAAIC,UAAWJ,EAAOmD,SACrB,kBAACP,IAAAA,CACCE,KAAK,sCACL1C,UAAWJ,EAAOoD,SAClBnC,MAAM,6CACN4B,OAAO,SACPE,IAAI,uBAEJ,kBAACM,EAAAA,KAAIA,CAACC,KAAK,wBAAwB,oBAMrCpD,EAAaoB,IACV,CACL6B,SAAS5B,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACT+B,WAAY,OACZC,IAAKlC,EAAMmC,QAAQ,GACnBC,SAAU,WACVC,IAAKrC,EAAMmC,SAAS,KAEtBL,UAAU7B,EAAAA,EAAAA,KAAI,CACZqC,UAAW,SACXC,MAAOvC,EAAMwC,OAAOC,KAAKC,UACzBC,SAAU3C,EAAM4C,WAAWC,UAAUF,SACrC,UAAW,CACTJ,MAAOvC,EAAMwC,OAAOC,KAAKK,UCpB1B,MAAMC,UAAqCC,EAAAA,I,YAIlD,UAA8C,MAAEC,I,IAI1CA,EAKAA,EARJ,MAAMC,EAAoBC,EAAAA,GAAWC,aAAaH,GAAOI,WACzD,IAAIC,EAAYJ,EAAkBI,UAalC,OAXuB,QAAnBL,EAAAA,EAAMM,MAAM3D,eAAZqD,IAAAA,OAAAA,EAAAA,EAAqBO,UACvBF,EAAYJ,EAAkBI,UAAUG,QAAQC,I,IAC9CT,EAA8BS,E,OAAX,QAAnBT,EAAAA,EAAMM,MAAM3D,eAAZqD,IAAAA,OAAAA,EAAAA,EAAqBU,SAA4B,QAAnBD,EAAAA,EAASH,MAAMvB,YAAf0B,IAAAA,EAAAA,EAAuB,GAAG,MAGrC,QAAnBT,EAAAA,EAAMM,MAAMzD,eAAZmD,IAAAA,OAAAA,EAAAA,EAAqBO,UACvBF,EAAYJ,EAAkBI,UAAUG,QACrCC,I,IAAcT,EAA8BS,E,QAAX,QAAnBT,EAAAA,EAAMM,MAAMzD,eAAZmD,IAAAA,OAAAA,EAAAA,EAAqBU,SAA4B,QAAnBD,EAAAA,EAASH,MAAMvB,YAAf0B,IAAAA,EAAAA,EAAuB,SAKtE,oCACGJ,EAAUM,KAAKF,GACd,kBAACG,EAAAA,GAA0BA,CAACC,IAAKJ,EAASH,MAAMO,IAAKJ,SAAUA,EAAUK,OAAQd,EAAMM,MAAMQ,WAIrG,G,EAzBgBC,e,EADHjB,G,oGCFN,MAAMkB,EAAa,EAAG5C,WAAU6C,UAAS/E,OAAO,SACrD,MAAMT,GAASC,EAAAA,EAAAA,YAAWC,IACnBuF,EAAUC,IAAef,EAAAA,EAAAA,WAAS,GACzC,OACE,kBAACxE,MAAAA,CAAIC,UAAWJ,EAAOwF,QAAS5E,QAAS,IAAM8E,GAAaD,GAAWE,aAAc,IAAMD,GAAY,IACrG,kBAACE,EAAAA,IAAGA,CACF3E,MAAOuE,EACPJ,IAAKI,EACLlC,KAAMmC,EAAWD,EAAUK,EAAkBL,EAAS/E,GACtDL,UAAWJ,EAAO8F,MAEpB,kBAACxF,EAAAA,OAAMA,CACLyF,aAAW,iBACXlF,cAAaC,EAAAA,EAAQC,sBAAsBiF,oBAC3CzF,QAAQ,YACRE,KAAK,KACLL,UAAWJ,EAAOiG,aAClBrF,QAAS+B,GAET,kBAACU,EAAAA,KAAIA,CAACC,KAAK,W,EAMb4C,EAA6C,CACjDC,GAAI,GACJC,GAAIC,KAAKC,MAAMC,OAAOC,WAAa,IAGrC,SAASX,EAAkBL,EAAiB/E,GAC1C,MAAMqE,EAASU,EAAQV,OACvB,GAAIA,EAASoB,EAAczF,GACzB,OAAO+E,EAGT,MAAMiB,EAAkBJ,KAAKC,MAA4B,GAAtBJ,EAAczF,IAEjD,MAAO,GAAG+E,EAAQkB,UAAU,EAAGD,QAAsBjB,EAAQkB,UAAU5B,EAAS2B,IAClF,CAEA,MAAMvG,EAAaoB,IACV,CACLkE,SAASjE,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACTmF,WAAY,YACZnD,IAAKlC,EAAMmC,QAAQ,KACnBmD,OAAQ,UACRC,SAAU,WAEZf,KAAKvE,EAAAA,EAAAA,KAAI,CACPuF,qBAAsB,EACtBC,wBAAyB,EACzBC,gBAAiB1F,EAAMwC,OAAOE,UAAUiD,KACxCC,OAAQ,aAAa5F,EAAMwC,OAAOE,UAAUkD,SAC5CrD,MAAOvC,EAAMwC,OAAOE,UAAUD,KAC9BoD,UAAW,aACXC,QAAS9F,EAAMmC,QAAQ,IAAM,KAC7BoD,SAAU,SACVQ,aAAc,aAEhBpB,cAAc1E,EAAAA,EAAAA,KAAI,CAChB+F,YAAa,IACbC,aAAc,Q,wBC/Db,MAAMC,EAAkB,EAAGC,WAAU9E,eAC1C,MAAM3C,GAASC,EAAAA,EAAAA,YAAWC,GAE1B,IAAKuH,GAAgC,IAApBA,EAAS3C,OACxB,OAAO,KAGT,MAAM4C,EAAkBD,EAAS1C,QAAQS,GAA6B,YAAjBA,EAAQmC,OACvDC,EAAkBH,EAAS1C,QAAQS,GAA6B,YAAjBA,EAAQmC,OAEvDE,EAAmBrC,KACvBsC,EAAAA,EAAAA,MACAnF,EAAS8E,EAAS1C,QAAQgD,GAAQA,IAAQvC,MAC1CwC,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkBC,gBAAiBC,EAAAA,GAAoBD,gBAAgBE,gBAAiB,CAC3GC,sBAAuBX,EAAgB5C,QAA4B,aAAlBU,aAAAA,EAAAA,EAASmC,MAAqB,EAAI,GACnFW,sBAAuBV,EAAgB9C,QAA4B,aAAlBU,aAAAA,EAAAA,EAASmC,MAAqB,EAAI,GACnFA,KAAMnC,EAAQmC,MACd,EAGJ,OACE,kBAACxH,MAAAA,KACEuH,EAAgB5C,OAAS,GACxB,kBAAC3E,MAAAA,CAAIC,UAAWJ,EAAOuI,mBACrB,kBAACC,EAAAA,KAAIA,CAACjI,QAAQ,YAAYkI,OAAO,OAAO5H,cAAaC,EAAAA,EAAQ2G,SAASiB,uBAAuB,mBAC1EjB,EAAS3C,OAAS,EAAI,IAAM,IAE/C,kBAAC3E,MAAAA,CAAIC,UAAWJ,EAAOyH,UACpBC,EAAgBxC,KAAKyD,GACpB,kBAACpD,EAAUA,CAACH,IAAKuD,EAAEnD,QAASA,QAASmD,EAAEnD,QAAS/E,KAAK,KAAKkC,SAAU,IAAMkF,EAAgBc,SAKjGf,EAAgB9C,OAAS,GACxB,kBAAC3E,MAAAA,CAAIC,UAAWJ,EAAOuI,mBACrB,kBAACC,EAAAA,KAAIA,CAACjI,QAAQ,YAAYkI,OAAO,OAAO5H,cAAaC,EAAAA,EAAQ2G,SAASmB,uBAAuB,mBAC1EhB,EAAgB9C,OAAS,EAAI,IAAM,GAAG,KAEzD,kBAAC3E,MAAAA,CAAIC,UAAWJ,EAAOyH,UACpBG,EAAgB1C,KAAKyD,GACpB,kBAACpD,EAAUA,CACTH,IAAKuD,EAAEnD,QACPA,QAASmD,EAAEnD,QACX/E,KAAMmH,EAAgB9C,OAAS,EAAI,KAAO,KAC1CnC,SAAU,IAAMkF,EAAgBc,S,EAUhD,SAASzI,EAAUoB,GACjB,MAAO,CACLiH,mBAAmBhH,EAAAA,EAAAA,KAAI,CACrBsF,SAAU,WAEZY,UAAUlG,EAAAA,EAAAA,KAAI,CACZC,QAAS,OACTgC,IAAKlC,EAAMmC,QAAQ,GACnBoF,WAAY,SACZC,SAAU,SAGhB,CCjEO,MAAMC,UAA4BzE,EAAAA,K,6GACvC,CADWyE,EACJzD,aAAY,EAAGf,YACpB,MAAMyE,EAAavE,EAAAA,GAAWwE,YAAY1E,EAAO2E,KAC3C,SAAEC,EAAQ,SAAE1B,GAAauB,EAAWrE,WAEpCyE,EAAc3E,EAAAA,GAAWwE,YAAY1E,EAAO8E,IAC5C,mBAAEC,EAAkB,eAAEC,GAAmBH,EAAYzE,WAErD3E,GAASC,EAAAA,EAAAA,aAAYqB,GAiF/B,SAAmBA,GACjB,MAAO,CACLkI,iBAAiBjI,EAAAA,EAAAA,KAAI,CACnB,gBAAiB,CACfiC,IAAK,OACLiG,MAAO,oBAEP,CAACnI,EAAMoI,YAAYC,KAAK,OAAQ,CAC9BC,cAAe,aAIrBC,2BAA2BtI,EAAAA,EAAAA,KAAI,CAC7BkI,MAAO,qBACPjI,QAAS,OACTgC,IAAKlC,EAAMmC,QAAQ,GACnBhC,eAAgB,gBAChBoH,WAAY,aACZ,CAACvH,EAAMoI,YAAYC,KAAK,OAAQ,CAC9BC,cAAe,oBAGnBE,sBAAsBvI,EAAAA,EAAAA,KAAI,CACxB,UAAW,CACTC,QAAS,QAEXiI,MAAO,eACPjI,QAAS,OAETgC,IAAKlC,EAAMmC,QAAQ,GACnBoF,WAAY,aACZ,CAACvH,EAAMoI,YAAYC,KAAK,OAAQ,CAC9BC,cAAe,YAGnBG,yBAAyBxI,EAAAA,EAAAA,KAAI,CAC3BmC,SAAU,SACVC,IAAKqG,EACLC,KAAM,EACNC,WAAY5I,EAAMwC,OAAOoG,WAAWC,OACpCC,OAAQ9I,EAAM8I,OAAOC,YACrB7G,IAAKlC,EAAMmC,QAAQ,GACnB6G,UAAWhJ,EAAMiJ,QAAQC,KAE3BC,mBAAmBlJ,EAAAA,EAAAA,KAAI,CACrBkI,MAAO,oBACPjI,QAAS,OACToI,cAAe,SACfpG,IAAKlC,EAAMmC,QAAQ,GACnB2D,QAAS9F,EAAMmC,QAAQ,KAEzBiH,SAASnJ,EAAAA,EAAAA,KAAI,CACXkI,MAAO,UACPjI,QAAS,SAEXmJ,aAAapJ,EAAAA,EAAAA,KAAI,CACfkI,MAAO,cACPjI,QAAS,OACTgC,IAAKlC,EAAMmC,QAAQ,GACnBmH,MAAO,mBACP9B,SAAU,OACVD,WAAY,aAEdgC,iBAAiBtJ,EAAAA,EAAAA,KAAI,CACnBkI,MAAO,kBACPjI,QAAS,OACToI,cAAe,SACfkB,UAAWxJ,EAAMmC,QAAQ,QAE3BsH,qBAAqBxJ,EAAAA,EAAAA,KAAI,CACvBkI,MAAO,sBACPjI,QAAS,OACTgC,IAAKlC,EAAMmC,QAAQ,GACnBqF,SAAU,OACVrH,eAAgB,aAElBuJ,WAAWzJ,EAAAA,EAAAA,KAAI,CACbkI,MAAO,YACPjI,QAAS,OACToI,cAAe,MACfpG,IAAKlC,EAAMmC,QAAQ,KAGzB,CApKyCvD,CAAUoB,EAAOiD,EAAMM,MAAMnB,YAElE,OACE,kBAACvD,MAAAA,CACCC,WAAW6K,EAAAA,EAAAA,IACTjL,EAAOyK,kBACkB,WAAzBlG,EAAMM,MAAMnB,SAAwB1D,EAAO+J,6BAA0BnI,IAGvE,oCAEGuH,GACC,kBAAChJ,MAAAA,CAAIC,UAAWJ,EAAO6J,2BACrB,kBAAC1J,MAAAA,CAAIC,UAAWJ,EAAO2K,aACrB,kBAACxK,MAAAA,CAAIC,WAAW6K,EAAAA,EAAAA,IAAGjL,EAAO0K,QAAS1K,EAAOwJ,kBACvCL,EAASjE,KAAKgG,GACNA,aAAmBC,EAAAA,GACxB,kBAACD,EAAQ5F,UAAS,CAACF,IAAK8F,EAAQrG,MAAMO,IAAKb,MAAO2G,IAChD,SAIV,kBAAC/K,MAAAA,CAAIC,UAAWJ,EAAO6K,iBACrB,kBAAC3H,EAAkBA,MACnB,kBAAC/C,MAAAA,CAAIC,UAAWJ,EAAO+K,qBACpB5B,EAASjE,KAAKgG,GACNA,EAAQrG,MAAMO,MAAQgG,EAC3B,kBAACF,EAAQ5F,UAAS,CAACF,IAAK8F,EAAQrG,MAAMO,IAAKb,MAAO2G,IAChD,OAGN,kBAAC/K,MAAAA,CAAIC,UAAWJ,EAAOgL,WACpB7B,EAASjE,KAAKgG,GACJA,aAAmB7G,GACxB6G,aAAmBC,EAAAA,GAEnB,KADF,kBAACD,EAAQ5F,UAAS,CAACF,IAAK8F,EAAQrG,MAAMO,IAAKb,MAAO2G,UAUhE,kBAAC/K,MAAAA,CAAIC,UAAWJ,EAAO8J,sBACpBP,GAAkB,kBAACA,EAAejE,UAAS,CAACf,MAAOgF,IACnDJ,GACC,kBAAChJ,MAAAA,CAAIC,UAAWJ,EAAO2K,aACrB,kBAACxK,MAAAA,CAAIC,UAAWJ,EAAO0K,SACpBvB,EAASjE,KAAKgG,GACNA,aAAmB7G,GACxB6G,EAAQrG,MAAMO,MAAQiG,EACtB,kBAACH,EAAQ5F,UAAS,CAACF,IAAK8F,EAAQrG,MAAMO,IAAKb,MAAO2G,IAChD,UAQd,kBAAC/K,MAAAA,CAAIC,UAAWJ,EAAO8J,sBACrB,kBAACtC,EAAeA,CACdC,SAAUA,EACV9E,SAAW8E,GAA+BuB,EAAWsC,SAAS,CAAE7D,gBAKpE,kBAACtH,MAAAA,CAAIC,UAAWJ,EAAO8J,sBACpBR,GAAsB,kBAACA,EAAmBhE,UAAS,CAACf,MAAO+E,M,IASxE,MAAMU,EAAsB,G,wlBClF5B,MAAMuB,EAA4B,GAAGC,EAAAA,+BAMxBH,EAAgC,uBAIhCD,EAA2B,UAGjC,MAAM/B,UAAoB/E,EAAAA,GAyCxBmH,UAAAA,GACL,MAAMC,GAAOC,EAAAA,EAAAA,MACbC,KAAKN,SAAS,CACZhC,mBAAoB,IAAIuC,EAAAA,EAAyB,CAAC,GAClDtC,eAAgB,IAAIuC,EAAAA,GAAoB,CAAC,GACzCC,eAAgB,IAAIhD,EAAoB,CAAErF,SAAUgI,IAASM,EAAAA,GAAUC,QAAU,SAAW,cAEhG,CAEOC,OAAAA,GACLN,KAAKN,SAAS,CACZa,oBAAoB,IAEtBC,aAAaC,QAAQd,EAA2B,OAClD,CAtDAe,WAAAA,CAAYzH,GACV0H,MAAM,E,sUAAA,IACD1H,GAAAA,CACHsH,qBAAsBC,aAAaI,QAAQjB,MAG7CK,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAkDF,SAAS1L,EAAUoB,GACjB,MAAO,CACLqL,eAAepL,EAAAA,EAAAA,KAAI,CACjBqL,SAAU,EACVpL,QAAS,OACTqL,UAAW,OACXjD,cAAe,WAEjBvJ,WAAWkB,EAAAA,EAAAA,KAAI,CACbqL,SAAU,EACVpL,QAAS,OACTqL,UAAW,OACXjD,cAAe,SACfkD,SAAU,UAEZC,MAAMxL,EAAAA,EAAAA,KAAI,CACRkI,MAAO,eACPmD,SAAU,EACVpL,QAAS,OACToI,cAAe,SACfpG,IAAKlC,EAAMmC,QAAQ,GACnB2D,QAAS,KAAK9F,EAAMmC,QAAQ,MAAMnC,EAAMmC,QAAQ,OAElDgH,mBAAmBlJ,EAAAA,EAAAA,KAAI,CACrBkI,MAAO,oBACPjI,QAAS,OACToI,cAAe,SACfpG,IAAKlC,EAAMmC,QAAQ,KAGzB,CA9EE,EAVW4F,EAUJ/D,aAAY,EAAGf,YACpB,MAAMyE,EAAavE,EAAAA,GAAWwE,YAAY1E,EAAO2E,KAC3C,aAAE8D,GAAiBhE,EAAWrE,YAC9B,mBAAEwH,EAAkB,eAAEJ,GAAmBxH,EAAMI,WAErD,IAAKqI,EAEH,OADAC,EAAAA,EAAOC,KAAK,6BACL,KAGT,MAAMlN,GAASC,EAAAA,EAAAA,YAAWC,GAC1B,OACE,kBAACC,MAAAA,CAAIC,UAAWJ,EAAO2M,eACrB,kBAACxM,MAAAA,CAAIC,UAAWJ,EAAOK,YACnB8L,GACA,kBAAC5J,EAAeA,CACdI,SAAU,KACR4B,EAAM2H,SAAS,IAKpBH,GAAkB,kBAACA,EAAezG,UAAS,CAACf,MAAOwH,IAGpD,kBAAC5L,MAAAA,CAAIC,UAAWJ,EAAO+M,MAAOC,GAAgB,kBAACA,EAAa1H,UAAS,CAACf,MAAOyI,M,qdCpBhF,MAAMG,GAAAA,W,MAA0C,cACrDpI,EACAC,EACAoI,EACAC,EACArC,EACAsC,GAKA,MAAMC,QAA8BC,EAAAA,EAAAA,oBAAmBC,KAAIC,EAAAA,EAAAA,IAAcL,IAEzE,KAAME,aAAiCI,EAAAA,uBAErC,MADAV,EAAAA,EAAOW,MAAM,IAAIC,MAAM,8CACjB,IAAIA,MAAM,uBAIlB,MAEMC,EAFiBP,EAEiBO,iBAExC,IAAIC,EAA4B,GAEhC,GAAID,GAAoBA,EAAiBE,yBAA0B,CACjE,MAAMC,EAA2C,CAC/Cb,OACAc,MAAO,IACPlD,YACAmD,YAAY,GAGRC,EAA6C,CACjDC,gBAAgB,GAGlB,IACE,IAAIC,QAAgBR,EAAiBE,yBAAyBjJ,EAAOK,IAAK6I,EAASG,GACnF,GAAIE,IAAWC,EAAAA,EAAAA,SAAQD,GAAU,C,IAuB3BvJ,EArBJ,GAAIuI,IAAiBkB,EAAAA,GACnB,MAAO,CAAEC,SAAS,EAAMV,OAAQO,EAAQpJ,KAAKE,IAAS,CAAErB,KAAMqB,OAGhE,MAAMsJ,EAAiB1J,EAASH,MAAM6F,QAGtC,IAAIiE,EAA2B,GAC/BD,EAAeE,SAAS7J,I,IACRA,EAAAA,EAAd,MAAM8J,EAA+B,QAAvB9J,EAAkB,QAAlBA,EAAAA,EAAO+J,mBAAP/J,IAAAA,OAAAA,EAAAA,EAAqB,UAArBA,IAAAA,EAAAA,EAA2BA,EAAO8J,OAC5CE,EAAAA,GAAAA,IAAgBhK,EAAOiK,UACzBH,EAAMI,MAAM,KAAKL,SAASM,GAAMP,EAAeQ,KAAKD,KAEpDP,EAAeQ,KAAKN,EACtB,IAGF,MAAMO,EAAkBd,EAAQvJ,QAAQ8J,IAC9BF,EAAe1J,SAAS4J,KAGlC,GAA4B,wBAAb,QAAX9J,EAAAA,EAAOsK,YAAPtK,IAAAA,OAAAA,EAAAA,EAAauK,QAAiC,CAChD,GAAIvK,EAAO8J,MAAO,CAChB,MAAMU,GAAeC,EAAAA,EAAAA,IAAyBzK,EAAQuI,GACtD,MAAO,CACLmB,SAAS,EACTV,OAAQqB,EAAgBlK,KAAKgK,IAAO,CAClCnL,KAAMmL,EACNL,MAAOY,KAAKC,UAAU,CACpBb,MAAOK,EACPI,OAAQC,EAAaD,aAI7B,CAEE,MAAO,CACLb,SAAS,EACTV,OAAQqB,EAAgBlK,KAAKgK,I,IAIjBnK,EAAAA,E,MAJwB,CAClChB,KAAMmL,EACNL,MAAOY,KAAKC,UAAU,CACpBb,MAAOK,EACPI,OAA2B,QAAnBvK,EAAW,QAAXA,EAAAA,EAAOsK,YAAPtK,IAAAA,OAAAA,EAAAA,EAAauK,cAAbvK,IAAAA,EAAAA,EAAuB,UAElC,IAGP,CACEgJ,EAASqB,EAAgBlK,KAAKyK,IAAO,CAAE5L,KAAM4L,KAEjD,MACE5B,EAAS,GACTd,EAAAA,EAAOW,MAAMU,EAAS,CAAEsB,IAAK,mCAEjC,CAAE,MAAOC,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CACdD,IAAK,+HAEP7B,EAAS,EACX,CACF,MACEd,EAAAA,EAAOC,KACL,2IAEFa,EAAS,GAGX,MAAO,CAAEU,SAAS,EAAMV,SAC1B,I,gBA5GEhJ,EACAC,EACAoI,EACAC,EACArC,EACAsC,G,gCANWH,GA+HN,SAAe2C,GACpB9K,EACAD,G,OAFoB+K,GAAAA,MAAAA,KAAAA,U,UAAAA,K,OAAAA,GAAf,cACL9K,EACAD,GAKA,MAAMgL,QAAoBvC,EAAAA,EAAAA,oBAAmBC,KAAIC,EAAAA,EAAAA,IAAc1I,IAC/D,KAAM+K,aAAuBpC,EAAAA,uBAE3B,MADAV,EAAAA,EAAOW,MAAM,IAAIC,MAAM,8CACjB,IAAIA,MAAM,uBAElB,MAAMmC,EAAaD,EAEnB,GAAIC,GAAcA,EAAWC,aAAc,CAEzC,MAEMC,EAlCH,SACLC,EACApL,GAEA,IAAIqL,EAAqBD,EAAgBpL,QACtCsL,MAAQC,EAAAA,GAAAA,IAAoBvL,EAAOiK,WAAaqB,EAAEjL,MAAQL,EAAOK,OAQpE,OAJKgL,EAAmBG,MAAMxL,IAAWuL,EAAAA,GAAAA,IAAoBvL,EAAOiK,cAClEoB,EAAqB,IAGhBA,CACT,CAoB4BI,CAFE,IAAIC,GAAAA,EAAkBzL,EAASH,MAAM6F,SAC7BgG,yBAC2B3L,GAEvDkJ,EAAoD,CACxD7I,IAAKL,EAAOK,IACZsF,QAASwF,GAGX,IAAI5B,QAAgB0B,EAAWC,aAAahC,GAE5C,IAAIM,EAAAA,EAAAA,SAAQD,GAAU,C,IAgBlBqC,EAfFrC,EAAUA,EAAQvJ,QAAQ6L,IAEhB5L,EAASH,MAAM6F,QACpB3F,QAAQsL,GAAMA,EAAEjL,MAAQL,EAAOK,MAC/BmL,MAAMF,IACL,IAAItB,EAAAA,GAAAA,IAAgBsB,EAAErB,UAAW,CAE/B,OADeqB,EAAExB,MAAMI,MAAM,KACfsB,MAAM1B,GAAUA,IAAU+B,EAAO7M,MACjD,CAEE,OAAOsM,EAAErB,WAAa6B,GAAAA,GAASC,OAAST,EAAExB,QAAU+B,EAAO7M,IAC7D,MAGN,MAAMgN,GAAsBC,EAAAA,EAAAA,IACc,QAAxCL,GAAAA,EAAAA,EAAAA,IAAsB3L,GAAUiM,kBAAhCN,IAAAA,OAAAA,EAAAA,EAA4CO,WAC5CnM,EAAOK,KAEH+L,EAAoB,IAAIC,IAAIL,GAC9BA,EAAoBjM,QACtBwJ,EAAQ+C,MAAK,CAACzO,EAAG0O,KACPH,EAAkBI,IAAID,EAAEvN,MAAQ,GAAK,IAAMoN,EAAkBI,IAAI3O,EAAEmB,MAAQ,GAAK,IAG9F,CAEA,MAAO,CAAE0K,SAAS,EAAMV,OAAQO,EAClC,CAEE,OADArB,EAAAA,EAAOW,MAAM,IAAIC,MAAM,yDAChB,CAAEY,SAAS,EAAMV,OAAQ,GAEpC,IA3DsB+B,GAAAA,MAAAA,KAAAA,U,gVC7Jf,SAAe0B,GAAyBxM,G,OAAzBwM,GAAAA,MAAAA,KAAAA,U,UAAAA,K,OAAAA,GAAf,cAAwCxM,GAI7C,MAAM+K,QAAoBvC,EAAAA,EAAAA,oBAAmBC,KAAIC,EAAAA,EAAAA,IAAc1I,IAC/D,KAAM+K,aAAuBpC,EAAAA,uBAE3B,MADAV,EAAAA,EAAOW,MAAM,IAAIC,MAAM,4CACjB,IAAIA,MAAM,uBAElB,MAAMmC,EAAaD,EAEnB,GAAIC,GAAcA,EAAWyB,WAAY,CACvC,MAGMxD,EAAkD,CACtDvD,QAJyB,IAAI+F,GAAAA,EAAkBzL,EAASH,MAAM6F,SAC7BgG,0BAM7BgB,QAAgB1B,EAAWyB,WAAWxD,GAEtC0D,GAD4BC,MAAMrD,QAAQmD,GAAWA,EAAU,IACvC3M,QAAQK,IAASyM,GAAAA,GAAiB5M,SAASG,EAAIrB,QAE7E,MAAO,CAAE0K,SAAS,EAAMV,OAAQ4D,EAClC,CAEE,OADA1E,EAAAA,EAAOW,MAAM,IAAIC,MAAM,uDAChB,CAAEY,SAAS,EAAMV,OAAQ,GAEpC,IA5BsByD,GAAAA,MAAAA,KAAAA,U,CAuCf,SAAeM,GAAsB,G,OAAtBA,GAAAA,MAAAA,KAAAA,U,UAAAA,K,OAAAA,GAAf,eAAqC,MAC1C5D,EAAK,UACLlD,EAAS,WACT+G,EAAU,KACV3E,EAAI,SACJC,EAAQ,aACRC,IAKA,MAAMyC,QAAoBvC,EAAAA,EAAAA,oBAAmBC,KAAIC,EAAAA,EAAAA,IAAcL,IAC/D,KAAM0C,aAAuBpC,EAAAA,uBAE3B,MADAV,EAAAA,EAAOW,MAAM,IAAIC,MAAM,4CACjB,IAAIA,MAAM,uBAElB,MAAMmC,EAAaD,EACbjC,EAAmBkC,EAAWlC,iBAE9BG,EAAqC,CACzCb,OACApC,YACA+G,aACAzE,eACAD,WACAa,SAKI8D,EACJ,GACkD,mBAAzClE,EAAiBmE,qBACxBnE,EAAiBmE,oBAAoBvF,KAAKoB,IAC5C,SAAUoE,GACR,O,SAmEJlC,EACAmC,EACA/D,G,OAHa6D,GAAAA,MAAAA,KAAAA,U,CAlEFA,CAAoBjC,EAAYkC,EACzC,EAGF,GAAIF,GAA0D,mBAA1BA,EAAsC,CACxE,MAAMN,QAA8CM,EAAsB/D,GAE1E,GAAIyD,aAAmB7D,MAErB,MADAZ,EAAAA,EAAOW,MAAM8D,EAAS,CAAE9B,IAAK,oCACvB8B,EAGR,MAAMd,EAA4Bc,EAC/B3M,QAAQqN,GACH9E,IAAiBkB,EAAAA,GACZ4D,EAAM3I,QAAU4I,EAAAA,GAGrB/E,IAAiBgF,EAAAA,IAA2BF,EAAM3I,QAAU4I,EAAAA,IAIvC,OAAlBD,EAAMG,UAEdrN,KAAKkN,IACJ,GAAI9E,IAAiBgF,EAAAA,GAAyB,C,IACnBF,EAAzB,IAAI9C,EAA+C,KAAb,QAAb8C,EAAAA,EAAMG,eAANH,IAAAA,OAAAA,EAAAA,EAAetN,QAAesN,EAAMG,QAAQ,GAAK,QACpD,OAAlBH,EAAMG,UACRjD,EAAS,sBAGX,MAAM3H,EAAOyK,EAAMzK,KAEnB,MAAO,CACL5D,KAAMqO,EAAM3I,MACZoF,MAAOuD,EAAM3I,MACb+I,MAAOlD,EACPD,KAAM,CACJC,SACA3H,QAGN,CAEA,MAAO,CAAE5D,KAAMqO,EAAM3I,MAAOoF,MAAOuD,EAAM3I,MAAO,IAapD,OAVAmH,EAAOS,MAAK,CAACzO,EAAG0O,IACE,uBAAZ1O,EAAE4P,OAA8C,uBAAZlB,EAAEkB,OAChC,EAEM,uBAAZ5P,EAAE4P,OAA8C,uBAAZlB,EAAEkB,MACjC,EAEF,IAGF,CAAE/D,SAAS,EAAMV,OAAQ6C,EAClC,CAEE,OADA3D,EAAAA,EAAOW,MAAM,IAAIC,MAAM,uDAChB,CAAEY,SAAS,EAAMV,OAAQ,GAEpC,IAjGsB+D,GAAAA,MAAAA,KAAAA,U,UAqGPG,K,OAAAA,GAAf,cACEjC,EACAmC,EACA/D,GAEA,KAAM,sBAAuB4B,IAAwD,mBAAlCA,aAAAA,EAAAA,EAAYyC,mBAC7D,MAAM,IAAI5E,MAAM,+CAGlB,MAAM6E,EACJP,EAAa/E,MAZM,OAYE+E,EAAa/E,KAC9B4C,EAAWyC,kBAAkBN,EAAa/E,KAAM+E,EAAaJ,iBAC7DnQ,EAEN,IAAK8Q,EACH,MAAM,IAAI7E,MAAM,iD,IAIJsE,EAAd,MAAMQ,EAA+B,QAAvBR,EAAAA,aAAAA,EAAAA,EAAcnH,iBAAdmH,IAAAA,EAAAA,GAA2BS,EAAAA,EAAAA,uBACnCC,EAAc7C,EAAW8C,mBAAmBH,IAC5C,MAAEI,EAAK,IAAEC,GAAQH,E,IACwCV,EAA/D,MAAMc,EAAoC,CAAEF,QAAOC,MAAK9E,MAA0B,QAAnBiE,EAAAA,aAAAA,EAAAA,EAAcjE,aAAdiE,IAAAA,EAAAA,EAAuB,KAGtF,OAFAc,EAAOC,MAAQR,EAER,IAAIS,QAAAA,W,MAAQ,cAAOC,EAASC,GACjC,IAMED,SALoEpD,EAAWsD,YATvE,kBAWNL,EACA7E,IAEWmF,OACf,CAAE,MAAO3F,GACP4F,QAAQ5F,MAAM,QAASA,GACvByF,EAAOzF,EACT,CACF,I,gBAZ0BwF,EAASC,G,gCAAxBF,GAab,IAtCelB,GAAAA,MAAAA,KAAAA,U,gBC1Id,mB,sGA6CD,IAAIwB,GAA8B,CAChC,EAAG,YACH,EAAG,MACH,GAAI,QACJ,GAAI,QACJ,GAAI,OACJ,GAAI,MACJ,GAAI,WACJ,GAAI,MACJ,GAAI,QACJ,GAAI,SACJ,GAAI,WACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,GAAI,KACJ,GAAI,QACJ,GAAI,OACJ,GAAI,MACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,IAAK,QASHC,GAAsC,CACxC,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,KAWHC,GAAoC,CACtC,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACLC,EAAG,IACH,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACLC,EAAG,IACH,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MAOHC,GAA0C,CAC5CC,OAAQ,MACRC,QAAS,OACTC,OAAQ,QACRC,OAAQ,MACRC,KAAM,IACNC,IAAK,uBAAuBC,KAAKC,UAAUC,UAAY,OAAS,QAQ9DC,GAA6C,KAMjD,IAAK,IAAIC,EAAI,EAAGA,EAAI,KAAMA,EACxBhB,GAAI,IAAMgB,GAAK,IAAMA,EAMvB,IAAK,IAAIA,EAAI,EAAGA,GAAK,IAAKA,EAMxBhB,GAAIgB,EAAI,IAAMA,EAAEvD,WAMlB,SAASwD,GAAmBC,GAE1B,GAAmB,aAAfA,EAAMhN,KAAqB,CAC7B,IAAIiN,EAAYC,OAAOC,aAAaH,EAAMI,OAe1C,OAJKJ,EAAMK,WACTJ,EAAYA,EAAUK,eAGjBL,CACT,CAGA,OAAInB,GAAIkB,EAAMI,OACLtB,GAAIkB,EAAMI,OAGfrB,GAAYiB,EAAMI,OACbrB,GAAYiB,EAAMI,OAQpBF,OAAOC,aAAaH,EAAMI,OAAOE,aAC1C,CA6DA,SAASC,GAAW9P,GAClB,MAAe,UAARA,GAA2B,SAARA,GAA0B,QAARA,GAAyB,SAARA,CAC/D,CA4BA,SAAS+P,GAAe/P,EAAagQ,EAAqBC,GAaxD,OAVKA,IACHA,EA1BJ,WACE,IAAKb,GAAa,CAChBA,GAAc,CAAC,EACf,IAAK,IAAIpP,KAAOqO,GAAK,CACnB,MAAM6B,EAAYC,SAASnQ,EAAK,IAG5BkQ,EAAY,IAAMA,EAAY,KAI9B7B,GAAI+B,eAAepQ,KACrBoP,GAAYf,GAAIrO,IAAQA,EAE5B,CACF,CACA,OAAOoP,EACT,CASaiB,GAAgBrQ,GAAO,UAAY,YAK/B,aAAXiQ,GAAyBD,EAAUtQ,SACrCuQ,EAAS,WAGJA,CACT,CAiBA,SAASK,GAAWC,EAAqBN,GACvC,IAAIO,EACAxQ,EACAqP,EACAW,EAAY,GAMhB,IAFAQ,EApBF,SAAwBD,GACtB,MAAoB,MAAhBA,EACK,CAAC,MAGVA,EAAcA,EAAYlH,QAAQ,SAAU,UACzBQ,MAAM,IAC3B,CAaS4G,CAAeF,GAEjBlB,EAAI,EAAGA,EAAImB,EAAK9Q,SAAU2P,EAC7BrP,EAAMwQ,EAAKnB,GAGPX,GAAgB1O,KAClBA,EAAM0O,GAAgB1O,IAMpBiQ,GAAqB,aAAXA,GAAyB1B,GAAUvO,KAC/CA,EAAMuO,GAAUvO,GAChBgQ,EAAUjG,KAAK,UAIb+F,GAAW9P,IACbgQ,EAAUjG,KAAK/J,GAInB,IAAKA,EACH,MAAM,IAAIyI,MAAM,qBAOlB,MAAO,CACLzI,IAAKA,EACLgQ,UAAWA,EACXC,OALFA,EAASF,GAAe/P,EAAKgQ,EAAWC,GAO1C,CAEA,SAASS,GAAUC,EAAiDC,GAClE,OAAgB,OAAZD,GAAoBA,IAAYE,WAIhCF,IAAYC,GAITF,GAAUC,EAAQG,WAAYF,GACvC,CCnZO,MAAMG,GAAY,IDqZlB,MA0CL7J,WAAAA,CAAY8J,GAzCZvT,GAAAA,KAAAA,cAAAA,GAKAwT,GAAAA,KAAAA,aAA6C,CAAC,GAK9CC,GAAAA,KAAAA,aAAuC,CAAC,GAMxCC,GAAAA,KAAAA,kBAA0C,CAAC,GAK3CC,GAAAA,KAAAA,mBAAkC5U,GAKlC6U,GAAAA,KAAAA,oBAAqC,GAKrCC,GAAAA,KAAAA,uBAAsB,GAMtBC,GAAAA,KAAAA,uBAAwC,GAExCC,GAAAA,KAAAA,mBAA4C,CAAC,GAyB7C,QAAQC,mBAAmBC,IACzBA,EAAaA,GAAc,CAAC,EAE5B,IACE1R,EADE2R,GAAkB,EAGtB,IAAK3R,KAAOwG,KAAK2K,gBACXO,EAAW1R,GACb2R,GAAkB,EAGpBnL,KAAK2K,gBAAgBnR,GAAO,EAGzB2R,IACHnL,KAAK+K,qBAAsB,EAC7B,IAOF,QAAQK,eAAc,CACpBpC,EACAQ,EACAT,EACAsC,EACAtB,EACAuB,KAEA,IAAIzC,EACA0C,EACAC,EAAU,GACV/B,EAASV,EAAMhN,KAGnB,IAAKiE,KAAKyK,WAAWzB,GACnB,MAAO,GAUT,IANe,UAAXS,GAAsBH,GAAWN,KACnCQ,EAAY,CAACR,IAKVH,EAAI,EAAGA,EAAI7I,KAAKyK,WAAWzB,GAAW9P,SAAU2P,EAKnD,GAJA0C,EAAWvL,KAAKyK,WAAWzB,GAAWH,IAIjCwC,IAAgBE,EAASE,KAAOzL,KAAK2K,gBAAgBY,EAASE,OAASF,EAASD,QAMjF7B,IAAW8B,EAAS9B,SAYV,aAAZ,IAA2BV,EAAM2C,UAAY3C,EAAM4C,UAxTnCC,EAyTDpC,EAzTuBqC,EAyTZN,EAAS/B,UAxTlCoC,EAAWnG,OAAOqG,KAAK,OAASD,EAAWpG,OAAOqG,KAAK,OAyTxD,CAMA,IAAIC,GAAeV,GAAgBE,EAASS,QAAUjC,EAClDkC,EAAiBZ,GAAgBE,EAASE,MAAQJ,GAAgBE,EAASD,QAAUA,GACrFS,GAAeE,IACjBjM,KAAKyK,WAAWzB,GAAWkD,OAAOrD,EAAG,GAGvC2C,EAAQjI,KAAKgI,EACf,CAvUN,IAAwBK,EAAsBC,EA0U1C,OAAOL,CAAO,IAYhB,QAAQW,iBAAgB,CAACZ,EAAoBtH,EAAkB+H,EAAeI,KAE5E,MAAMnV,EAASgN,EAAEhN,QAAUgN,EAAEoI,WAxTjC,IAAwBtD,EAyThB9R,GAAUA,aAAkBqV,aAAetM,KAAKuM,aAAatI,EAAGhN,EAAQ+U,EAAOI,KAIxD,IAAvBb,EAAStH,EAAG+H,MA7TIjD,EA8TH9E,GA7TTuI,eACRzD,EAAMyD,iBAIRzD,EAAM0D,aAAc,EAMtB,SAAyB1D,GACnBA,EAAM2D,gBACR3D,EAAM2D,kBAIR3D,EAAM4D,cAAe,CACvB,CA4SMD,CAAgBzI,GAClB,IAMF,QAAQ2I,cAAa,CAAC5D,EAAmBQ,EAAqBvF,KAC5D,IACI4E,EADAgE,EAAY7M,KAAKoL,YAAYpC,EAAWQ,EAAWvF,GAEnDiH,EAAqC,CAAC,EACtC4B,EAAW,EACXC,GAA4B,EAGhC,IAAKlE,EAAI,EAAGA,EAAIgE,EAAU3T,SAAU2P,EAAG,C,IAELgE,EADhC,GAAIA,EAAUhE,GAAG4C,IACfqB,EAAWrS,KAAKuS,IAAIF,EAA4B,QAAlBD,EAAAA,EAAUhE,GAAGyC,aAAbuB,IAAAA,EAAAA,EAAsB,EAExD,CAGA,IAAKhE,EAAI,EAAGA,EAAIgE,EAAU3T,SAAU2P,EAAG,CAMrC,MAAM4C,EAAMoB,EAAUhE,GAAG4C,IACzB,GAAIA,EAAJ,CASE,GAAIoB,EAAUhE,GAAGyC,QAAUwB,EACzB,SAGFC,GAA4B,EAG5B7B,EAAWO,GAAO,EAClBzL,KAAKmM,cAAcU,EAAUhE,GAAG0C,SAAUtH,EAAG4I,EAAUhE,GAAGmD,MAAOP,GAKjE,MAAMwB,EAAoBxB,EAAIyB,YAAYlE,GACpCmE,EAAiB1B,EAAI2B,MAAM,EAAGH,GACpC,IAAK,MAAOxB,EAAKH,KAAU+B,OAAOC,QAAQtN,KAAK2K,iBACzCW,EAAQ,GAAKG,EAAI8B,WAAWJ,KAC9BjC,EAAWO,GAAO,EAKxB,MAIKsB,GACH/M,KAAKmM,cAAcU,EAAUhE,GAAG0C,SAAUtH,EAAG4I,EAAUhE,GAAGmD,MAE9D,C,IAIuB,EAAvB,IAAK,MAAMT,KAAsC,QAA1B,EAAAvL,KAAKyK,WAAWzB,UAAhB,QAA8B,GAC/CuC,EAAS9B,SAAWxF,EAAElI,MAAQwP,EAASE,KAA0B,IAAnBF,EAASD,QACzDJ,EAAWK,EAASE,KAAO,GAyB/B,IAAI+B,EAAgC,aAAXvJ,EAAElI,MAAuBiE,KAAK8K,oBACnD7G,EAAElI,OAASiE,KAAK+K,qBAAwBzB,GAAWN,IAAewE,GACpExN,KAAKiL,gBAAgBC,GAGvBlL,KAAK8K,oBAAsBiC,GAAwC,YAAX9I,EAAElI,IAAkB,IAM9E,QAAQ0R,mBAAmBC,IACzB,KAAMA,aAAoBC,eACxB,MAAM,IAAI1L,MAAM,8BAElB,MAAM8G,EAAuB2E,EAG7B,GAAI3E,EAAM6E,OACR,OAKyB,iBAAhB7E,EAAMI,QAEfJ,EAAMI,MAAQJ,EAAM8E,SAGtB,IAAI7E,EAAYF,GAAmBC,GAG9BC,IAKc,UAAfD,EAAMhN,MAAoBiE,KAAK6K,mBAAqB7B,EAKxDhJ,KAAK8N,UAAU9E,EApenB,SAAwBD,GACtB,IAAIS,EAAY,GAkBhB,OAhBIT,EAAMK,UACRI,EAAUjG,KAAK,SAGbwF,EAAMgF,QACRvE,EAAUjG,KAAK,OAGbwF,EAAM4C,SACRnC,EAAUjG,KAAK,QAGbwF,EAAM2C,SACRlC,EAAUjG,KAAK,QAGViG,CACT,CAgd8BwE,CAAejF,GAAQA,GAJ/C/I,KAAK6K,kBAAmB,EAI6B,IASzD,QAAQoD,uBAAsB,KAC5BC,aAAalO,KAAK4K,aAClB5K,KAAK4K,YAAcuD,WAAWnO,KAAKiL,gBAAiB,IAAK,IAM3D,QAAQmD,iBAAgB,CAACpC,EAAehC,EAAgBuB,EAA6B9B,KAGnFzJ,KAAK2K,gBAAgBqB,GAAS,EAM9B,MAAMqC,EAAqBC,GAClB,KACLtO,KAAK+K,oBAAsBuD,IACzBtO,KAAK2K,gBAAgBqB,GACvBhM,KAAKiO,qBAAqB,EAQxBM,EAAqBtK,IACzBjE,KAAKmM,cAAcZ,EAAUtH,EAAG+H,GAKjB,UAAXvC,IACFzJ,KAAK6K,iBAAmB/B,GAAmB7E,IAK7CjE,KAAKiO,qBAAqB,EAY5B,IAAK,IAAIpF,EAAI,EAAGA,EAAImB,EAAK9Q,SAAU2P,EAAG,CACpC,IACI2F,EADU3F,EAAI,IAAMmB,EAAK9Q,OACGqV,EAAoBF,EAAkB5E,GAAUK,GAAWE,EAAKnB,EAAI,IAAIY,QACxGzJ,KAAKyO,YAAYzE,EAAKnB,GAAI2F,EAAiB/E,EAAQuC,EAAOnD,EAC5D,KAMF,QAAQ4F,eAAc,CACpB1E,EACAwB,EACA9B,EACA4B,EACAC,KAGAtL,KAAK0K,WAAWX,EAAc,IAAMN,GAAU8B,EAK9C,IACImD,EADAtC,GAFJrC,EAAcA,EAAYlH,QAAQ,OAAQ,MAEfQ,MAAM,KAKjC,GAAI+I,EAASlT,OAAS,EAEpB,YADA8G,KAAKoO,cAAcrE,EAAaqC,EAAUb,EAAU9B,GAItDiF,EAAO5E,GAAWC,EAAaN,GAI/BzJ,KAAKyK,WAAWiE,EAAKlV,KAAOwG,KAAKyK,WAAWiE,EAAKlV,MAAQ,GAGzD,MAAMmV,EAAY,CAAE5S,KAAM2S,EAAKjF,OAAQiC,SAAS,EAAOC,SAAS,GAChE3L,KAAKoL,YAAYsD,EAAKlV,IAAKkV,EAAKlF,UAAWmF,EAAWtD,EAActB,EAAauB,GAEjF,MAAMsD,EAA6B,CACjCrD,SAAUA,EACV/B,UAAWkF,EAAKlF,UAChBC,OAAQiF,EAAKjF,OACbgC,IAAKJ,EACLC,MAAOA,EACPU,MAAOjC,GAST/J,KAAKyK,WAAWiE,EAAKlV,KAAK6R,EAAe,UAAY,QAAQuD,EAAa,IAM5E,QAAQC,iBAAgB,CAACC,EAAwBvD,EAA6B9B,KAC5E,IAAK,IAAIZ,EAAI,EAAGA,EAAIiG,EAAa5V,SAAU2P,EACzC7I,KAAKyO,YAAYK,EAAajG,GAAI0C,EAAU9B,EAC9C,IAYF3I,GAAAA,KAAAA,QAAO,CAACkJ,EAAyBuB,EAA6B9B,KAC5DO,EAAOA,aAAgBhE,MAAQgE,EAAO,CAACA,GACvChK,KAAK6O,cAAc7E,EAAMuB,EAAU9B,GAC5BsF,QAgBTC,GAAAA,KAAAA,UAAS,CAAChF,EAAyBP,IAC1BzJ,KAAKc,KAAKkJ,GAAM,WAAa,GAAGP,KAKzCwF,GAAAA,KAAAA,cAAa,CAACjF,EAAyBuB,EAA6B9B,KAGlE,GAFAzJ,KAAKc,KAAKkJ,EAAMuB,EAAU9B,GAEtBO,aAAgBhE,MAClB,IAAK,IAAI6C,EAAI,EAAGA,EAAImB,EAAK9Q,OAAQ2P,IAC/B7I,KAAKgL,iBAAiBhB,EAAKnB,KAAM,OAKrC7I,KAAKgL,iBAAiBhB,IAAQ,CAAI,IAKpCkF,GAAAA,KAAAA,gBAAe,CAAClF,EAAyBP,KAGvC,GAFAzJ,KAAKgP,OAAOhF,EAAMP,GAEdO,aAAgBhE,MAClB,IAAK,IAAI6C,EAAI,EAAGA,EAAImB,EAAK9Q,OAAQ2P,IAC/B7I,KAAKgL,iBAAiBhB,EAAKnB,KAAM,OAKrC7I,KAAKgL,iBAAiBhB,IAAQ,CAAK,IAMrCmF,GAAAA,KAAAA,WAAU,CAACnF,EAAcP,KACvB,IAAIsF,EAAO/O,KAIX,OAHI+O,EAAKrE,WAAWV,EAAO,IAAMP,IAC/BsF,EAAKrE,WAAWV,EAAO,IAAMP,GAAQ,CAAC,EAAGO,GAEpC+E,CAAAA,IAQTK,GAAAA,KAAAA,SAAQ,KACNpP,KAAKyK,WAAa,CAAC,EACnBzK,KAAK0K,WAAa,CAAC,EACZ1K,QAMTuM,GAAAA,KAAAA,gBAAe,CAACtI,EAAUkG,EAAsB6B,EAAeI,KAE7D,GAAIpM,KAAKgL,iBAAiBgB,IAAWI,GAAYpM,KAAKgL,iBAAiBoB,GACrE,OAAO,EAIT,IAAK,IAAMjC,EAAQ3V,UAAY,KAAK6a,QAAQ,gBAAkB,EAC5D,OAAO,EAGT,GAAInF,GAAUC,EAASnK,KAAK/I,QAC1B,OAAO,EAST,GAAI,iBAAkBgN,GAA+B,mBAAnBA,EAAEqL,aAA6B,CAE/D,IAAIC,EAAqBtL,EAAEqL,eAAe,GACtCC,IAAuBtL,EAAEhN,QAAUsY,aAA8BjD,cACnEnC,EAAUoF,EAEd,CAGA,OAAOC,QACe,UAApBrF,EAAQsF,SACc,WAApBtF,EAAQsF,SACY,aAApBtF,EAAQsF,SACP,sBAAuBtF,GAAWA,EAAQuF,kBAAkB,IAOnE5B,GAAAA,KAAAA,aAAoC,IAAI6B,IAC/B3P,KAAK4M,cAAc+C,KAM5BC,GAAAA,KAAAA,eAAeC,IACb,IAAK,IAAIrW,KAAOqW,EACVA,EAAOjG,eAAepQ,KACxBqO,GAAIrO,GAAOqW,EAAOrW,IAGtBoP,GAAc,IAAI,IAjiBlB5I,KAAK/I,OAASuT,EAEdxK,KAAK/I,OAAO6Y,iBAAiB,YAAa/G,IACpCA,aAAiB4E,eACnB3N,KAAKyN,gBAAgB1E,EACvB,IAEF/I,KAAK/I,OAAO6Y,iBAAiB,WAAY/G,IACnCA,aAAiB4E,eACnB3N,KAAKyN,gBAAgB1E,EACvB,IAEF/I,KAAK/I,OAAO6Y,iBAAiB,SAAU/G,IACjCA,aAAiB4E,eACnB3N,KAAKyN,gBAAgB1E,EACvB,GAEJ,GCjdqCsB,UAchC,MAAM0F,GAGXC,UAAAA,CAAWC,GACT1F,GAAUzJ,KACRmP,EAAKzW,KACJ0W,IACCA,EAAI1D,iBACJ0D,EAAIxD,kBACJwD,EAAIzD,aAAc,EAClBwD,EAAKE,WAAW,GAElB,WAEFnQ,KAAKoQ,OAAO7M,KAAK0M,EACnB,CAEAI,SAAAA,GACErQ,KAAKoQ,OAAOpN,SAASiN,IACnB1F,GAAUyE,OAAOiB,EAAKzW,IAAKyW,EAAKlU,KAAK,IAEvCiE,KAAKoQ,OAAS,EAChB,C,4HArBA,MAAQA,SAA2B,G,qdCPrC,MAAME,IAAYC,EAAAA,EAAAA,gBAEX,SAASC,GAAuBC,GACrC,MAAMC,EAAc,IAAIX,GACxB,IAAIY,EAA6B,KAEjC,MAAMC,EAA6BN,GAAUO,UAAUC,EAAAA,wBAAyB/H,IACzC,iBAA1BA,EAAMgI,QAAQC,UACvBL,EAAc5H,EAAMgI,QAAQC,QAC9B,IAGF,SAASC,EAAiBR,EAAmBS,GAC3C,MAAO,KACL,MAAMC,EAAWtY,EAAAA,GAAWuY,WAAWX,GAAQY,GAAMA,EAAEpY,MAAMO,MAAQmX,GAAeU,EAAEC,WAClFH,GAAYA,aAAoBI,EAAAA,IAClCL,EAAGC,EAEL,CAEJ,CAmGA,OArFAT,EAAYV,WAAW,CACrBxW,IAAK,MACL2W,UAAWc,EAAiBR,EAAOe,MAIrCd,EAAYV,WAAW,CACrBxW,IAAK,MACL2W,UApBF,SAAuBM,EAAmBS,GACxC,MAAO,KACarY,EAAAA,GAAW4Y,eAAehB,GAAQY,GAAMA,aAAaE,EAAAA,IAAYF,EAAEC,WAC3EtO,SAASmO,IACbA,GAAYA,aAAoBI,EAAAA,IAClCL,EAAGC,EACL,GACA,CAEN,CAWaO,CAAcjB,EAAOe,MAIlCd,EAAYV,WAAW,CACrBxW,IAAK,MACL2W,UAAWc,EAAiBR,EAAAA,W,MAAO,cAAOU,GACxC,MAAMQ,GAAMC,EAAAA,GAAAA,IAAeT,GACvBQ,GACFE,EAAAA,gBAAgBtO,KAAKoO,EAEzB,I,gBAL0CR,G,gCAAdV,MAS9BC,EAAYV,WAAW,CACrBxW,IAAK,MACL2W,UAAW,MAgIR,SAAsC2B,GAC3C,MAAMC,EAAY,OAAgBC,sBAEjCrX,OAAeqX,sBAAwBF,CAO1C,CAxIMG,CADkBpZ,EAAAA,GAAWqZ,aAAazB,IAE1CH,GAAU6B,QAAQ,IAAIC,GAAgB,IAK1C1B,EAAYV,WAAW,CACrBxW,IAAK,MACL2W,UAAW,KACT,MAAMpH,EAAQ,IAAIsJ,GAAe,CAAEC,WAAW,IAC9C7B,EAAM8B,aAAaxJ,GACnBuH,GAAU6B,QAAQpJ,EAAM,IAK5B2H,EAAYV,WAAW,CACrBxW,IAAK,MACL2W,UAAW,IAAMtX,EAAAA,GAAWqZ,aAAazB,GAAO+B,cAIlD9B,EAAYV,WAAW,CACrBxW,IAAK,MACL2W,UAAW,KACTsC,GAAchC,EAAM,IAKxBC,EAAYV,WAAW,CACrBxW,IAAK,SACL2W,UAAW,KACTsC,GAAchC,EAAM,IAKxBC,EAAYV,WAAW,CACrBxW,IAAK,MACL2W,UAAW,KACT,MAAMuC,GAAaC,EAAAA,EAAAA,IAAclC,GACjCiC,SAAAA,EAAYE,YAAY,IAI5BlC,EAAYV,WAAW,CACrBxW,IAAK,SACL2W,UAAW,KACT0C,GAAqBpC,EAAO,OAAO,IAGvCC,EAAYV,WAAW,CACrBxW,IAAK,UACL2W,UAAW,KACT0C,GAAqBpC,EAAO,QAAQ,IAGjC,KACLC,EAAYL,YACZO,EAA2BkC,aAAa,CAE5C,CAEA,SAASL,GAAchC,GACrB,MAAMiC,GAAaC,EAAAA,EAAAA,IAAclC,GACjCiC,SAAAA,EAAYK,QACd,CAEA,SAASF,GAAqBpC,EAAmBuC,GAC/C,MAAMN,GAAaC,EAAAA,EAAAA,IAAclC,GAE5BiC,IAIa,SAAdM,GACFN,EAAWO,iBAEK,UAAdD,GACFN,EAAWQ,gBAEf,CAEO,SAAS1B,GAAqBL,GACnC,MAAM9O,EAAU8O,EAASlY,MAAMoJ,QAUjC,IAA0B8Q,EACI,OADJA,EATH9Q,IAU4C,iBAAtB8Q,GAAkC,WAAYA,GAVnB,kBAA9B9Q,EAAQ+Q,OAAOC,YACrDlC,EAASmC,gBAAgB,CACvBF,OAAQ,CACNC,YAAYhR,EAAQ+Q,OAAOC,aAInC,CAQO,MAAMjB,WAAsBmB,EAAAA,cACjC,GADWnB,GACJrW,OAAO,aAYT,MAAMsW,WAAuBmB,EAAAA,qB,SA2BdC,K,OAAAA,GAAf,gBACL,MAAMC,QAAYhL,UAAUiL,UAAUC,WACtC,IAAIC,EAEJ,IACEA,EAAehQ,KAAKiQ,MAAMJ,GAC1B,MAAM3M,GAAQgN,EAAAA,GAAAA,IAAgBF,GAC9B,GAAI9M,EACF,MAAO,CAAEiN,SAAS,EAAOjN,QAE7B,CAAE,MAAO9C,GAAI,CACb,MAAO,CAAE8C,MAAO2M,EAAKM,SAAS,EAChC,KAZsBP,MAAAA,KAAAA,U,CA1BpB,GADWpB,GACJtW,OAAO,c,sECpLT,MAAMkY,GAAe,KAC1B,MAAM7f,GAASC,EAAAA,EAAAA,YAAWC,IACpBoB,GAAQwe,EAAAA,EAAAA,aACd,OACE,kBAAC3f,MAAAA,CAAIC,UAAWJ,EAAOmC,MACrB,kBAAChC,MAAAA,CAAIC,UAAWJ,EAAO+f,kBACrB,kBAACC,GAAAA,EAAGA,CACFC,KACE3e,EAAM4e,OACF,gEAKV,kBAAC/f,MAAAA,CAAIC,UAAWJ,EAAO+D,MACrB,kBAACoc,KAAAA,CAAG/f,UAAWJ,EAAOiB,OAAO,qCAE7B,kBAAC0H,IAAAA,KAAE,qDAED,kBAAC3F,KAAAA,MAAK,QACA,IACN,kBAACJ,IAAAA,CAAExC,UAAW,gBAAiB0C,KAAMsd,EAAAA,aAAaC,cAAc,iCAAiC,mBAE5F,IAAI,iBAIX,kBAACrd,KAAAA,MAED,kBAAC2F,IAAAA,KAAE,QACK,IACN,kBAAC/F,IAAAA,CACCE,KAAM,+EACND,OAAQ,SACRzC,UAAW,gBACX2C,IAAI,cACL,QAEI,IAAI,uBAQb7C,GAAaoB,IACV,CACLye,kBAAkBxe,EAAAA,EAAAA,KAAI,CACpBC,QAAS,OACTC,eAAgB,SAChBa,OAAQ,SACRsI,MAAO,QACP0V,OAAQ,QACRlZ,QAAS9F,EAAMmC,QAAQ,GACvB,CAACnC,EAAMoI,YAAY6W,GAAG,OAAQ,CAC5B3c,UAAW,WACXgH,MAAO,QACP0V,OAAQ,OACRlZ,QAAS9F,EAAMmC,QAAQ,IAEzB,CAACnC,EAAMoI,YAAY6W,GAAG,OAAQ,CAC5B3c,UAAW,WACXgH,MAAO,QACP0V,OAAQ,OACRlZ,QAAS9F,EAAMmC,QAAQ,MAI3BM,MAAMxC,EAAAA,EAAAA,KAAI,CACRC,QAAS,OACTC,eAAgB,SAChBoH,WAAY,SACZe,cAAe,WAEjB3I,OAAOM,EAAAA,EAAAA,KAAI,CACTif,aAAc,WAEhBre,MAAMZ,EAAAA,EAAAA,KAAI,CACR,CAACD,EAAMoI,YAAY6W,GAAG,OAAQ,CAC5Bje,OAAQ,sBACRsH,cAAe,OAEjBxC,QAAS,OACT9E,OAAQ,mBACRd,QAAS,OACTqH,WAAY,SACZe,cAAe,SACf6W,UAAW,a,k4BCWV,MAAMC,GAAyB,sBAa/B,MAAMxX,WAAmB5E,EAAAA,GA6FvBmH,UAAAA,GACL,MAAMkV,EAAwC,CAAC,EAC/C/U,KAAKgV,uB,IAOwC,GAJtBnc,EAAAA,GAAWoc,iBAAiBjV,KAAM8U,GAAwBI,GAAAA,GAClExV,SAAS,CAAEyV,QAAQ,IAE7BnV,KAAK/G,MAAMmI,gBACd2T,EAAY3T,aAoUlB,SAAyBgU,GAEvB,IADarV,EAAAA,EAAAA,QACAK,EAAAA,GAAUC,QACrB,OAAO,IAAIgV,EAAAA,EAAsB,CAAC,GAGpC,OAAO,IAAIC,EAAAA,GAAa,CACtBF,kBAEJ,CA7UiCG,CAAqC,QAArB,EAAAvV,KAAK/G,MAAMuc,kBAAX,eAAuBnO,OAAOoO,iBAE3EzV,KAAK0V,kBACL1V,KAAKN,SAASqV,GAEd/U,KAAK2V,eAAe3V,KAAK/G,OAAO2c,EAAAA,EAAAA,IAAoB5V,OACpDA,KAAK6V,0BAAyBC,EAAAA,EAAAA,IAAkB9V,OAAO+V,EAAAA,EAAAA,IAA2BC,EAAAA,KAClFhW,KAAK6V,0BAAyBI,EAAAA,EAAAA,IAAkBjW,OAAO+V,EAAAA,EAAAA,IAA2BnT,EAAAA,KAElF5C,KAAKkW,MAAMC,IACTnW,KAAKoW,kBAAkBC,IACrBrW,KAAK2V,eAAeU,GAAUT,EAAAA,EAAAA,IAAoB5V,MAAM,KAI5D,MAAMZ,EAAYvG,EAAAA,GAAWqZ,aAAalS,MAE1CA,KAAKkW,MAAMC,IAAI/W,EAAUgX,iBAAiBpW,KAAKsW,iBAAiBlX,KAChEY,KAAKkW,MAAMC,IAAInW,KAAKuW,iBAAiBlE,GAAgBrS,KAAKwW,4BAE1D,MAAMC,GAAeX,EAAAA,EAAAA,IAAkB9V,MAAM/G,MAAM6F,QAC7C4X,GAAkBC,EAAAA,EAAAA,IAAoB3W,MAAM/G,MAAM6F,QAElD8X,GAA4BC,EAAAA,EAAAA,IAA6B7W,MAG/D4W,EAA0BE,cAAc,IAAIJ,KAAoBD,IAGhEzW,KAAKkW,MAAMC,IAAIS,EAA0BR,iBAAiBpW,KAAK+W,oCAE/D,MAAMC,EAAmBxG,GAAuBxQ,MAEhD,MAAO,KACLgX,GAAkB,CAEtB,CAeQtB,eAAAA,GACN1V,KAAKiX,oBACP,CAEQA,kBAAAA,GACN,MAAMC,GAAYC,EAAAA,EAAAA,IAAkBnX,MAEpCkX,EAAUE,cAAgB,KAAMC,EAAAA,GAAAA,IAAiBH,GAEjDA,EAAUxX,SAAS,CACjB4X,mBAAoB1R,GACpB2R,qBAAsBrT,IAE1B,CAmCA,iBAAyB9E,GACvB,MAAO,CAACiX,EAA+BmB,KACrC,MAAM,SAAEC,GAAaC,EAAAA,OAAOjU,KAC5B,GAAIgU,aAAAA,EAAAA,EAAUE,SACZ,I,IACkDF,EAAhD,MAAMG,EAAcC,EAAAA,UAAUC,kBAAoC,QAAlBL,EAAAA,aAAAA,EAAAA,EAAUE,gBAAVF,IAAAA,EAAAA,EAAsB,IACtE,IAAKG,EACH,OAEF,MAAMG,EAAoB1B,EAASpT,MAAM+U,GAAGC,KAAK5B,EAASpT,MAAMiV,KAAM,WACtE,GAAIH,EAAoBH,EAAa,CAEnC,GAAIG,GADiBP,EAAUvU,MAAM+U,GAAGC,KAAKT,EAAUvU,MAAMiV,KAAM,WAEjE9Y,EAAUM,SAAS,CACjBuD,MAAOuU,EAAUvU,MACjBiV,KAAMV,EAAUU,KAChBF,GAAIR,EAAUQ,SAEX,CACL,MAAMG,EAAe,IAAIC,EAAAA,GAAeC,EAAAA,IACxCjZ,EAAUM,SAAS,CACjBuD,MAAOkV,EAAalf,MAAMgK,MAC1BiV,KAAMC,EAAalf,MAAMif,KACzBF,GAAIG,EAAalf,MAAM+e,IAE3B,EAEkBzH,EAAAA,EAAAA,gBACR4B,QAAQ,CAChBpW,KAAMuc,EAAAA,UAAUC,aAAa7gB,KAC7BqZ,QAAS,CAAC,oFAGZ3U,EAAAA,EAAAA,IAAqB,MAAO,oBAAqB,CAC/Coc,2BAA4BT,EAC5BU,wBAAyBb,GAE7B,CACF,CAAE,MAAO3T,GACP2D,QAAQ5F,MAAMiC,EAChB,CACF,CAEJ,CAEQ+Q,oBAAAA,GACN,MAAM0D,GAAiBzC,EAAAA,EAAAA,IAAkBjW,MACnC2Y,GAAyB9B,EAAAA,EAAAA,IAA6B7W,MAE5D2Y,EAAuBvB,cAAgB,KAAMC,EAAAA,GAAAA,IAAiBsB,GAE9DD,EAAehZ,SAAS,CACtB6X,qBAAsBvX,KAAK4Y,6BAC3BtB,mBAAoBtX,KAAK6Y,6BAG3BF,EAAuBjZ,SAAS,CAC9B4X,mBAAoBtX,KAAK8Y,mCACzBvB,qBAAsBvX,KAAK+Y,sCAE/B,CAKA,mCACE,MAAO,CAAC3f,EAAgC4f,KAEtC,MAAMC,GAActC,EAAAA,EAAAA,IAAoB3W,MAClCkZ,GAAWpD,EAAAA,EAAAA,IAAkB9V,MAE7BmZ,GAA2BC,EAAAA,GAAAA,GAA6B1S,EAAAA,IAExDgQ,EAAkBuC,EAAYhgB,MAAM6F,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQwf,IACpEvC,EAAeyC,EAASjgB,MAAM6F,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQwf,IAC9DK,EAAqBrZ,KAAKsZ,sBAAsBtD,EAAAA,GAAYS,GAC5D8C,EAAsBvZ,KAAKsZ,sBAAsBE,EAAAA,GAAc9C,GAC/DlV,EAAO2X,EACVtW,QAAQ4W,EAAAA,GAAqBJ,GAC7BxW,QAAQ6W,EAAAA,GAAuBH,GAGlC,OAAOrT,GAAsB,CAC3B1E,KAHmB3I,EAAAA,GAAW8gB,YAAY3Z,KAAMwB,GAIhDC,SAAUzB,KACVZ,UAAWvG,EAAAA,GAAWqZ,aAAalS,MAAM/G,MAAMgK,MAC/CvB,aAAcgF,EAAAA,IACd,CAEN,CAKA,qCACE,MAAO,CAACtN,EAAgCD,KACtC,MAAMggB,GAA2BC,EAAAA,GAAAA,GAA6B1S,EAAAA,IACxDuS,GAActC,EAAAA,EAAAA,IAAoB3W,MAClCkZ,GAAWpD,EAAAA,EAAAA,IAAkB9V,MAE7B0W,EAAkBuC,EAAYhgB,MAAM6F,QAAQ3F,QAC/CsL,GAAMA,EAAEjL,MAAQL,EAAOK,MAAOkL,EAAAA,GAAAA,IAAoBD,EAAErB,YAEjDqT,EAAeyC,EAASjgB,MAAM6F,QAAQ3F,QACzCsL,GAAMA,EAAEjL,MAAQL,EAAOK,MAAOkL,EAAAA,GAAAA,IAAoBD,EAAErB,YAGjDiW,EAAqBrZ,KAAKsZ,sBAAsBtD,EAAAA,GAAYS,GAC5D8C,EAAsBvZ,KAAKsZ,sBAAsBE,EAAAA,GAAc9C,GAE/DlV,EAAO2X,EACVtW,QAAQ4W,EAAAA,GAAqBJ,GAC7BxW,QAAQ6W,EAAAA,GAAuBH,GAC5BK,EAAe/gB,EAAAA,GAAW8gB,YAAY3Z,KAAMwB,GAElD,OAAOD,GACLpI,EACAC,EACAwgB,EACA5Z,KACAnH,EAAAA,GAAWqZ,aAAalS,MAAM/G,MAAMgK,MACpCyD,EAAAA,GAAuBA,CAG7B,CAKA,2BACE,MAAO,CAACtN,EAAgC4f,KAEtC,MAAMla,EAAU1F,EAASH,MAAM6F,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQwf,IACzDK,EAAqBrZ,KAAKsZ,sBAAsB1W,EAAAA,GAAY9D,GAE5D0C,GAD2B4X,EAAAA,GAAAA,GAA6BxW,EAAAA,IACxBC,QAAQ4W,EAAAA,GAAqBJ,GAEnE,OAAOnT,GAAsB,CAC3B1E,KAFmB3I,EAAAA,GAAW8gB,YAAY3Z,KAAMwB,GAGhDC,SAAUzB,KACVZ,UAAWvG,EAAAA,GAAWqZ,aAAalS,MAAM/G,MAAMgK,MAC/CvB,aAAckB,EAAAA,IACd,CAEN,CAKA,6BACE,MAAO,CAACxJ,EAAgCD,KAEtC,MAAM2F,EAAU1F,EAASH,MAAM6F,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQL,EAAOK,KAAOiL,EAAErB,WAAa6B,GAAAA,GAASC,QAC/FmU,EAAqBrZ,KAAKsZ,sBAAsB1W,EAAAA,GAAY9D,GAE5D0C,GAD2B4X,EAAAA,GAAAA,GAA6BxW,EAAAA,IACxBC,QAAQ4W,EAAAA,GAAqBJ,GAC7DO,EAAe/gB,EAAAA,GAAW8gB,YAAY3Z,KAAMwB,GAElD,OAAOD,GACLpI,EACAC,EACAwgB,EACA5Z,KACAnH,EAAAA,GAAWqZ,aAAalS,MAAM/G,MAAMgK,MACpCL,EAAAA,GAAUA,CAGhB,CAEQ0W,qBAAAA,CACN5X,EACA5C,GAEA,GAAI4C,IAAiBsU,EAAAA,GACnB,OAAO6D,EAAAA,EAAAA,IAAwB/a,GAC1B,GAAI4C,IAAiB8X,EAAAA,GAC1B,OAAOM,EAAAA,EAAAA,IAA2Bhb,GAC7B,GAAI4C,IAAiBkB,EAAAA,GAC1B,OAAOkX,EAAAA,EAAAA,IAA2Bhb,GAC7B,CACL,MAAMkD,EAAQ,IAAIC,MAAM,yEAExB,MADAZ,EAAAA,EAAOW,MAAMA,GACPA,CACR,CACF,CAQA,yBAAiC5I,EAAgC2gB,GAC/D,MAAMC,EAAWnI,EAAAA,gBAAgBoI,cAKV,OAJR,IAAIC,gBAAgBF,EAASG,QACdtY,IAAIkY,IAIhC3gB,EAASsG,SAAS,CAAEZ,QAAS,IAEjC,CAEQ6W,cAAAA,CAAeU,EAA2B+D,G,IACN/D,EAA1C,MAAMgE,GAAeC,EAAAA,GAAAA,GAAsC,QAAjBjE,EAAAA,EAASxa,gBAATwa,IAAAA,EAAAA,EAAqB,IAC/D+D,EAAiBG,cAAcF,EACjC,CAEAG,WAAAA,GACE,MAAO,CACL3e,SAAUgI,KAAKC,UAAU9D,KAAK/G,MAAM4C,UAExC,CAEA4e,aAAAA,CAActY,GACZ,MAAM4S,EAAwC,CAAC,EAE3C5S,EAAOtG,UAAuC,iBAApBsG,EAAOtG,WACnCkZ,EAAYlZ,SAAWgI,KAAKiQ,MAAM3R,EAAOtG,WAG3CmE,KAAKN,SAASqV,EAChB,CApaA,YAAmB9b,G,MAEfyhB,EADF,MAAM,eAAEC,EAAc,MAAEC,GAib5B,SAAwBC,EAA8BC,GACpD,MAAMC,EAAgB,IAAIC,EAAAA,GAAqB,CAC7CtjB,KAAMujB,EAAAA,GACN7W,WAAY8W,EAAAA,GACZzhB,OAAQ,WACRoE,MAAO,SACPsd,kBAAkB,EAClBrc,QAASgc,QAAAA,EAAkB,GAC3BM,kBAAmBC,EAAAA,GACnBC,KAAMC,EAAAA,GAAaC,SACnBhiB,IAAK,uBACLiiB,iBAAkBC,EAAAA,KAGpBX,EAAc3D,cAAgB,WAC5B,OAAOuE,GAAAA,EACT,EAEA,MAAMC,EAAiB,IAAIZ,EAAAA,GAAqB,CAC9CtjB,KAAMse,EAAAA,GACNnY,MAAO,kBACPge,UAAW,SACXpiB,OAAQ,WACR2hB,kBAAmBvB,EAAAA,GACnByB,KAAMC,EAAAA,GAAaO,aACnBX,kBAAkB,IAGpBS,EAAexE,cAAgB,IACtBuE,GAAAA,GAGT,MAAMI,EAAmB,IAAIf,EAAAA,GAAqB,CAChDtjB,KAAM8hB,EAAAA,GACN3b,MAAO,WACPge,UAAW,SACXpiB,OAAQ,WACR2hB,kBAAoBtc,IAAqCgb,EAAAA,EAAAA,IAA2Bhb,GACpFwc,KAAMC,EAAAA,GAAaO,aACnBX,kBAAkB,IAGpBY,EAAiB3E,cAAgB,IACxBuE,GAAAA,GAST,MAAM/E,EAA4B,IAAIoE,EAAAA,GAAqB,CACzDtjB,KAAMgP,EAAAA,GACN7I,MAAO,SACPge,UAAW,SACXpiB,OAAQ,WACR6hB,KAAMC,EAAAA,GAAaO,aACnBX,kBAAkB,EAClBM,iBAAkBO,EAAAA,GAClBC,aAAa,IAGTvD,EAAiB,IAAIsC,EAAAA,GAAqB,CAC9CtjB,KAAMkL,EAAAA,GACN/E,MAAO,eACPge,UAAW,SACXpiB,OAAQ,WACR2hB,kBAAmBc,EAAAA,GACnBZ,KAAMC,EAAAA,GAAaO,aACnBK,6BAA6B,IAGzBC,EAAsB,IAAIpB,EAAAA,GAAqB,CACnDtjB,KAAM2kB,EAAAA,GACNf,KAAMC,EAAAA,GAAaO,aACnBxE,mBAAoB,IAAM/P,QAAQC,QAAQ,CAAE3E,SAAS,EAAMV,OAAQ,KACnEoV,qBAAsB,IAAMhQ,QAAQC,QAAQ,CAAE3E,SAAS,EAAMV,OAAQ,KACrEiZ,kBAAmBkB,EAAAA,GACnB7iB,OAAQ,eAGV2iB,EAAoBhF,cAAgB,IAC3BmF,GAAAA,GAGT,MAAMC,EAAa,IAAIC,EAAAA,GAAmB,CACxC/kB,KAAMglB,EAAAA,GACN7e,MAAO,cACPoF,MAAO4X,EACP8B,SAAU,SAGN/B,EAAQ4B,EAAWpG,kBAAkBC,IACzC,MAAMuG,EAAU,GAAGvG,EAASpT,QAC5BoT,EAASpT,QAAS4Z,EAAAA,EAAAA,IAA+BD,EAAQ,IAG3D,MAAO,CACLjC,eAAgB,IAAImC,EAAAA,GAAiB,CACnC9jB,UAAW,CACTwjB,EACAzB,EACAa,EACAlD,EACAqD,EACAnF,EACA,IAAImG,EAAAA,GAAe,CACjBrlB,KAAMslB,EAAAA,GACN/Z,MAAO,GACPqY,KAAMC,EAAAA,GAAaO,eAErB,IAAId,EAAAA,GAAqB,CACvBtjB,KAAMulB,EAAAA,GACN3B,KAAMC,EAAAA,GAAaO,aACnBV,kBAAmBkB,EAAAA,KAErBF,EAGA,IAAIc,EAAAA,EAAuB,CACzBxlB,KAAMylB,EAAAA,GACNla,MAAOma,EAAAA,GACPnB,aAAa,EACbX,KAAMC,EAAAA,GAAaO,aACnBzZ,QAAS,CAAC,CAAEY,MAAOma,EAAAA,GAAmBvf,MAAOuf,EAAAA,UAInDxC,QAEJ,CApjBsCyC,CACA3C,QAAhCA,GAAAA,EAAAA,EAAAA,aAAAA,IAAAA,EAAAA,EAAsC,oBACtCzhB,EAAM6hB,gBAGFvd,EAA0B,CAC9B,IAAIgC,EAAAA,GAAgB,CAClB/F,IPzGmC,gDO0GnCwZ,UAAW,MACX1c,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI1I,EAA6B,CACrCe,IPrGsB,cOsGtBC,OAAQ,WACRnE,QAAS,CAAC2lB,EAAAA,QAGd,IAAI/F,GAAAA,EAAoB,CACtB1b,IAAKsb,GACLyI,UAAU,OAIhB,IAAI9kB,EAA6B,CAC/Be,IPzHsC,gBO0HtCC,OAAQ,WACRnE,QAAS,CAACkkB,EAAAA,MAEZ,IAAI/gB,EAA6B,CAC/Be,IP5H4B,cO6H5BC,OAAQ,WACRnE,QAAS,CAAC0gB,EAAAA,MAEZ,IAAIvd,EAA6B,CAC/Be,IAAKgG,EACL/F,OAAQ,aACRnE,QAAS,CAAConB,EAAAA,MAEZ,IAAIjkB,EAA6B,CAC/Be,IAAKiG,EACLhG,OAAQ,WACRnE,QAAS,CAACoR,EAAAA,MAEZ,IAAI8W,EAAAA,GAAgB,CAAEhkB,IPxIY,oBOyIlC,IAAIikB,EAAAA,GAAmB,CAAEjkB,IPxIM,kB,IOqJnBP,EACAA,EACFA,EAZe,aAAvB8G,EAAAA,EAAAA,OAAoC2d,EAAAA,OAAOC,eAAeC,8BAC5DrgB,EAASgG,KACP,IAAIsa,EAAAA,EAAa,CACfrkB,IP7I2B,eO8I3BskB,QAAQ,KAKdnd,MAAM,G,uUAAA,EACJod,WAA4B,QAAhB9kB,EAAAA,EAAM8kB,kBAAN9kB,IAAAA,EAAAA,EAAoB,IAAImf,EAAAA,GAAe,CAAC,GACpD4F,WAA4B,QAAhB/kB,EAAAA,EAAM+kB,kBAAN/kB,IAAAA,EAAAA,EAAoB0hB,EAChCpd,SAAwB,QAAdtE,EAAAA,EAAMsE,gBAANtE,IAAAA,EAAAA,EAAkBsE,EAE5B1B,SAAU,IACP5C,GAAAA,CACHkI,KAAM,IAAI1D,EAAY,CAAC,M,OAlE3B,QAAUwgB,WAAW,IAAIC,EAAAA,GAAyBle,KAAM,CAAEgK,KAAM,CAAC,eA2IjE,QAAQ+M,qCAAoC,CAC1CV,EACAmB,KAEA,KAAK2G,EAAAA,GAAAA,GAAe9H,EAASvX,QAAS0Y,aAAAA,EAAAA,EAAW1Y,SAAU,CACzD,MAAM4X,EAAkBL,EAASvX,QAAQ3F,QAAQsL,IAAqC2Z,EAAAA,GAAAA,IAAiB3Z,KACjGgS,EAAeJ,EAASvX,QAAQ3F,QAAQsL,KAAsC2Z,EAAAA,GAAAA,IAAiB3Z,MAErGqR,EAAAA,EAAAA,IAAkB9V,MAAM8W,cAAcL,IACtCE,EAAAA,EAAAA,IAAoB3W,MAAM8W,cAAcJ,EAC1C,KAkBF,QAAQF,4BAAAA,IAA4B,YAClC,MAAM6H,QF3EH,W,OAAe5K,GAAAA,MAAAA,KAAAA,U,CE2EQA,GAE1B,GAAI4K,EAAYrK,QACd,OAGF,MAAM5U,EAAYvG,EAAAA,GAAWqZ,aAAa,GACpC8F,EAAqC,iBAAzBqG,EAAYtX,MAAMiR,GAAkBqG,EAAYtX,MAAMiR,QAAKhiB,EACvEkiB,EAAyC,iBAA3BmG,EAAYtX,MAAMmR,KAAoBmG,EAAYtX,MAAMmR,UAAOliB,EAC7EsoB,EAAWzG,EAAAA,UAAU0G,kBAAkBF,EAAYtX,OAErD3H,GAAakf,EACflf,EAAUM,SAAS,CACjBuD,MAAOqb,EACPtG,KACAE,SAGF7W,EAAAA,EAAOW,MAAM,IAAIC,MAAM,qCAAsC,CAC3D+B,IAAK,oCACLwa,sBAAuBpf,EACvB4Y,GAAIA,QAAAA,EAAM,GACVE,KAAMA,QAAAA,EAAQ,IAGpB,KA5HElY,KAAKkW,MAAMC,IAAIyE,GACf5a,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,QAE/Cye,EAAAA,EAAAA,IAAkBze,MAAM0e,MAAMC,IAC5B3e,KAAKN,SAAS,CAAEif,MAAK,GAEzB,EAEA,GA9EWrhB,GA8EJ5D,aAAY,EAAGf,YACpB,MAAM,KAAEwI,GAASxI,EAAMI,WAGvB,OADcgM,EAAAA,EAAAA,IAAsBpM,GACzBM,MAAMoJ,QAAQnJ,OAIrBiI,EACK,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,IAGzB,kBAACyd,EAAAA,mBAAkBA,CAACzmB,KAAM,eAPxB,kBAAC8b,GAAYA,K,qiCC/KnB,MAAM4K,EAA4B,6BAClC,MAAM3e,UAA4BxH,EAAAA,GAOvCmH,UAAAA,GACEG,KAAK8e,iBAEL9e,KAAKkW,MAAMC,KACTF,EAAAA,EAAAA,IAAkBjW,MAAMuW,iBAAiBwI,EAAAA,IAAgC,KACvE/e,KAAK8e,gBAAgB,IAG3B,CAEOA,cAAAA,GACL,MAAME,GAAY/I,EAAAA,EAAAA,IAAkBjW,MACpCA,KAAKN,SAAS,CACZ2C,QAAS2c,EAAU/lB,MAAM6F,QAAQxF,KAAKH,I,IAC9BA,EAAAA,E,MAD0C,CAChDhB,KAA6B,QAAvBgB,EAAkB,QAAlBA,EAAAA,EAAO+J,mBAAP/J,IAAAA,OAAAA,EAAAA,EAAqB,UAArBA,IAAAA,EAAAA,EAA2BA,EAAO8J,MACxCgc,UAAU,EACVhc,MAAO9J,EAAO8J,MACf,KAEL,CAzBAvC,WAAAA,CAAYzH,GACV0H,MAAM,OAAK1H,GAAAA,CAAOimB,WAAW,EAAOC,SAAS,EAAO3lB,IAAKqlB,EAA2Bf,QAAQ,KA0B9FzZ,EAAAA,KAAAA,gBAAe,K,IAGM2a,EAAAA,EAFnBhf,KAAKN,SAAS,CAAEwf,WAAW,IAC3B,MAAMF,GAAY/I,EAAAA,EAAAA,IAAkBjW,M,IAGlCgf,EAFF,MAAMI,EAAaJ,SAAgB,QAAhBA,EAAAA,EAAW/lB,aAAX+lB,IAAAA,GAAsC,QAAtCA,EAAAA,EAAkBzH,4BAAlByH,IAAAA,OAAAA,EAAAA,EAAAA,KAAAA,EACjBA,EAC0B,QAA1BA,EAAAA,EAAU/lB,MAAM6F,QAAQ,UAAxBkgB,IAAAA,EAAAA,EAA8B,CAAExlB,IAAKiN,EAAAA,KAEvC2Y,SAAAA,EAAYV,MAAMW,IACZrZ,MAAMrD,QAAQ0c,EAASld,SACzBnC,KAAKN,SAAS,CACZwf,WAAW,EACX7c,QAASgd,EAASld,OAAO7I,KAAK2J,I,IAGnBA,EAFT,MAAO,CACL9K,KAAM8K,EAAM9K,KACZ8K,MAAkB,QAAXA,EAAAA,EAAMA,aAANA,IAAAA,EAAAA,EAAeA,EAAM9K,KAC5B8mB,SAAUD,EAAU/lB,MAAM6F,QAAQ6F,MAAMxL,GAAWA,EAAO8J,QAAUA,EAAM9K,OAC3E,KAGP,GACA,IAGJ2e,EAAAA,KAAAA,iBAAgB,CAACwI,EAAsBC,K,IAEf,EADtB,MAAMP,GAAY/I,EAAAA,EAAAA,IAAkBjW,MAC9Bwf,EAAkC,QAAlB,EAAAxf,KAAK/G,MAAMoJ,eAAX,eAAoBlJ,QAAQsmB,GAAQA,EAAIR,W,IAG5DO,EADFR,EAAUlI,cAKR,QAJA0I,EAAAA,aAAAA,EAAAA,EAAelmB,KAAKomB,IAAe,CACjClmB,IAAKiN,EAAAA,GACLrD,SAAU6B,EAAAA,GAASC,MACnBjC,MAAOyc,EAAUvnB,gBAHnBqnB,IAAAA,EAAAA,EAIO,GACP,CAAEF,cAAaC,gBAAa,IAIhCI,EAAAA,KAAAA,mBAAmBtd,I,IAKN,GAHXnG,EAAAA,EAAAA,MAEA8D,KAAKN,SAAS,CACZ2C,QAA2B,QAAlB,EAAArC,KAAK/G,MAAMoJ,eAAX,eAAoB/I,KAAK2J,GAC5BZ,EAAQsC,MAAM8a,GAAQA,EAAIxc,QAAUA,EAAMA,QACrC,OAAKA,GAAAA,CAAOgc,UAAU,IAExB,OAAKhc,GAAAA,CAAOgc,UAAU,QAI5Bjf,KAAK/G,MAAM6kB,OAGd9d,KAAK8W,eAAc,GAFnB9W,KAAK8W,eAAc,EAGrB,IAGF8I,EAAAA,KAAAA,cAAc9B,IACZ9d,KAAKN,SAAS,CAAEoe,UAAS,IAG3B+B,EAAAA,KAAAA,eAAc,KACZ7f,KAAK4f,YAAW,GAEhB5f,KAAK8W,eAAc,GAAO,EAAK,IAxF/B9W,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAmIK,SAAS8f,EAAmBre,GACjC,MAAMse,EAAsBlnB,EAAAA,GAAWuY,WAAW3P,GAAWue,GAAQA,aAAe9f,IAChF6f,aAA+B7f,GACjC6f,EAAoBjB,gBAExB,CA9CE,EA/FW5e,EA+FJxG,aAAY,EAAGf,YACpB,MAAM,QAAE0J,EAAO,UAAE6c,EAAS,QAAEC,EAAO,OAAErB,GAAWnlB,EAAMI,WAChD3E,GAASC,EAAAA,EAAAA,YAAWC,GAI1B,OAHkB2hB,EAAAA,EAAAA,IAAkBtd,GAC1BI,WAELomB,EAKH,kBAAC5qB,MAAAA,CAAIU,cAAaC,EAAAA,EAAQ8D,UAAUinB,OAAOC,UAAW1rB,UAAWJ,EAAOmD,SACtE,kBAAC4oB,EAAAA,GAAaA,CAAC1mB,OAAO,WAAWoE,MAAO,eACxC,kBAACuiB,EAAAA,YAAWA,CACVjmB,aAAY,oBACZkmB,OAAQ,kBAAC5oB,EAAAA,KAAIA,CAAC5C,KAAM,KAAM6C,KAAM,WAChC4oB,YAAa,aACb9rB,UAAWJ,EAAOkL,QAClBihB,SAAU5nB,EAAMgnB,gBAChBE,YAAa,IAAMlnB,EAAMknB,cACzBW,WAAY7nB,EAAM0L,aAClBoc,QAAS,IAAM9nB,EAAMinB,YAAW,GAChCc,kBAAkB,EAClB5C,OAAQA,EACRoB,UAAWA,EACXyB,aAAa,EACbC,mBAAmB,EACnBC,mBAAmB,EACnBC,iBAAiB,EACjBC,yBAAyB,EACzBC,qBAAqB,EACrB/d,MAAOZ,aAAAA,EAAAA,EAASlJ,QAAQmK,GAAMA,EAAE2b,WAChC5c,QAASA,aAAAA,EAAAA,EAAS/I,KAAK2nB,IAAS,CAC9Bhe,MAAOge,EAAIhe,MACXpF,MAAOojB,EAAI9oB,YA3BV,I,IAyCb,MAAM7D,EAAY,KAAO,CACvBgL,SAAS3J,EAAAA,EAAAA,KAAI,CACX0B,KAAM,MAERE,SAAS5B,EAAAA,EAAAA,KAAI,CACX0B,KAAM,WACN6pB,WAAY,Y,+sBCzJT,SAASC,GAAmB,QAAEnsB,EAAO,MAAErB,IAC5C,MAAOytB,EAAOC,IAAYtoB,EAAAA,EAAAA,WAAS,GAC7B3E,GAASC,EAAAA,EAAAA,YAAWitB,GAC1B,OACE,oCACE,kBAACC,OAAAA,KACC,kBAAChtB,MAAAA,CAAIC,UAAWJ,EAAOotB,WACrB,kBAACD,OAAAA,KAAK,eACN,kBAACE,EAAAA,WAAUA,CAACzsB,QAASA,EAAS0C,KAAM,QAAS7C,KAAM,KAAMsF,aAAY,wBAEvE,kBAAConB,OAAAA,CAAK/sB,UAAWJ,EAAOstB,cACtB,kBAACC,EAAAA,EAAgBA,E,sUAAAA,CAAAA,CAAAA,EAAKhuB,GAAAA,CAAOytB,MAAOA,EAAOC,SAAUA,EAAUtlB,KAAM,cACpEqlB,GACC,kBAACK,EAAAA,WAAUA,CACTjtB,UAAWJ,EAAOwtB,YAClBC,QAAS,WACThtB,KAAM,KACNsF,aAAY,kBACZnF,QAAS,IAAMqsB,GAAS,GACxB3pB,KAAM,yBAOpB,CAEA,MAAM4pB,EAAuB5rB,IAA0B,CACrD8rB,WAAW7rB,EAAAA,EAAAA,KAAI,CACbC,QAAS,OACTyC,SAAU3C,EAAM4C,WAAWC,UAAUF,SACrCuc,aAAclf,EAAMmC,QAAQ,IAC5BD,IAAKlC,EAAMmC,QAAQ,KAErB6pB,cAAc/rB,EAAAA,EAAAA,KAAI,CAChBC,QAAS,SAEXgsB,aAAajsB,EAAAA,EAAAA,KAAI,CACfgC,WAAYjC,EAAMmC,QAAQ,O,s5BC5CvB,MAAMoI,UAAiCvH,EAAAA,GAkD5CopB,iBAAAA,EAAkB,SAAE1e,IAClB,OAAOA,IAAa2e,EAAAA,GAAaC,eAAiB5e,IAAa2e,EAAAA,GAAaE,aAC9E,CA6EAC,YAAAA,CAAaC,EAAuCC,EAAqCC,GAAY,GAC/FA,GAEFriB,KAAKsiB,yBAAyBH,EAAgBC,GAAc,GAE5DpiB,KAAKuiB,wBAAwBJ,EAAgBC,GAAc,GAAO,IAElEpiB,KAAKsiB,yBAAyBH,EAAgBC,EAElD,C,kBA1IK,YA0CLI,EAAAA,KAAAA,eAAc,CAACve,EAAoCwe,EAAoBtpB,KACvD,UAAV8K,EAAEzK,OAEJ0C,EAAAA,EAAAA,MACA8D,KAAKsiB,yBAAyBnpB,EAAQ,OAAKA,GAAAA,CAAQ8J,MAAOwf,KAC5D,IAUFC,EAAAA,KAAAA,iBAAiBvpB,IACf,IAAIwpB,EAEJ,OAAQxpB,EAAOiK,UACb,KAAK2e,EAAAA,GAAaa,MAChBD,EAAcZ,EAAAA,GAAac,MAC3B,MAEF,KAAKd,EAAAA,GAAaC,cAChBW,EAAcZ,EAAAA,GAAaE,cAC3B,MAEF,KAAKF,EAAAA,GAAac,MAChBF,EAAcZ,EAAAA,GAAaa,MAC3B,MAEF,KAAKb,EAAAA,GAAaE,cAChBU,EAAcZ,EAAAA,GAAaC,cAC3B,MAEF,QACE,MAAM,IAAI/f,MAAM,qBAIpBjC,KAAKkiB,aAAa/oB,EAAQ,OAAKA,GAAAA,CAAQiK,SAAUuf,KAAe,EAAM,IAMxEG,EAAAA,KAAAA,qBAAqB3pB,IACnB,IAAIwpB,EACJ,OAAQxpB,EAAOiK,UACb,KAAK2e,EAAAA,GAAaa,MAChBD,EAAcZ,EAAAA,GAAaC,cAC3B,MAEF,KAAKD,EAAAA,GAAaC,cAChBW,EAAcZ,EAAAA,GAAaa,MAC3B,MAEF,KAAKb,EAAAA,GAAac,MAChBF,EAAcZ,EAAAA,GAAaE,cAC3B,MAEF,KAAKF,EAAAA,GAAaE,cAChBU,EAAcZ,EAAAA,GAAac,MAC3B,MAEF,QACE,MAAM,IAAI5gB,MAAM,qBAIpBjC,KAAKkiB,aAAa/oB,EAAQ,OAAKA,GAAAA,CAAQiK,SAAUuf,KAAe,EAAM,IAMxEI,EAAAA,KAAAA,yBAAyB5pB,IACvB,MAAM6pB,EACJ7pB,EAAOK,MAAQypB,EAAAA,GAAwBD,cACnCC,EAAAA,GAAwBC,gBACxBD,EAAAA,GAAwBD,cAC9BhjB,KAAKkiB,aAAa/oB,EAAQ,OAAKA,GAAAA,CAAQK,IAAKwpB,KAAiB,EAAM,IAoBrEG,EAAAA,KAAAA,iBAAgB,CAAClf,EAAkC9K,KACjD6G,KAAKkiB,aAAa/oB,EAAQ,OAAKA,GAAAA,CAAQ8J,MAAOgB,EAAEhN,OAAOgM,SAAS,EAAK,IAMvEmgB,EAAAA,KAAAA,gBAAgBjqB,KACd+C,EAAAA,EAAAA,MACA,MAAM9C,GAAWiqB,EAAAA,EAAAA,IAAuBrjB,MAClCsjB,EAAelqB,EAASH,MAAM6F,QAAQ3F,QACzCsL,QAAqBzO,IAAfyO,EAAE8e,UAA0B9e,EAAE8e,WAAapqB,EAAOoqB,WAG3DnqB,EAASsG,SAAS,CAChBZ,QAASwkB,GACT,IAMJ,OAAQhB,4BAA2B,CACjCH,EACAC,EACA9C,GAAc,EACdC,GAAe,KAEf,MAAMnmB,GAAWiqB,EAAAA,EAAAA,IAAuBrjB,MAClCsjB,EAAelqB,EAASH,MAAM6F,QAAQ3F,QACzCsL,QAAqBzO,IAAfyO,EAAE8e,UAA0B9e,EAAE8e,WAAapB,EAAeoB,WAGnEnqB,EAAS0d,cACP,CACE,CACEyM,SAAUpB,EAAeoB,SACzB/pB,IAAK4oB,EAAa5oB,IAClB4J,SAAUgf,EAAahf,SACvBH,MAAOmf,EAAanf,UAEnBqgB,GAEL,CAAEhE,cAAaC,kBAGjBnjB,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBknB,mCACpC,CACEC,kBAAmBtB,EAAelf,MAAM/J,OACxCwqB,cAAevB,EAAelf,MAAMoG,cAAchQ,SAAS,SAC3D+J,SAAUgf,EAAahf,SACvB4f,cAAeZ,EAAa5oB,KAC9B,IAOJ,OAAQ+oB,2BAA0BoB,EAAAA,EAAAA,WAChC,CACExB,EACAC,EACA9C,GAAc,EACdC,GAAe,KAEfvf,KAAKsiB,yBAAyBH,EAAgBC,EAAc9C,EAAaC,EAAa,GAExF,K,EAOG,SAASqE,EAAgB9kB,GAC9BA,EAAQ2G,MAAK,CAACzO,EAAG0O,K,IAAe1O,EAAkC0O,E,OAA3CiE,SAAmB,QAAV3S,EAAAA,EAAEusB,gBAAFvsB,IAAAA,EAAAA,EAAc,IAAK,IAAM2S,SAAmB,QAAVjE,EAAAA,EAAE6d,gBAAF7d,IAAAA,EAAAA,EAAc,IAAK,GAAG,GAC1F,CAEA,SAASpR,EAAUoB,GACjB,MAAO,CACLmuB,iBAAiBluB,EAAAA,EAAAA,KAAI,CACnBkI,MAAO,kBACPjI,QAAS,OACTsH,SAAU,OACVtF,IAAK,GAAGlC,EAAMmC,QAAQ,QAASnC,EAAMmC,QAAQ,OAGnD,CAxOE,EADWoI,EACJvG,aAAY,EAAGf,YACpB,MAAMmrB,GAAgBT,EAAAA,EAAAA,IAAuB1qB,IACvC,QAAEmG,GAAYglB,EAAc/qB,WAC5B3E,GAASC,EAAAA,EAAAA,YAAWC,GAG1B,OAFAsvB,EAAgB9kB,GAEXA,EAAQ5F,OAKX,kBAAC3E,MAAAA,CAAIC,UAAWJ,EAAOyvB,iBACpB/kB,EAAQxF,KAAKH,IACZ,MAAMxF,EAAyB,CAC7B8uB,WAAYtpB,EAAO8J,MACnB4f,MAAO1pB,EAAOiK,WAAa2e,EAAAA,GAAac,OAAS1pB,EAAOiK,WAAa2e,EAAAA,GAAaE,cAClFe,cAAe7pB,EAAOK,MAAQypB,EAAAA,GAAwBD,cACtDe,UAAWprB,EAAMmpB,kBAAkB3oB,GACnCqpB,YAAa,CAACve,EAAGwe,IAAe9pB,EAAM6pB,YAAYve,EAAG9K,EAAO8J,MAAO9J,GACnE6qB,aAAc,IAAMrrB,EAAMmqB,kBAAkB3pB,GAC5C+oB,aAAc,CAACO,EAAYJ,IACzB1pB,EAAMupB,aACJ/oB,EACA,OACKA,GAAAA,CACH8J,MAAOwf,IAETJ,GAEJK,cAAe,IAAM/pB,EAAM+pB,cAAcvpB,GACzCgqB,cAAgBlf,GAAMtL,EAAMwqB,cAAclf,EAAG9K,GAC7C4pB,sBAAuB,IAAMpqB,EAAMoqB,sBAAsB5pB,IAE3D,OAAO,kBAACgoB,EAAkBA,CAAC3nB,IAAKL,EAAOoqB,SAAUvuB,QAAS,IAAM2D,EAAMyqB,aAAajqB,GAASxF,MAAOA,G,KA1BhG,IA2BL,G,sPCtCD,MAAMuhB,UAA4Bxc,EAAAA,GASvCmH,UAAAA,GACE,MAAMqX,GAAYC,EAAAA,EAAAA,IAAkBnX,MAC9BikB,EAAoB/M,EAAUje,MAAM6F,QAAQ6F,MAAMF,IAAMC,EAAAA,EAAAA,IAAoBD,EAAErB,YACpFpD,KAAKN,SAAS,CACZ6d,UAAW0G,IAGb/M,EAAUd,kBAAkBC,IAC1B,MAAM4N,EAAoB5N,EAASvX,QAAQ6F,MAAMF,IAAMC,EAAAA,EAAAA,IAAoBD,EAAErB,YAC7EpD,KAAKN,SAAS,CACZ6d,UAAW0G,GACX,GAEN,CArBAvjB,WAAAA,CAAYzH,GACV0H,M,sUAAM,IACD1H,IAqBPirB,EAAAA,KAAAA,WAAU,KACR,MACMC,GADYhN,EAAAA,EAAAA,IAAkBnX,MACH/G,MAAM6F,QAAQslB,MAAM3f,IAAMC,EAAAA,EAAAA,IAAoBD,EAAErB,YAEjF,OAAI+gB,GACKE,EAAAA,EAAAA,IAAsBF,EAAe3qB,IAAK2qB,EAAelhB,OAG3D,EAAE,IA1BTjD,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAoDF,SAAS1L,EAAUoB,GACjB,MAAO,CACL4uB,QAAQ3uB,EAAAA,EAAAA,KAAI,CACV,CAACD,EAAMoI,YAAYC,KAAK,OAAQ,CAC9B/F,UAAW,YAEb,CAACtC,EAAMoI,YAAYC,KAAK,OAAQ,CAC9BmB,UAAWxJ,EAAMmC,QAAQ,GACzBG,UAAW,cAGbA,UAAW,aACXkH,UAAW,SAGjB,CAvCE,EAnCWgW,EAmCJxb,aAAY,EAAGf,YACpB,MAAM,SAAE4kB,EAAQ,OAAEpI,GAAWxc,EAAMI,WAC7B3E,GAASC,EAAAA,EAAAA,YAAWC,GAE1B,IAAe,IAAX6gB,EACF,OAAO,KAGT,MAAM3c,EAAOG,EAAMurB,UAEnB,OACE,kBAACK,EAAAA,WAAUA,CACTtvB,cAAaC,EAAAA,EAAQsvB,MAAMC,OAAOC,eAClCnH,SAAUA,IAAa/kB,EACvB5D,KAAM,UACNJ,UAAWJ,EAAOkwB,OAClBptB,KAAMsB,GACP,e,gQCzDP,MAAMmsB,EAAoD,GAAGC,EAAAA,wCAYtD,MAAM/G,UAAqBnlB,EAAAA,GAChCgI,WAAAA,CAAYzH,GACV,MAAM4rB,EAAerkB,aAAaI,QAAQ+jB,GACpCG,EAASpH,EAAAA,OAAOC,eAAeC,8BAAiD,UAAjBiH,E,IAOjDA,EALpBlkB,M,sUAAM,EACJmd,QAAQ,EACRzb,QAAS,CACP0iB,kBAAmB,CACjBD,OAAQA,SAAAA,EACRD,aAA+B,QAAjBA,EAAiB,SAAjBA,SAAAA,IAAAA,GAAAA,EACdtH,UAAU,KAGXtkB,IAIP,OAAO+rB,mCAAkC,KACvC,MAAMF,GAAU9kB,KAAK/G,MAAMoJ,QAAQ0iB,kBAAkBD,QAErD1oB,EAAAA,EAAAA,IACEC,EAAAA,GAAkB4oB,kBAClB1oB,EAAAA,GAAoB0oB,kBAAkBC,2BACtC,CACEC,QAASL,IAIbtkB,aAAaC,QAAQkkB,EAAmDG,EAAOxf,YAE/EtF,KAAKN,SAAS,CACZ2C,QAAS,CACP0iB,kBAAmB,CACjBD,SACAvH,SAAUvd,KAAK/G,MAAMoJ,QAAQ0iB,kBAAkBxH,SAC/CsH,aAAcC,KAGlB,IAGJ,OAAOM,gBAAgBtH,IACrB9d,KAAKN,SAAS,CAAEoe,UAAS,GA3B3B,EAmFF,SAASxpB,EAAUoB,GACjB,MAAO,CACL2vB,SAAS1vB,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACT4F,QAAS9F,EAAMmC,QAAQ,GACvBmG,cAAe,SACfM,WAAY5I,EAAMwC,OAAOoG,WAAWgnB,QACpC5mB,UAAWhJ,EAAMiJ,QAAQ4mB,GACzBzvB,aAAcJ,EAAMO,MAAMC,OAAOC,QACjCmF,OAAQ,aAAa5F,EAAMwC,OAAOoD,OAAOkqB,OACzChnB,OAAQ,EACRinB,YAAa/vB,EAAMmC,QAAQ,KAE7B6tB,SAAS/vB,EAAAA,EAAAA,KAAI,CACXgwB,WAAYjwB,EAAM4C,WAAWstB,iBAC7BC,cAAenwB,EAAMmC,QAAQ,KAE/BwK,SAAS1M,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACTkwB,oBAAqB,WACrBC,OAAQrwB,EAAMmC,QAAQ,GACtBmuB,UAAWtwB,EAAMmC,QAAQ,GACzBoF,WAAY,WAGlB,CA9EE,EA9CW4gB,EA8CJnkB,aAAY,EAAGf,YACpB,MAAM,OAAEmlB,EAAM,QAAEzb,GAAY1J,EAAMI,WAC5B3E,GAASC,EAAAA,EAAAA,YAAWC,GAEpB2xB,EAAgB,IAElB,kBAAC1xB,MAAAA,CAAIC,UAAWJ,EAAOixB,QAASrwB,QAAUkb,GAAQA,EAAIxD,mBACpD,kBAACnY,MAAAA,CAAIC,UAAWJ,EAAOsxB,SAAS,iBAChC,kBAACnxB,MAAAA,CAAIC,UAAWJ,EAAOiO,SACrB,kBAAC9N,MAAAA,CACCc,MACE,uGAEH,sBAGD,kBAACksB,OAAAA,CACClsB,MACEgN,EAAQ0iB,kBAAkBxH,SACtB,qEAAqE2I,EAAAA,EAA6BC,mBAClG,IAGN,kBAACC,EAAAA,OAAMA,CACLvoB,MAAO,4BACP5I,cAAaC,EAAAA,EAAQsvB,MAAM6B,wBAC3BpjB,MAAOZ,EAAQ0iB,kBAAkBD,OACjCvH,SAAUlb,EAAQ0iB,kBAAkBxH,SACpCgD,SAAU5nB,EAAMqsB,qCAQ5B,OAAI3iB,EAAQ0iB,kBAER,kBAACuB,EAAAA,SAAQA,CAACC,QAASN,EAAeO,UAAU,SAASC,gBAAiB9tB,EAAMysB,cAC1E,kBAACsB,EAAAA,cAAaA,CACZC,KAAK,MACLhyB,QAAQ,SACRmpB,OAAQA,EACR7oB,cAAaC,EAAAA,EAAQsvB,MAAMoC,yBAM5B,uC,wICnFJ,MAAMvO,EAAqB,CAAEH,KAAM,UAAWF,GAAI,OACzD,SAAS6O,EAAiBrR,GACxB,OAAO,IAAIsR,EAAAA,GAAc,CACvB3lB,KAAM,IAAI7D,EAAAA,EAAW,CACnBygB,WAAY,IAAI3F,EAAAA,GAAeC,GAC/B7C,gBAGN,CAGO,SAASuR,IACd,OAAO,IAAIC,EAAAA,GAAa,CAEtB3xB,MAAO,yBACPsc,KAAKsV,EAAAA,EAAAA,IAAY7mB,EAAAA,GAAUC,SAC3B5G,OAAQytB,EAAAA,eAAeC,OACvBC,gBAAiBC,EAAAA,GACjBC,UAAW,GAAGlnB,EAAAA,GAAUC,YACxBknB,SAAW/R,GAAeqR,EAAiBrR,GAC3CgS,WAAY,CACV,CACEF,UAAWG,EAAAA,GAAkBC,KAC7BC,QAAS,CAACnS,EAAYoS,IAAWC,EAAkBrS,EAAYoS,EAAQxnB,EAAAA,GAAUsnB,MACjFI,cAAc,GAEhB,CACER,UAAWG,EAAAA,GAAkBM,OAC7BJ,QAAS,CAACnS,EAAYoS,IAAWC,EAAkBrS,EAAYoS,EAAQxnB,EAAAA,GAAU2nB,SAEnF,CACET,UAAWG,EAAAA,GAAkB5rB,SAC7B8rB,QAAS,CAACnS,EAAYoS,IAAWC,EAAkBrS,EAAYoS,EAAQxnB,EAAAA,GAAUvE,WAEnF,CACEyrB,UAAWG,EAAAA,GAAkB9f,OAC7BggB,QAAS,CAACnS,EAAYoS,IAAWC,EAAkBrS,EAAYoS,EAAQxnB,EAAAA,GAAUuH,SAEnF,CACE2f,UAAWU,EAAAA,GAAwBnqB,MACnC8pB,QAAS,CAACnS,EAAYoS,IAAWK,EAAuBzS,EAAYoS,EAAQM,EAAAA,GAAWrqB,QAEzF,CACEypB,UAAWU,EAAAA,GAAwBxhB,MACnCmhB,QAAS,CAACnS,EAAwBoS,IAAWK,EAAuBzS,EAAYoS,EAAQM,EAAAA,GAAW1hB,QAErG,CACE8gB,UAAW,IACXK,QAAS,IAAMQ,OAIvB,CAGO,SAASA,IACd,OAAO,IAAInB,EAAAA,GAAa,CACtB3xB,MAAO,GACPsc,IAAKyW,EAAAA,QAAQC,UAAUC,EAAAA,QAAiBtyB,GACxCuxB,SAYK,IACL,IAAIT,EAAAA,GAAc,CAChB3lB,KAAM,IAAI5B,EAAAA,GAAgB,CACxByT,UAAW,SACX1c,SAAU,OAfdiyB,qBAAqB,EACrBjB,UAAW,IACXkB,WAAY,CACV,MACEC,EAAAA,EAAAA,KAAiB,IAIzB,CAYO,SAASZ,EACdrS,EACAoS,EACA9nB,GAEA,MAAM,UAAE4oB,EAAS,WAAEC,IAAeC,EAAAA,EAAAA,IAAuBpT,GACzD,OAAO,IAAIwR,EAAAA,GAAa,CACtB3xB,OAAOwzB,EAAAA,EAAAA,IAAsB/oB,GAC7BrG,OAAQytB,EAAAA,eAAeC,OACvBxV,IAAKmX,EAAAA,GAAOhpB,GAAM6oB,EAAYD,GAC9BpB,UAAWG,EAAAA,GAAkB3nB,GAC7BsnB,gBAAiB2B,EAAAA,GACjBC,cAAe,IAAMpB,EACrBL,SAAW/R,GAAeqR,EAAiBrR,IAE/C,CAEO,SAASyS,EACdzS,EACAoS,EACA9nB,GAEA,MAAM,UAAE4oB,EAAS,WAAEC,EAAU,eAAElT,IAAmBmT,EAAAA,EAAAA,IAAuBpT,GAEzE,IAAKC,EAAgB,CACnB,MAAMxR,EAAI,IAAIhC,MAAM,4BAOpB,MANAZ,EAAAA,EAAOW,MAAMiC,EAAG,CACdD,IAAK,mDACL0kB,YACAC,aACAlT,eAAgBA,QAAAA,EAAkB,KAE9BxR,CACR,CAEA,OAAO,IAAI+iB,EAAAA,GAAa,CACtB3xB,OAAOwzB,EAAAA,EAAAA,IAAsBpT,GAC7Bhc,OAAQytB,EAAAA,eAAeC,OACvBxV,IAAKsX,EAAAA,GAAWnpB,GAAM6oB,EAAYD,EAAWjT,GAC7C6R,UAAWU,EAAAA,GAAwBloB,GACnCsnB,gBAAiB2B,EAAAA,GACjBC,cAAe,IAAMpB,EACrBL,SAAW/R,GAAeqR,EAAiBrR,IAE/C,C,kMC5IO,MAqBM0T,EAAqB,CAAC9rB,EAAwBoE,EAAe2nB,GAAO,KAC1E3nB,IACHA,GAAO4nB,EAAAA,EAAAA,IAAahsB,IAGtBoE,EAAOA,EAAKqB,QAAQ,OAAQ,KAAKwmB,UAEjC,MAAMjlB,GAAatC,EAAAA,EAAAA,IAAc1E,GAC3BgC,EAAYvG,EAAAA,GAAWqZ,aAAa9U,GAAYnE,MAAMgK,MACtDqmB,GAAkBC,EAAAA,EAAAA,IAAmBnsB,GACrCosB,GAAoBC,EAAAA,EAAAA,MACpBC,EAyBR,WACE,MACMC,EADS,IAAIzP,gBAAgBvf,OAAOqf,SAASG,QACzBtY,IAAI,cAC9B,GAAI8nB,EACF,IACE,MAAMD,GAAUE,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAM6V,IAC5C,IAAIE,EAAuC,CAAC,EAC5C,IAAK,MAAMrwB,KAAOkwB,EAChBG,EAAarwB,GAAOkwB,EAAQlwB,GAE9B,OAAOqwB,CACT,CAAE,MAAO5lB,GACP2D,QAAQ5F,MAAMiC,EAChB,CAEF,MACF,CAzCkB6lB,GACVC,EAAelmB,KAAKC,UAAU,CAClC,eAAkB,CAChBiD,OAAOijB,EAAAA,EAAAA,YAAW5qB,EAAUsU,KAC5BuW,QAAS,CAAC,CAAEC,MAAO,OAAQ1oB,OAAM4C,eACjC+lB,YAAa,CACXzC,KAAM,CACJ4B,kBACAE,oBACAE,UACAU,eAAsC,UAAtBZ,EAAgCa,EAAAA,QAAwBr0B,IAG5EoO,gB,IAGWsZ,EAAf,MAAM4M,EAAyB,QAAhB5M,EAAAA,EAAAA,OAAO6M,iBAAP7M,IAAAA,EAAAA,EAAoB,GAC7BllB,EAAO4vB,EAAAA,QAAQC,UAAU,GAAGiC,YAAkB,CAAEE,MAAOT,EAAcU,cAAe,IAK1F,OAJItB,GACFxuB,OAAOwuB,KAAK3wB,EAAM,UAGbA,CAAI,E,i9BC5BN,MAAMkyB,UAAiChyB,EAAAA,GAC5CgI,WAAAA,CAAYzH,GACV0H,MAAM,OAAK1H,GAAAA,CAAOgxB,QAAS,MAI7B,OAAQpqB,cAAa,MACnB4e,EAAAA,EAAAA,IAAkBze,MAAM0e,MAAMC,IAC5B3e,KAAKN,SAAS,CAAEif,MAAK,IAGvB3e,KAAKkW,MAAMC,IACTnW,KAAKoW,kBAAiB,CAACC,EAAUmB,KAC1BxX,KAAK/G,MAAMgxB,QAAQ/wB,QACtB8G,KAAK2qB,cAGF3qB,KAAK/G,MAAM2xB,SAAW5qB,KAAK/G,MAAMgxB,QAAQ/wB,QAC5C8G,KAAK6qB,YACP,IACF,IAIJ,OAAQF,cAAa,KACnB,MAAMG,EAAOjyB,EAAAA,GAAWkyB,QAAQ/qB,MAC1BgrB,GAAcC,EAAAA,EAAAA,IAAiBH,GAAOzZ,GAAMA,aAAa6Z,EAAAA,IAAkBA,EAAAA,IAEjF,GAAIF,EAAa,CACf,MAAM7xB,EAAS6G,KAAK/G,MAAMkyB,MAAQC,EAAUprB,KAAK/G,MAAMkyB,OAAS,KAC1DlB,EAAUe,EAAY/xB,MAAMgxB,QAAQ3wB,KAAK+xB,I,IAIjCA,E,OAJwC,OACjDA,GAAAA,CACH7pB,KAAM3I,EAAAA,GAAW8gB,YAAYqR,EAAaK,EAAE7pB,MAC5C8pB,cAAcnyB,aAAAA,EAAAA,EAAQzB,MAAO,MAAMyB,EAAOzB,UAAYmB,EAAAA,GAAW8gB,YAAYqR,EAAaK,EAAEC,cAC5FlnB,WAAwB,QAAZinB,EAAAA,EAAEjnB,kBAAFinB,IAAAA,EAAAA,OAAgBr1B,G,IAG1B6N,KAAKC,UAAUmmB,KAAapmB,KAAKC,UAAU9D,KAAK/G,MAAMgxB,UACxDjqB,KAAKN,SAAS,CAAEuqB,WAEpB,KAGF,OAAQsB,kBAAiB,K,IAGRT,EAFf,MAAMU,GAAQP,EAAAA,EAAAA,IAAiBjrB,MAAOqR,GAAMA,aAAaE,EAAAA,IAAUA,EAAAA,IAC7DuZ,EAAOjyB,EAAAA,GAAWkyB,QAAQ/qB,MAC1ByrB,EAASX,SAAgB,QAAhBA,EAAAA,EAAM7xB,MAAM6xB,YAAZA,IAAAA,OAAAA,EAAAA,EAAkBY,OACjC,IAAIC,EAAcH,aAAAA,EAAAA,EAAOvyB,MAAM0yB,YAC/B,GAAIA,IAAeF,aAAAA,EAAAA,EAAQvyB,QACzB,IAAK,MAAMiyB,KAASM,EAClB,IAAK,MAAMjlB,KAAS2kB,EAAMxjB,OAAQ,CAChC,MACMikB,EADave,OAAOrD,KAAKxD,EAAMkX,QACPpkB,KAAKE,IAAS,CAC1CqyB,GAAIryB,EACJyJ,MAAOuD,EAAMkX,OAAOlkB,OAIhBsyB,EAAmBH,EAAYI,UAAU3H,MAC5C/S,I,IACwB7K,EAAAA,E,OAAvB6K,EAAE2a,QAAQ3pB,WAAuE,QAA1DmE,EAA8B,QAA9BA,EAAAA,EAAMkX,OAAOuO,yBAAbzlB,IAAAA,EAAAA,EAAkCA,EAAMkX,OAAOwO,mBAA/C1lB,IAAAA,EAAAA,EAA8DA,EAAM9O,OAC1E,WAAjB2Z,EAAE2a,QAAQH,EAAe,I,IAOdrlB,EAAAA,EALf,IAAKslB,EAEHH,EAAYI,UAAUI,QAAQ,CAC5BH,QAAS,CACPH,GAAI,SACJxpB,QAAmE,QAA1DmE,EAA8B,QAA9BA,EAAAA,EAAMkX,OAAOuO,yBAAbzlB,IAAAA,EAAAA,EAAkCA,EAAMkX,OAAOwO,mBAA/C1lB,IAAAA,EAAAA,EAA8DA,EAAM9O,MAE/Ek0B,eAIAE,GAAoBjoB,KAAKC,UAAUgoB,EAAiBF,cAAgB/nB,KAAKC,UAAU8nB,KACrFE,EAAiBF,WAAaA,EAElC,CAGJ,OAAOD,CAAW,IAGpB,OAAQd,cAAa,KACnB,MAAMc,EAAc3rB,KAAKurB,kBACnB,QAAEtB,EAAO,GAAEtL,EAAE,UAAE+J,EAAS,UAAE0D,EAAS,KAAErwB,GAASiE,KAAK/G,MACnDmG,EAAYvG,EAAAA,GAAWqZ,aAAalS,MAE1C,IAAKZ,IAAc6qB,KAAYtL,aAAAA,EAAAA,EAAI0N,KACjC,OAEF,MAAMC,EAAM,CACVC,OAAQ,yBACRxwB,KAAMA,QAAAA,EAAQ,aACdkuB,UACA7qB,UAAW,KAAKA,EAAUnG,MAAMgK,OAChCmB,WAAY,CAAEioB,IAAK1N,EAAG0N,KACtB1a,IAAKhX,OAAOqf,SAAS9iB,KACrB20B,GAAI,GAAGhoB,KAAKC,UAAUmmB,KAAWvB,IAAY0D,IAC7C/2B,MAAO,GAAGqzB,IAAY0D,EAAY,MAAMA,IAAc,KACtDI,SAAUC,EACVrX,eAAgBgX,EAChBT,YAAaA,GAEX9nB,KAAKC,UAAUwoB,KAASzoB,KAAKC,UAAU9D,KAAK/G,MAAM2xB,UACpD5qB,KAAKN,SAAS,CAAEkrB,QAAS0B,GAC3B,IAvGAtsB,KAAKa,qBAAqBb,KAAKH,WACjC,EAyGA,EA7GW6qB,EA6GGhxB,aAAY,EAAGf,YAC3B,MAAM,QAAEiyB,GAAYjyB,EAAMI,YACpB,MAAE2zB,IAAUC,EAAAA,EAAAA,gBAAe,CAAEC,iBAAkBC,EAAAA,GAAgBC,oBAAqBlC,YAE1F,OACE,oCACG8B,EACEvzB,QAAQX,GAA2B,+BAAlBA,EAAKmkB,UAA6CnkB,EAAKxD,UACxEsE,KAAKd,I,IAKIA,E,OAJR,kBAACipB,EAAAA,WAAUA,CACTI,QAASrpB,EAAKu0B,YACd5yB,aAAW,qCACXX,IAAKhB,EAAKqzB,GACVn0B,KAAe,QAATc,EAAAA,EAAKmuB,YAALnuB,IAAAA,EAAAA,EAAa,YACnBxD,QAAUiP,IACJzL,EAAKxD,SACPwD,EAAKxD,QAAQiP,EACf,G,QAShB,MAAMmnB,EAAaD,I,IACaA,EAAAA,EAA9B,MAAM6B,EAA+C,QAAvB7B,EAAe,QAAfA,EAAAA,EAAMxjB,OAAO,UAAbwjB,IAAAA,OAAAA,EAAAA,EAAiBpD,cAAjBoD,IAAAA,EAAAA,EAA2B,CAAC,EAC1D,GAAkD,IAA9C9d,OAAOrD,KAAKgjB,GAAuB9zB,OACrC,OAEF,MAAMxB,EAAO2V,OAAOrD,KAAKgjB,GAAuB,GAChD,MAAO,CAAEt1B,OAAMuL,MAAO+pB,EAAsBt1B,GAAO,E,s8BCtJrD,MAAMu1B,EAAiC,uBACjCC,EAAyC,yBACzCC,EAAuC,iBAEtC,eAAKC,G,yDAAAA,C,CAAL,C,IAKA,WAAKC,G,kDAAAA,C,CAAL,C,IAyBA,MAAMC,UAAkB50B,EAAAA,GA4E7B60B,OAAAA,CAAQtd,GACFjQ,KAAK/G,MAAMkI,MACbnB,KAAK/G,MAAMkI,KAAKosB,QAAQtd,EAE5B,CACAud,QAAAA,CAASC,GACHztB,KAAK/G,MAAMkI,MACbnB,KAAK/G,MAAMkI,KAAKqsB,SAASC,EAE7B,CApFA/sB,WAAAA,CAAYzH,G,IAC+BA,EAAzC0H,MAAM,E,sUAAA,IAAK1H,GAAAA,CAAOy0B,sBAAkD,QAA3Bz0B,EAAAA,EAAMy0B,6BAANz0B,IAAAA,GAAAA,KACzC+G,KAAKa,sBAAqB,K,IA+BT,EACP,EACA,EACO,EACJ,EACD,EA8BR,EAhEF,MAAM4sB,EAAyB,CAC7B,CACEt1B,KAAM,aACN4D,KAAM,SAER,CACE5D,KAAM,UACNw1B,cAAe,UACfz2B,KAAM0a,EAAe5R,MACrBhL,QAAS,IAAM44B,IACfC,SAAU,QAId,IAAIC,EACJ,IACEA,EAAMj1B,EAAAA,GAAWwE,YAAY2C,KAAMuR,EAAAA,GACrC,CAAE,MAAOtN,GAOP,YALAjE,KAAKN,SAAS,CACZyB,KAAM,IAAI4sB,EAAAA,GAAa,CACrBN,WAIN,C,IAgBE,GAdFztB,KAAKN,SAAS,CACZsuB,qBAAsB,IAAItD,EAAyB,CACjDhC,WAA0C,QAA/B,EAAA1oB,KAAK/G,MAAMg1B,4BAAX,eAAiCC,cACT,QAA/B,EAAAluB,KAAK/G,MAAMg1B,4BAAX,eAAiCC,eACF,QAA/B,EAAAluB,KAAK/G,MAAMg1B,4BAAX,eAAiCvF,UACrC0D,UAA0C,QAA/B,EAAApsB,KAAK/G,MAAMg1B,4BAAX,eAAiC7B,UAC5CjB,MAAsC,QAA/B,EAAAnrB,KAAK/G,MAAMg1B,4BAAX,eAAiC9C,MACxCpvB,KAAqC,QAA/B,EAAAiE,KAAK/G,MAAMg1B,4BAAX,eAAiClyB,SAIvCiE,KAAK/G,MAAMy0B,yBAGkB,QAA/B,EAAA1tB,KAAK/G,MAAM+0B,4BAAX,SAAiCG,aAI/BnuB,KAAK/G,MAAMm1B,YAAaN,aAAAA,EAAAA,EAAK70B,MAAMo1B,eAgD7C,SAAgCZ,GAC9BA,EAAMlqB,KAAK,CACTpL,KAAM,GACN4D,KAAM,YAER0xB,EAAMlqB,KAAK,CACTpL,KAAM,gBACN4D,KAAM,SAEV,CAxDQuyB,CAAuBb,IAGrBK,aAAAA,EAAAA,EAAK70B,MAAMo1B,cAuDrB,SAA4BZ,EAAwBc,GAClD,MAAMT,EAAMj1B,EAAAA,GAAWwE,YAAYkxB,EAAMhd,EAAAA,IACzCkc,EAAMlqB,KAAK,CACTpL,KAAM21B,EAAI70B,MAAMu1B,UAAY,SAAH,WACzBb,cAAeG,EAAI70B,MAAMu1B,UAAY,qBAAuB,mBAC5Dx5B,QAAS,KACP,MAAMy5B,EAAsBX,EAAI70B,MAAMu1B,UAAY,SAAH,WAGzCE,EAAqB71B,EAAAA,GAAWwE,YAAYkxB,EAAMhvB,EAAAA,KACxDovB,EAAAA,EAAAA,IAAsBD,EAAoBD,GAG1CX,EAAIpuB,SAAS,CACX8uB,WAAYV,EAAI70B,MAAMu1B,aAExBI,EAAAA,EAAAA,IAAe,YAAaH,EAAoB,GAGtD,CAzEQI,CAAmBpB,EAAOztB,MAGxBA,KAAK/G,MAAMm1B,WAwErB,SAA0BX,EAAwBhsB,GAChDgsB,EAAMlqB,KAAK,CACTpL,KAAmC,cAA7BsJ,EAASxI,MAAMm1B,UAA4C,YAAc,cAC/ET,cAA4C,cAA7BlsB,EAASxI,MAAMm1B,UAA4C,YAAc,aAExFp5B,QAAS,KACP,MAAM85B,EAAWj2B,EAAAA,GAAWwE,YAAYoE,EAAUstB,EAAAA,IAC5CjB,EAAMj1B,EAAAA,GAAWwE,YAAYoE,EAAU8P,EAAAA,IAAUyd,QACjDC,EAAQp2B,EAAAA,GAAWkyB,QAAQtpB,GAAUutB,QACrCT,EAAO9sB,EAASutB,QAChBE,EAAgBlpB,MAAMrD,QAAQmrB,EAAI70B,MAAMi2B,eAC1CpB,EAAI70B,MAAMi2B,cAAc51B,KAAK+X,GAAMA,EAAE2d,UACrClB,EAAI70B,MAAMi2B,cACd,IAAI/tB,EAGFA,EAD+B,cAA7BM,EAASxI,MAAMm1B,UACVe,EAAAA,GAAcC,aAAaC,aAAaC,EAAAA,IAExCH,EAAAA,GAAcI,YAGvBT,EAASpvB,SAAS,CAChByB,KAAMA,EAAKquB,QAAQjB,GAAMkB,SAAS3B,EAAI70B,MAAM5D,OAAOq6B,iBAAiBR,GAAeS,QAAQV,GAAOW,UAGpG,MAAMC,EACyB,eAA7BpuB,EAASxI,MAAMm1B,UAAS,0BAG1BQ,EAAAA,EAAAA,IAAe,YAAaiB,GAC5BtB,EAAK7uB,SAAS,CAAE0uB,UAAWyB,IAE3B,MAAMC,GAAiC7E,EAAAA,EAAAA,IACrC6D,GACCzd,GAAMA,aAAa0e,EAAAA,GACpBA,EAAAA,GAEED,GACFA,EAA+BE,mBAGjCC,EAAwBJ,EAAa,GAG3C,CAnHQK,CAAiBzC,EAAOztB,MAG1BA,KAAKN,SAAS,CACZyB,KAAM,IAAI4sB,EAAAA,GAAa,CACrBN,Y,WAIJztB,KAAKkW,MAAMC,IACsB,QAA/B,EAAAnW,KAAK/G,MAAM+0B,4BAAX,eAAiC5X,iBAAgB,GAAC,kB,SAiLb+Z,G,OAA9BC,EAAAA,MAAAA,KAAAA,U,CAhLCA,CAA8B,EACtC,QAGN,EAaA,EAvFW9C,EAuFG5zB,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,GAASxI,EAAMI,WAEvB,OAAIoI,EACK,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,IAGzB,wCAkFJ,MAAMyQ,EAAkBnQ,IAC7B,MAAMrE,EAAavE,EAAAA,GAAWwE,YAAYoE,EAAUnE,EAAAA,GAC9C2xB,EAAQp2B,EAAAA,GAAWkyB,QAAQtpB,GACjC,IAAIupB,EAAciE,aAAiB/D,EAAAA,GAAmB+D,GAAQoB,EAAAA,EAAAA,IAA2BpB,GAAO,GAGhG,IAAKjE,EAAa,CAChB,MAAMsF,EAAiBz3B,EAAAA,GAAWuY,WAChC3P,GACC4P,GAAMA,aAAakf,EAAAA,GAA6Blf,aAAamf,EAAAA,IAEhE,GAAIF,EAAgB,CAClB,MAAMG,EAAgB53B,EAAAA,GAAWkyB,QAAQuF,GAGvCtF,EADEyF,aAAyBvF,EAAAA,GACbuF,GAEAJ,EAAAA,EAAAA,IAA2BI,GAAe,EAE5D,MACEpvB,EAAAA,EAAOW,MAAM,IAAIC,MAAM,kCAAmC,CACxD+B,IAAK,8DAGX,CACA,MAAM0sB,EAAyC1F,EAAY/xB,MAAMgxB,QAAQ,GAAGzoB,KACtEA,EAAO3I,EAAAA,GAAW8gB,YAAYlY,EAAUivB,GAE9C,OAAOxH,EAAmB9rB,EAAYoE,EAAK,EAGvCosB,EAA6B,MACjCxxB,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkBs0B,IAAKp0B,EAAAA,GAAoBo0B,IAAIC,6BAA6B,EAG7FX,EAA2BY,KAC/Bz0B,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkBC,gBAAiBC,EAAAA,GAAoBD,gBAAgBw0B,gBAAiB,CAC3GD,cACA,EAGEE,EAAAA,W,MAAuB,aAAOC,GAClC,MAAMpE,EAAmBC,EAAAA,GAAgBC,oBACnClC,EAAUoG,EAAmB/3B,MAAM2xB,QAGzC,QAAgC50B,IAA5Bi7B,EAAAA,wBAAuC,CAMzC,OALcA,EAAAA,EAAAA,yBAAwB,CACpCrE,mBACAhC,YAGWsG,WAAW,EAC1B,CAGA,QAAiCl7B,IAA7Bm7B,EAAAA,yBAAwC,CAQ1C,aAP2CC,EAAAA,EAAAA,iBACzCD,EAAAA,EAAAA,0BAAyB,CACvBvE,mBACAhC,cAIS,EACf,CAGF,I,gBA3BoCoG,G,gCAA9BD,G,SA6BSX,I,OAAAA,EAAf,aAA6CD,GAC3C,MAAMkB,EAA2BlB,EAAwBl3B,MAAM+0B,qBAC/D,GAAIqD,EAA0B,C,IAGFlB,EAF1B,MAAM33B,QAAau4B,EAAqBM,G,IAEdlB,EAA1B,MAAMmB,EAAmE,QAA/CnB,EAAkC,QAAlCA,EAAAA,EAAwBl3B,MAAMkI,YAA9BgvB,IAAAA,OAAAA,EAAAA,EAAoCl3B,MAAMw0B,aAA1C0C,IAAAA,EAAAA,EAAmD,GAEvEoB,EAA+BD,EAAkBlN,MAAMnU,GAASA,EAAK9X,OAAS80B,I,IAmB9EkD,EAfFA,EAIAA,EAIAA,EAVJ,GAAI33B,EACF,GAAK+4B,GAeH,GAAIA,EACgC,QAAlCpB,EAAAA,EAAwBl3B,MAAMkI,YAA9BgvB,IAAAA,GAAAA,EAAoC3C,SAClC8D,EAAkBn4B,QACf8W,IAK2B,IAJ1B,CACEid,EACAC,EACAF,GACA5zB,SAAS4W,EAAK9X,cAtBU,QAAlCg4B,EAAAA,EAAwBl3B,MAAMkI,YAA9BgvB,IAAAA,GAAAA,EAAoC5C,QAAQ,CAC1Cp1B,KAAM+0B,EACNnxB,KAAM,YAE0B,QAAlCo0B,EAAAA,EAAwBl3B,MAAMkI,YAA9BgvB,IAAAA,GAAAA,EAAoC5C,QAAQ,CAC1Cp1B,KAAMg1B,EACNpxB,KAAM,UAE0B,QAAlCo0B,EAAAA,EAAwBl3B,MAAMkI,YAA9BgvB,IAAAA,GAAAA,EAAoC5C,QAAQ,CAC1Cp1B,KAAM80B,EACNU,cAAe,cACf34B,QAAUiP,GAAMzL,EAAKxD,SAAWwD,EAAKxD,QAAQiP,IAiBrD,CACF,KAxCemsB,MAAAA,KAAAA,U,CA0CR,MAAMoB,EAAyB97B,IAC7B,CACL+7B,cAAc97B,EAAAA,EAAAA,KAAI,CAChBqJ,MAAO,OACP0V,OAAQ,OACR7W,MAAO,gBACP/F,SAAU,WACVlC,QAAS,U,yXC/TR,MAAM87B,UAAuBne,EAAAA,aAClC7S,WAAAA,CACE,EACA,EACA,EACA,GAEAC,QAAK,mGALEgxB,OAAAA,EAAAA,KACAvuB,SAAAA,EAAAA,KACA5J,IAAAA,EAAAA,KACAyJ,MAAAA,CAGT,EACA,EATWyuB,EASG31B,OAAO,cAGhB,MAAM61B,UAAyBre,EAAAA,aACpC7S,WAAAA,CAAY,EAAoB,EAAuB,GACrDC,QAAK,2EADYnH,IAAAA,EAAAA,KAAoByJ,MAAAA,EAAAA,KAAuBG,SAAAA,CAE9D,EAcK,SAASyuB,EAAe14B,EAA6BsX,EAAoB/O,GAC9E,MAAM3F,EAAuC,MAApB5C,EAAOiK,SAAmB,UAAY,UAC/D0uB,EAAa34B,EAAOK,IAAKL,EAAO8J,MAAOlH,EAAM0U,EAAO/O,EACtD,CAMO,SAASqwB,EACdv4B,EACAiX,EACA/O,EACAuB,EACAG,GAEA,MAAMhK,EAAW44B,EAAmBtwB,EAAclI,EAAKiX,GAEvD,IAAI3R,EAAU1F,EAASH,MAAM6F,QAAQ3F,QAAQA,IAC3C,MAAM84B,GAAaC,EAAAA,EAAAA,IAAgCxwB,EAAcvI,GACjE,OAAI8J,GAASG,IACFjK,EAAOK,MAAQA,GAAOy4B,EAAWhvB,QAAUA,GAAS9J,EAAOiK,WAAaA,GAE/EH,IACO9J,EAAOK,MAAQA,GAAOy4B,EAAWhvB,QAAUA,GAElDG,IACOjK,EAAOK,MAAQA,GAAOL,EAAOiK,WAAaA,KAG5CjK,EAAOK,MAAQA,EAAE,IAG5BiX,EAAM8B,aAAa,IAAIqf,EAAiBp4B,EAAKyJ,EAAOG,IAAW,GAE/DhK,EAASsG,SAAS,CAChBZ,WAEJ,CAnDE,EAJW8yB,EAIG71B,OAAO,cAsDvB,MAAMo2B,EAA0BC,GAC1BA,IAAOntB,EAAAA,GAASotB,IAAMD,IAAOntB,EAAAA,GAASqtB,IACjC,UAELF,IAAOntB,EAAAA,GAASstB,IAAMH,IAAOntB,EAAAA,GAASutB,IACjC,cADT,EAMK,SAASC,EACdj5B,EACAiX,EACArN,EACA1B,GAEKA,IACHA,EAAegxB,EAA4Bl5B,EAAKiX,IAElD,MAAMrX,EAAW44B,EAAmBtwB,EAAclI,EAAKiX,GACjDkiB,EAAevvB,EAAW+uB,EAAuB/uB,QAAYpN,EAEnE,IAAI8I,EAAU1F,EAASH,MAAM6F,QAAQ3F,QAAQA,KAEzCA,EAAOK,MAAQA,IACd24B,EAAuBh5B,EAAOiK,YAAcuvB,GAAgBx5B,EAAOiK,WAAa6B,EAAAA,GAAS2tB,aAI9Fx5B,EAASsG,SAAS,CAChBZ,WAEJ,CAEO,SAAS+zB,EACdr5B,EACAyJ,EACAG,EACAqN,EACA/O,GAEA,MAAMixB,EAAeR,EAAuB/uB,GAEvC1B,IACHA,EAAegxB,EAA4Bl5B,EAAKiX,IAElD,MAAMrX,EAAW44B,EAAmBtwB,EAAclI,EAAKiX,GAEvD,IAAIqiB,EACApxB,IAAiBsU,EAAAA,KACnB8c,EAAcjvB,KAAKC,UAAU,CAC3Bb,QACAS,QAAQqvB,EAAAA,EAAAA,IAAkBv5B,EAAKiX,MAInC,IAAI3R,EAAU1F,EAASH,MAAM6F,QAAQ3F,QAAQA,KAEzCA,EAAOK,MAAQA,IACd24B,EAAuBh5B,EAAOiK,YAAcuvB,GAAgBx5B,EAAOiK,WAAa6B,EAAAA,GAAS2tB,aAI9F9zB,EAAU,IACLA,EACH,CACEtF,MACA4J,SAAUA,EACVH,MAAO6vB,GAA4B7vB,EACnCC,YAAa,CAACD,KAIlB7J,EAASsG,SAAS,CAChBZ,YAGF2R,EAAM8B,aAAa,IAAImf,EAAe,eAAgBtuB,EAAU5J,EAAKyJ,IAAQ,EAC/E,CAMO,SAAS6uB,EACdt4B,EACAyJ,EACAG,EACAqN,EACA/O,IAGAxF,EAAAA,EAAAA,MAEIwF,IAAiBuZ,EAAAA,KACnB+X,EAAAA,EAAAA,IAAex5B,EAAKyJ,EAAOwN,GAG7B,MAAMrX,EAAW44B,EAAmBtwB,EAAclI,EAAKiX,GAEvD,IAAIqiB,EACAG,EAAahwB,EACbvB,IAAiBsU,EAAAA,GACnB8c,EAAcjvB,KAAKC,UAAU,CAC3Bb,QACAS,QAAQqvB,EAAAA,EAAAA,IAAkBv5B,EAAKiX,KAExB/O,IAAiBkB,EAAAA,IAA2B,YAAbQ,IACxC6vB,EAAa,IAAIhwB,KAInB,IAAInE,EAAU1F,EAASH,MAAM6F,QAAQ3F,QAAQA,IAC3C,MAAM84B,GAAaC,EAAAA,EAAAA,IAAgCxwB,EAAcvI,GAGjE,MAAiB,YAAbiK,IACOjK,EAAOK,MAAQA,GAAOL,EAAOiK,WAAa6B,EAAAA,GAAS2tB,UAE7C,YAAbxvB,IACOjK,EAAOK,MAAQA,GAAOL,EAAOiK,WAAa6B,EAAAA,GAASC,SAGrD/L,EAAOK,MAAQA,GAAOy4B,EAAWhvB,QAAUA,EAAI,IAG1D,MAAMiwB,EAAep0B,EAAQ5F,SAAWE,EAASH,MAAM6F,QAAQ5F,QAE9C,YAAbkK,GAAuC,YAAbA,IAA4B8vB,GAA6B,WAAb9vB,KACxEtE,EAAU,IACLA,EACH,CACEtF,MACA4J,SAAuB,YAAbA,EAAyB6B,EAAAA,GAAS2tB,SAAW3tB,EAAAA,GAASC,MAChEjC,MAAO6vB,GAA4B7vB,EACnCC,YAAa,CAAC+vB,MAMpB75B,EAASsG,SAAS,CAChBZ,YAGF2R,EAAM8B,aAAa,IAAImf,EAAe,eAAgBtuB,EAAU5J,EAAKyJ,IAAQ,EAC/E,CAuBO,SAASkwB,EAA6B3sB,EAAe4sB,GAE1D,OAAI5sB,IAAUC,EAAAA,GACL7D,EAAAA,GAEFwwB,CACT,CAEA,SAASV,EAA4BlsB,EAAeiK,G,IAC7B4iB,EAAAA,EACrB,OAD4C5iB,QAAvB4iB,GAAAA,EAAAA,EAAAA,IAAuB5iB,UAAvB4iB,IAAAA,GAAqC,QAArCA,EAAAA,EAA+B1rB,cAA/B0rB,IAAAA,OAAAA,EAAAA,EAAuCjP,MAAMvmB,GAAUA,EAAMnG,OAAS8O,KACrEyU,EAAAA,GAAajF,EAAAA,EACrC,CAEO,MAAMsd,UAA2B56B,EAAAA,GAOtCmH,UAAAA,GACE,MAAM1G,EAASiyB,EAAUprB,KAAK/G,MAAMkyB,OACpC,GAAIhyB,EAAQ,CACV,MAAMC,EAAW44B,EAAmBhyB,KAAK/G,MAAMm6B,aAAcj6B,EAAOzB,KAAMsI,MAC1EA,KAAKuzB,eAAen6B,GAEpB4G,KAAKkW,MAAMC,IACT/c,EAASgd,kBAAiB,CAACC,EAAUmB,MAC9B2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKuzB,eAAen6B,EACtB,IAGN,CACF,CAEQm6B,cAAAA,CAAen6B,GACrB,MAAMD,EAASiyB,EAAUprB,KAAK/G,MAAMkyB,OACpC,IAAKhyB,EAKH,YAJA6G,KAAKN,SAAS,CACZ7L,YAAY,EACZD,YAAY,IAMhB,MAAM4/B,EAA0Bp6B,EAASH,MAAM6F,QAAQslB,MAAM3f,IAC3D,MAAMgvB,GAAarV,EAAAA,EAAAA,IAAiBjlB,GAC9B8J,GAAQivB,EAAAA,EAAAA,IAAgCuB,EAAaja,EAAAA,GAAexD,EAAAA,GAAYvR,GACtF,OAAOA,EAAEjL,MAAQL,EAAOzB,MAAQuL,EAAMA,QAAU9J,EAAO8J,KAAK,IAGzDuwB,EAQLxzB,KAAKN,SAAS,CACZ7L,WAAY2/B,EAAwBpwB,WAAa6B,EAAAA,GAASC,MAC1DtR,WAAY4/B,EAAwBpwB,WAAa6B,EAAAA,GAAS2tB,WAT1D5yB,KAAKN,SAAS,CACZ7L,YAAY,EACZD,YAAY,GASlB,CAnDA8M,WAAAA,CAAYzH,GACV0H,MAAM1H,GAoDR,OAAOjE,WAAW+G,IAChB,MAAM5C,EAASiyB,EAAUprB,KAAK/G,MAAMkyB,OACpC,IAAKhyB,EACH,OAGF24B,EAAa34B,EAAOzB,KAAMyB,EAAO8J,MAAOlH,EAAMiE,KAAMA,KAAK/G,MAAMm6B,cAC/D,MAAMh6B,EAAW44B,EAAmBhyB,KAAK/G,MAAMm6B,aAAcj6B,EAAOzB,KAAMsI,OAE1E5D,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBo3B,oCACpC,CACEC,WAAY3zB,KAAK/G,MAAMm6B,aACvB55B,IAAKL,EAAOzB,KACZ+R,OAAQ1N,EACR63B,eAAex6B,aAAAA,EAAAA,EAAUH,MAAM6F,QAAQ5F,SAAU,GACnD,IAnEF8G,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAsEA,EA3EWszB,EA2EG55B,aAAY,EAAGf,YAC3B,MAAM,YAAExE,EAAW,WAAEP,EAAU,WAAEC,GAAe8E,EAAMI,WACtD,OACE,kBAACrF,EAAAA,EAAYA,CACXQ,WAAY,UACZL,WAAYA,SAAAA,EACZD,WAAYA,SAAAA,EACZE,UAAW,IAAM6E,EAAM3D,QAAQ,WAC/BhB,QAAS,IAAM2E,EAAM3D,QAAQ,SAC7BjB,UAAW,IAAM4E,EAAM3D,QAAQ,WAC/Bb,YAAaA,G,IAMrB,MAAMi3B,EAAaD,I,IAEaA,EAAAA,EAA9B,MAAM6B,EAA+C,QAAvB7B,EAAe,QAAfA,EAAAA,EAAMxjB,OAAO,UAAbwjB,IAAAA,OAAAA,EAAAA,EAAiBpD,cAAjBoD,IAAAA,EAAAA,EAA2B,CAAC,EAE1D,GAAkD,IAA9C9d,OAAOrD,KAAKgjB,GAAuB9zB,OAErC,YADAmI,EAAAA,EAAOC,KAAK,sCAGd,MAAM5J,EAAO2V,OAAOrD,KAAKgjB,GAAuB,GAEhD,MAAO,CAAEt1B,OAAMuL,MADD+pB,EAAsBt1B,GACd,EAGlBs6B,EAAqB,CAACtwB,EAAsClI,EAAaiX,IACtE/O,IAAiBsU,EAAAA,IAActU,IAAiB8X,EAAAA,IACnD3C,EAAAA,EAAAA,IAA6BpG,IAC7BojB,EAAAA,EAAAA,IAAwBV,EAA6B35B,EAAKkI,GAAe+O,E,8PC3YxE,MAAMqjB,UAA6BvgB,EAAAA,cACxC,EADWugB,EACG/3B,OAAO,0BAOvB,MAAMg4B,EAAwC,CAAC,EAExC,MAAMC,UAA6Bt7B,EAAAA,GAoChCu7B,YAAAA,CAAa96B,GACnB,MAAMm3B,EAAiBz3B,EAAAA,GAAWuY,WAChCpR,MACCqR,GAAMA,aAAa6iB,EAAAA,GAAuB7iB,aAAa8iB,EAAAA,KAE1D,GAAI7D,aAA0B4D,EAAAA,GAAuB5D,aAA0B6D,EAAAA,GAAsB,CACnGJ,EAAc/zB,KAAKo0B,UAAYj7B,EAC/B,MAAMk7B,EAAkBx7B,EAAAA,GAAWy7B,gBAAgBhE,EAAgBiE,EAAAA,GACnEF,SAAAA,EAAiBrxB,SAASwxB,IACpBA,EAAMv7B,MAAMkI,KAAKmQ,UACnBkjB,EAAMC,eAAet7B,EACvB,GAEJ,MACEkI,EAAAA,EAAOC,KAAK,iCAAkC,CAC5CozB,kBAAmBpE,EACnBn3B,UAGN,CArDAuH,WAAAA,CAAY0zB,G,IAEAL,EADVpzB,MAAM,CACJxH,OAA+B,QAAvB46B,EAAAA,EAAcK,UAAdL,IAAAA,EAAAA,EAA2B,KAHvC,OAAQK,gBAAR,GAoBA,OAAOO,uBAAuB5rB,IAC5B/I,KAAKN,SAAS,CAAEvG,OAAQ4P,EAAM9R,OAAOgM,QACrCjD,KAAKi0B,aAAalrB,EAAM9R,OAAOgM,MAAM,IAGvC,OAAO2xB,oBAAmB,KACxB50B,KAAKN,SAAS,CAAEvG,OAAQ,KACxB6G,KAAKi0B,aAAa,GAAG,IAGvB,OAAO7kB,SAAQ,KACbpP,KAAKN,SAAS,CAAEvG,OAAQ,KACxB46B,EAAc/zB,KAAKo0B,UAAY,EAAE,IA3BjCp0B,KAAKo0B,SAAWA,CAClB,EAEA,EATWJ,EASGt6B,aAAY,EAAGf,YAC3B,MAAM,OAAEQ,GAAWR,EAAMI,WACzB,OACE,kBAAC87B,EAAAA,EAAWA,CACV5xB,MAAO9J,EACPonB,SAAU5nB,EAAMg8B,oBAChB3gC,QAAS2E,EAAMi8B,iBACftU,YAAY,oB,+pBCAb,MAAMiU,UAAwB77B,EAAAA,GAgD3Bo8B,aAAAA,CAAchK,GACpB,MAAMiK,EAA+B,GAC/BC,GAAeC,EAAAA,EAAAA,YAAWnK,EAAKY,OAAQ1rB,KAAKk1B,OAAQl1B,KAAKgT,WAE/D,IAAK,IAAImiB,EAAc,EAAGA,EAAcH,EAAa97B,OAAQi8B,IAAe,CAC1E,MAAMC,EAAcp1B,KAAK/G,MAAMo8B,eAAeL,EAAaG,GAAcA,GACzEJ,EAAYxxB,KAAK6xB,EACnB,CAEAp1B,KAAKg1B,aAAeA,EACpBh1B,KAAKs1B,mBAAqBP,EAEtB/0B,KAAKorB,aACPprB,KAAK/G,MAAMkI,KAAKzB,SAAS,CAAEpJ,SAAU,KACrC0J,KAAKy0B,eAAez0B,KAAKorB,cAEzBprB,KAAK/G,MAAMkI,KAAKzB,SAAS,CAAEpJ,SAAUy+B,GAEzC,CAwCA,mBAA2BjK,GACzB,MAAMyK,EAAiB18B,EAAAA,GAAWwE,YAAY2C,KAAMw1B,EAAAA,GAEpD,GAAID,EAAgB,CAClB,MAAME,EAAoB58B,EAAAA,GAAW4Y,eACnC8jB,GACCvV,GAAQA,EAAI1O,UAAY0O,EAAI/mB,MAAMO,MAAQk8B,EAAAA,KAE7C,GAAID,EAAkB,aAAcl2B,EAAAA,GAAiB,CACnD,MAAMisB,EAAQ3yB,EAAAA,GAAWy7B,gBAAgBmB,EAAkB,GAAIlkB,EAAAA,IAAU,GACrEia,aAAiBja,EAAAA,GACnBia,EAAM9rB,SAAS,CACbuvB,MAAO,IAAI0G,EAAAA,GAAqB,CAC9BC,gBAAiB,CAAC,KAAMC,OA4EJrqB,EA5EsBsf,EAAK,GA6EnD6G,GACCA,EAAOmE,MACZx8B,EAAAA,EAAAA,MAAKmyB,IACH,IAAKjgB,IAAYA,EAAQtS,OACvB,OAAOuyB,EAET,IAAIsK,EAAyB,GAO7B,OANAtK,EAAOzoB,SAASyB,IACd,MAAM5G,GAAQm4B,EAAAA,EAAAA,IAAcvxB,GACxB+G,EAAQnS,SAASwE,IACnBk4B,EAAUxyB,KAAKkB,EACjB,IAEKsxB,CAAS,KAdjB,IAA2BvqB,C,OAxExBnK,EAAAA,EAAOC,KAAK,yCAA0C,CAAE20B,mBAAoBzK,GAEhF,MACEnqB,EAAAA,EAAOC,KAAK,8CAA+C,CAAE40B,yBAA0BT,GAE3F,CACF,CA3HA,YAAmB,G,IAAA,OACjBP,EAAM,UACNliB,EAAS,UACToY,GAHiB,EAMjBzqB,MAFG1H,EAJc,GACjBi8B,SACAliB,YACAoY,eARF,OAAQkK,qBAAsC,IAC9C,OAAQJ,cAAR,GACA,OAAQliB,iBAAR,GACA,OAAQgiB,eAA4B,IACpC,OAAQ5J,iBAAR,GAkCA,OAAO3lB,QAAO,CAACyvB,EAAgBliB,KAC7B,MAAM8X,EAAOjyB,EAAAA,GAAWkyB,QAAQ/qB,MAChCA,KAAKk1B,OAASA,EACdl1B,KAAKgT,UAAYA,EACb8X,EAAK7xB,MAAM6xB,MACb9qB,KAAK80B,cAAchK,EAAK7xB,MAAM6xB,KAChC,IAuBF,OAAOqL,iBAAiB5qB,IAEtB,GADa1S,EAAAA,GAAWkyB,QAAQ/qB,MAAM/G,MAAM6xB,KAI5C,IAAK,IAAIqK,EAAc,EAAGA,EAAcn1B,KAAKg1B,aAAa97B,OAAQi8B,IAChE5pB,EAASvL,KAAKg1B,aAAcG,EAC9B,IAGFV,EAAAA,KAAAA,kBAAkBt7B,IAChB,IAAIi9B,EAAqB,GAEzBp2B,KAAKm2B,eAAc,CAAC1K,EAAQ0J,KAC1B,MAAMxM,GAAaqN,EAAAA,EAAAA,IAAcvK,EAAO0J,IACxCiB,EAAS7yB,KAAKolB,EAAW,KAE3B0N,EAAAA,EAAAA,GAAYD,EAAUj9B,GAAS2xB,IACzBA,GAAQA,EAAK,GAEf9qB,KAAKs2B,cAAcnL,IACjB,MAAMttB,GAAQm4B,EAAAA,EAAAA,IAAc7K,GAC5B,OAAOL,EAAK,GAAGzxB,SAASwE,EAAM,IAIhCmC,KAAKs2B,cAAa,KAAM,IAG1Bt2B,KAAKu2B,mBAAmBzL,EAAK,GAC7B,IAiCJ,OAAOwL,gBAAgBE,IACrB,MAAMzB,EAA+B,GAOrC,GANA/0B,KAAKm2B,eAAc,CAAC1K,EAAQ0J,KACtBqB,EAAS/K,EAAO0J,KAClBJ,EAAYxxB,KAAKvD,KAAKs1B,mBAAmBH,GAC3C,IAGyB,IAAvBJ,EAAY77B,OAAc,CAC5B,MAAMC,EAAS6G,KAAKorB,YACpBprB,KAAK/G,MAAMkI,KAAKzB,SAAS,CAAEpJ,SAAU,CAACmgC,EAAoBt9B,EAAQ6G,KAAK02B,eACzE,MACE12B,KAAK/G,MAAMkI,KAAKzB,SAAS,CAAEpJ,SAAUy+B,GACvC,IAGF,OAAO2B,eAAc,KACnB12B,KAAKuS,aAAa,IAAIuhB,EAAAA,GAAwB,EAAK,IAtInD9zB,KAAKk1B,OAASA,EACdl1B,KAAKgT,UAAYA,EACjBhT,KAAKorB,UAAYA,EAEjBprB,KAAKa,sBAAqB,KACxB,MAAMiqB,EAAOjyB,EAAAA,GAAWkyB,QAAQ/qB,MAEhCA,KAAKkW,MAAMC,IACT2U,EAAK1U,kBAAiB,CAAC0U,EAAM6L,K,IAEzB7L,EACCA,EAC4B6L,EAAAA,IAFpB,QAAT7L,EAAAA,EAAKA,YAALA,IAAAA,OAAAA,EAAAA,EAAW7xB,SAAU29B,EAAAA,aAAaC,OACxB,QAAT/L,EAAAA,EAAKA,YAALA,IAAAA,OAAAA,EAAAA,EAAW7xB,SAAU29B,EAAAA,aAAaE,WACjChM,EAAKA,KAAKY,OAAOxyB,QAAsC,QAA5By9B,EAAa,QAAbA,EAAAA,EAAS7L,YAAT6L,IAAAA,OAAAA,EAAAA,EAAejL,OAAOxyB,cAAtBy9B,IAAAA,EAAAA,EAAgC,KAE7D32B,KAAK80B,cAAchK,EAAKA,KAC1B,KAIAA,EAAK7xB,MAAM6xB,MACb9qB,KAAK80B,cAAchK,EAAK7xB,MAAM6xB,KAChC,GAEJ,EAwHF,SAAS2L,EAAoBt9B,EAAgBu9B,GAC3C,OAAO,IAAIn3B,EAAAA,GAAgB,CACzByT,UAAW,MACX1c,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI41B,EAAAA,GAAiB,CACzBC,UACE,kBAACziC,MAAAA,CAAIC,UAAWJ,EAAO6iC,gBACrB,kBAACrgC,EAAAA,MAAKA,CAACvB,MAAM,GAAGyB,SAAS,OAAOtC,UAAWJ,EAAO8iC,gBAAgB,6BAC/B/9B,EAAO,IACxC,kBAACzE,EAAAA,OAAMA,CAACF,UAAWJ,EAAO+iC,YAAaniC,QAAS0hC,GAAa,wBAU7E,CA1BE,EAvJWnC,EAuJG76B,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,GAASxI,EAAMI,WACvB,OAAO,kBAACoI,EAAKzH,UAAS,CAACf,MAAOwI,G,IA0BlC,MAAM/M,EAAS,CACb6iC,gBAAgBthC,EAAAA,EAAAA,KAAI,CAClBqL,SAAU,EACVpL,QAAS,OACTC,eAAgB,SAChBoH,WAAY,WAEdi6B,gBAAgBvhC,EAAAA,EAAAA,KAAI,CAClByhC,SAAU,OACVp2B,SAAU,IAEZm2B,aAAaxhC,EAAAA,EAAAA,KAAI,CACfgC,WAAY,W,gGCxNT,MAAM0/B,UAAyB3+B,EAAAA,GACpC,gBAAcgB,EAAU,MAAEf,IACxB,MAAM,KAAEoD,GAASpD,EAAMI,WACvB,OACE,kBAAC1C,EAAAA,EAASA,KACR,kBAACO,EAAAA,MAAKA,CAACvB,MAAM,GAAGyB,SAAS,WAAU,uBACZiF,EAAK,mCAAiC,IAC3D,kBAAC/E,IAAAA,CACCxC,UAAW8iC,EAAAA,GAAiB9+B,KAC5BtB,KAAK,sCACLD,OAAO,SACPE,IAAI,uBACL,eAEI,IAAI,mCAKjB,E,yqBCNK,SAASogC,GAAiB,QAAEl1B,EAAO,MAAEY,EAAK,SAAEsd,EAAQ,MAAE1iB,IAC3D,MAAMzJ,GAASC,EAAAA,EAAAA,YAAWC,IACnB2qB,EAAUuY,IAAez+B,EAAAA,EAAAA,WAAS,GAEnC0+B,EAAuCp1B,EAAQ/I,KAAK6O,IACjD,CACLtK,MAAOsK,EAAOtK,MACdoF,MAAOkF,EAAOlF,UAGlB,OACE,kBAACy0B,EAAAA,YAAWA,CAACljC,UAAWJ,EAAOujC,cAAe95B,MAAOA,GACnD,kBAAC+5B,EAAAA,OAAMA,CACCv1B,QAASo1B,EAAmBx0B,QAClCud,WAAY,IAAMgX,GAAY,GAC9B3X,YAAa,IAAM2X,GAAY,GAC/BjX,SAAWtB,GAAiCsB,EAAStB,EAAShc,OAC9DzO,UAAWJ,EAAOyjC,OAClBxX,OAAQpB,OAAWjpB,EAAY,kBAACyB,EAAAA,KAAIA,CAACC,KAAM,aAInD,CAEO,SAASogC,GAAqB,QACnCz1B,EAAO,MACPY,EAAK,SACLsd,EAAQ,MACR1iB,EAAK,aACLk6B,EAAY,UACZ7Y,EAAS,cACT8Y,I,IAa2BC,EAX3B,MAAM7jC,GAASC,EAAAA,EAAAA,YAAWC,IACnB2qB,EAAUuY,IAAez+B,EAAAA,EAAAA,WAAS,IAClCk/B,EAAcC,IAAmBn/B,EAAAA,EAAAA,UAAkCi/B,GAEpEP,EAAuCp1B,EAAQ/I,KAAK6O,IACjD,CACLtK,MAAOsK,EAAOtK,MACdoF,MAAOkF,EAAOlF,UAGZk1B,EACJF,GAAgBh1B,IAA2B,QAAlBg1B,EAAAA,EAAah1B,aAAbg1B,IAAAA,OAAAA,EAAAA,EAAoB5+B,SAAS4J,IAClD,CAACg1B,KAAiBR,GAClBA,EAEAW,EAAiBD,aAAAA,EAAAA,EAAY/T,MAAM3E,GAAQA,EAAIxc,QAAUA,IAE/D,OACE,kBAACy0B,EAAAA,YAAWA,CAACljC,UAAWJ,EAAOikC,0BAA2Bx6B,MAAOA,GAC/D,kBAAC+5B,EAAAA,OAAMA,CACL1Y,UAAWA,EACXjqB,cAAaC,EAAAA,EAAQojC,qBAAqBne,OAC1CmG,YAAa,gBACbje,QAAS81B,EACTxX,aAAa,EACb1d,MAAOA,EACPud,WAAY,IAAMgX,GAAY,GAC9B3X,YAAa,IAAM2X,GAAY,GAC/Brc,kBAAkB,EAClBkF,OAAQpB,IAAYmZ,aAAAA,EAAAA,EAAgBG,gBAAYviC,EAAY,kBAACyB,EAAAA,KAAIA,CAACC,KAAM,WACxE6oB,SAAU,CAACtd,EAAgCu1B,KAErCv1B,aAAAA,EAAAA,EAAOs1B,aAAat1B,aAAAA,EAAAA,EAAO0jB,OAC7BuR,EAAgB,E,sUAAA,IAAKj1B,GAAAA,CAAO0jB,KAAM,YAC3BpG,EAAStd,EAAMA,QAIE,UAAtBu1B,EAAW/uB,OACN8W,EAAS,SAIQ,kBAAtBiY,EAAW/uB,QAA8BxG,EAAMA,QAAUA,EAAMs1B,WACjER,EAAa90B,EAAMA,QAGvBkgB,cAAe,CAAClgB,EAA2Bu1B,KAEzC,MAAM/0B,EAAO+0B,EAGb,MAAoB,iBAAhB/0B,EAAKgG,OACA8W,EAAStd,GAIE,eAAhBQ,EAAKgG,QAA2BhG,EAAKg1B,gBACvCP,EAAgB,CACdj1B,OAAOy1B,EAAAA,EAAAA,IAAmBj1B,EAAKg1B,gBAC/B56B,MAAO4F,EAAKg1B,eACZ9R,KAAM,SACN4R,WAAW,IAENhY,EAAS9c,EAAKg1B,sBAPvB,CAQA,IAKV,CAEA,SAASnkC,EAAUoB,GACjB,MAAO,CACLijC,OAAOhjC,EAAAA,EAAAA,KAAI,CACTif,aAAc,IAEhBijB,QAAQliC,EAAAA,EAAAA,KAAI,CACVuL,SAAUxL,EAAMmC,QAAQ,IACxBu/B,SAAU1hC,EAAMmC,QAAQ,MAE1B8/B,eAAehiC,EAAAA,EAAAA,KAAI,CACjBkI,MAAO,gCACPqD,SAAUxL,EAAMmC,QAAQ,MACxBu/B,SAAU1hC,EAAMmC,QAAQ,IACxB4tB,YAAa/vB,EAAMmC,QAAQ+gC,GAC3BhkB,aAAc,IAEhByjB,2BAA2B1iC,EAAAA,EAAAA,KAAI,CAC7BkI,MAAO,yBACPqD,SAAUxL,EAAMmC,QAAQ,MACxBu/B,SAAU1hC,EAAMmC,QAAQ,IACxB4tB,YAAa/vB,EAAMmC,QAAQ+gC,GAC3BhkB,aAAc,IAGpB,C,qjBClGO,MAAM2b,UAAkC73B,EAAAA,GAM7C,eAAcmgC,EAAS,MAAElgC,IACvB,MAAM,KAAEwI,GAASxI,EAAMI,WACvB,OAAIoI,aAAgBq0B,EAAAA,EACX,oCAAGr0B,GAAQ,kBAACq0B,EAAAA,EAAeqD,SAAQ,CAAClgC,MAAOwI,KAG7C,oCACT,CAYQ23B,SAAAA,GACN,MAAMC,GAAkBC,EAAAA,EAAAA,IAAwBh5B,MAChD,OAAOiJ,OAAO8vB,EAAgB9/B,MAAMgK,MACtC,CAEApD,UAAAA,G,IAWI,EAVF,MAAMyH,EAAQtH,KAAKi5B,aAGnBj5B,KAAKN,SAAS,CACZyB,KAAMnB,KAAK4vB,MAAMtoB,GACjB2nB,MAAOjvB,KAAKk5B,qBAIdl5B,KAAKkW,MAAMC,IACO,QAAhB,EAAAnW,KAAK/G,MAAMg2B,aAAX,eAAkB7Y,kBAAkBC,IAClCrW,KAAKm5B,wBAAwB9iB,EAAU/O,EAAM,KAIjDtH,KAAKo5B,WACLp5B,KAAKq5B,kBACP,CAEQH,gBAAAA,GACN,MAAM5xB,EAAQtH,KAAKi5B,aACnB,OAAOK,EAAAA,EAAAA,IAAe,CAAChyB,GAAQ,CAAEiyB,eAAgB,UACnD,CAKA,aACE,MAAMC,EAASx5B,KAAK84B,YACdld,GAAiB9F,EAAAA,EAAAA,IAAkB9V,MACnCy5B,GAAsBC,EAAAA,EAAAA,IAAuB15B,MAC7C25B,GAAcC,EAAAA,EAAAA,IAAuBJ,EAAQ5d,EAAgB6d,IAE7D,aAAErG,EAAY,iBAAEyG,GAAqB75B,KAAK85B,4CAC1CC,EAAalhC,EAAAA,GAAW8gB,YAAY3Z,KAAM25B,EAAY92B,QAAQ,MAAMuwB,KAAiByG,IAE3F,OAAOG,EAAAA,EAAAA,GAAeD,EAAY,CAAEzO,aAAc,KAAKkO,MAAYtP,MAAOsP,GAC5E,CAKA,mBAEEx5B,KAAKkW,MAAMC,IACTtd,EAAAA,GAAWqZ,aAAalS,MAAMoW,kBAAiB,KAE7CpW,KAAKo5B,UAAU,KAMnBp5B,KAAKkW,MAAMC,KACTkN,EAAAA,EAAAA,IAAuBrjB,MAAMoW,kBAAiB,CAACC,EAAUmB,MAClD2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKo5B,UACP,KAKJp5B,KAAKkW,MAAMC,KACTP,EAAAA,EAAAA,IAAoB5V,MAAMoW,kBAAiB,CAACC,EAAUmB,KAChDnB,EAASpT,QAAUuU,EAAUvU,OAC/BjD,KAAKo5B,UACP,KAKJp5B,KAAKkW,MAAMC,KACTgB,EAAAA,EAAAA,IAAkBnX,MAAMoW,kBAAiB,CAACC,EAAUmB,MAC7C2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKo5B,UACP,KAKJp5B,KAAKkW,MAAMC,KACTF,EAAAA,EAAAA,IAAkBjW,MAAMoW,kBAAiB,CAACC,EAAUmB,MAC7C2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKo5B,UACP,KAIJ,MAAM,OAAE11B,GAAW1D,KAAKi6B,wBAET,uBAAXv2B,EACF1D,KAAKk6B,8BAELl6B,KAAKm6B,gCAET,CAKA,iCACE,MAAM3gC,EAAMwG,KAAK84B,Y,WAEjB94B,KAAKkW,MAAMC,KACTL,EAAAA,EAAAA,IAAkB9V,MAAMoW,iBAAgB,W,MAAC,aAAOC,EAAUmB,IACnD2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9C,EAAKs6B,UAET,I,gBAJgD/iB,EAAUmB,G,gCAAlB,K,WAO1CxX,KAAKkW,MAAMC,KACTQ,EAAAA,EAAAA,IAAoB3W,MAAMoW,iBAAgB,W,MAAC,aAAOC,EAAUmB,IAEvD2G,EAAAA,EAAAA,GACC9H,EAASvX,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQA,IACzCge,EAAU1Y,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQA,MAG5C,EAAK4/B,UAET,I,gBATkD/iB,EAAUmB,G,gCAAlB,IAW9C,CAKA,8BACE,MAAMhe,EAAMwG,KAAK84B,Y,WAEjB94B,KAAKkW,MAAMC,KACTQ,EAAAA,EAAAA,IAAoB3W,MAAMoW,iBAAgB,W,MAAC,aAAOC,EAAUmB,IACrD2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9C,EAAKs6B,UAET,I,gBAJkD/iB,EAAUmB,G,gCAAlB,K,WAO5CxX,KAAKkW,MAAMC,KACTL,EAAAA,EAAAA,IAAkB9V,MAAMoW,iBAAgB,W,MAAC,aAAOC,EAAUmB,IAErD2G,EAAAA,EAAAA,GACC9H,EAASvX,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQA,IACzCge,EAAU1Y,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQA,MAG5C,EAAK4/B,UAET,I,gBATgD/iB,EAAUmB,G,gCAAlB,IAW5C,CAMA,e,IAEE,EADA,MAAMlQ,EAAQtH,KAAKi5B,aACK,QAAxB,EAAAj5B,KAAKo6B,6BAAL,SAA4B16B,SAAS,CACnCuqB,QAAS,CAAC3iB,IAEd,CAMA,WAEEtH,KAAKq6B,eACL,MAAMrP,EAAchrB,KAAKo6B,sBACzBpP,SAAAA,EAAasP,YACf,CAKA,sBACE,GAAIt6B,KAAK/G,MAAMg2B,MAAO,CACpB,MAAMsL,EAAe1hC,EAAAA,GAAWy7B,gBAAgBt0B,KAAK/G,MAAMg2B,MAAO/D,EAAAA,IAClE,GAA4B,IAAxBqP,EAAarhC,OAAc,CAC7B,MAAM8I,EAAQ,IAAIC,MAAM,mDAExB,MADAZ,EAAAA,EAAOW,MAAMA,EAAO,CAAEgC,IAAK,+EACrBhC,CACR,CAEA,OAAOu4B,EAAa,EACtB,CACAl5B,EAAAA,EAAOC,KAAK,4FAEd,CAKA,4CACE,MAAMk4B,EAASx5B,KAAK84B,YACpB,IAAIe,EACAzG,EAIJ,GAAe,uBADApzB,KAAKw6B,iBACiB,CACnC,MAAMvhB,GAActC,EAAAA,EAAAA,IAAoB3W,MACxCozB,EAAe5Z,EAAAA,GACfqgB,GAAmB/f,EAAAA,EAAAA,IAA2Bb,EAAYhgB,MAAM6F,QAAS,CAAC06B,GAC5E,KAAO,CACLpG,EAAepd,EAAAA,GACf,MAAMykB,GAAY3kB,EAAAA,EAAAA,IAAkB9V,MACpC65B,GAAmBhgB,EAAAA,EAAAA,IAAwB4gB,EAAUxhC,MAAM6F,QAAS,CAAC06B,GACvE,CAEA,MAAO,CAAEK,mBAAkBzG,eAC7B,CAKA,wBAAgC/c,EAA0B/O,G,IACpD+O,EAOAA,GAPa,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,MACpC72B,KAAK/G,MAAMkI,gBAAgB41B,EAAAA,IAC7B/2B,KAAKN,SAAS,CACZyB,KAAMnB,KAAK4vB,MAAMtoB,MAIN,QAAb+O,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAa30B,OACxCjC,KAAK06B,cAAcrkB,EAASyU,KAAK6P,OAErC,CAKA,cAAsBA,GACpB36B,KAAKN,SAAS,CACZyB,KAAM,IAAI41B,EAAAA,GAAiB,CACzBC,UACE,kBAACpgC,EAAAA,MAAKA,CAACvB,MAAO,yCAA0CyB,SAAU,SAC/D6jC,aAAAA,EAAAA,EAAQrhC,KAAI,CAACshC,EAAKphC,IACjB,kBAACjF,MAAAA,CAAIiF,IAAKA,GACPohC,EAAIC,QACH,oCACE,kBAACC,SAAAA,KAAO,UAAe,KAAGF,EAAIC,OAAO,IAAC,kBAACzjC,KAAAA,OAG1CwjC,EAAInkC,SACH,oCACE,kBAACqkC,SAAAA,KAAO,WAAgB,KAAGF,EAAInkC,QAAQ,IAAC,kBAACW,KAAAA,OAG5CwjC,EAAIG,SACH,oCACE,kBAACD,SAAAA,KAAO,WAAgB,KAAGF,EAAIG,gBASjD,CAKA,MAAczzB,GACZ,MAAM,YAAE0zB,EAAW,OAAEt3B,GAAW1D,KAAKi6B,yBAC/B,OAAE/E,EAAM,UAAEliB,IAAcioB,EAAAA,EAAAA,IAAoB,SAAUC,EAAAA,gBAAiB,QACvEC,EAAuBtiC,EAAAA,GAAWwE,YAAY2C,KAAMm0B,EAAAA,IACpD/I,EAAY,K,IAAM+P,E,OAA8C,QAA9CA,EAAAA,EAAqBliC,MAAMkhB,OAAOlhB,MAAME,cAAxCgiC,IAAAA,EAAAA,EAAkD,EAAE,EAE5E,OAAO,IAAI3F,EAAAA,EAAe,CACxBnzB,QAAS,CACP,CAAEY,MAAO,SAAUpF,MAAO,UAC1B,CAAEoF,MAAO,OAAQpF,MAAO,QACxB,CAAEoF,MAAO,OAAQpF,MAAO,SAE1BinB,OAAQ,OACRsW,QAAS,CAEP,IAAI77B,EAAAA,GAAgB,CAClByT,UAAW,SACX1c,SAAU,CACR,IAAIygC,EAAAA,GAAiB,CACnBC,UAAW,kBAAC7C,EAAAA,GAAqBkH,WAAU,CAAC1iC,MAAOwiC,MAErD,IAAI7d,EAAAA,GAAc,CAChBrc,UAAW,IACXE,KAAMguB,EAAAA,GAAcC,aACjBK,SAASuL,GACTM,mBAAkB,GAClB9L,QAAQ,IAAIlC,EAAAA,GAAU,CAAC,IACvBsC,aAMT,IAAIrwB,EAAAA,GAAgB,CAClByT,UAAW,SACX1c,SAAU,CACR,IAAIygC,EAAAA,GAAiB,CACnBC,UAAW,kBAAC7C,EAAAA,GAAqBkH,WAAU,CAAC1iC,MAAOwiC,MAErD,IAAII,EAAAA,GAAuB,CAAElmC,MAAO2lC,EAAaj/B,KAAM,QAASy9B,OAAQx5B,KAAK84B,cAC7E,IAAI/B,EAAAA,GAAiB,CACnBC,UAAW,kBAAC7C,EAAAA,GAAqBqH,WAAU,CAAC7iC,MAAOwiC,MAErD,IAAI5G,EAAAA,EAAgB,CAClBpzB,KAAM,IAAIs6B,EAAAA,GAAmB,CAC3BC,gBAAiBC,EAAAA,GACjBC,SAAU,QACVtlC,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI41B,EAAAA,GAAiB,CACzBC,UAAW,kBAACpY,EAAAA,mBAAkBA,CAACzmB,KAAK,oBAI1C0jC,QAAQ,IAEVxG,gBAAgByG,EAAAA,EAAAA,IACd9F,EAAAA,IACA1uB,aAAAA,EAAAA,EAAO9F,KAAKnI,SAAS,oBAAqB0iC,EAAAA,UAAUC,KAAOD,EAAAA,UAAUE,KAC1D,uBAAXv4B,EAAkC8V,EAAAA,GAAexD,EAAAA,GACjDnd,EAAAA,GAAWwE,YAAY2C,KAAMm0B,EAAAA,IAAsBl7B,MAAMwM,KACzDu1B,GAEF9F,SACAliB,YACAoY,iBAMN,IAAI7rB,EAAAA,GAAgB,CAClByT,UAAW,SACX1c,SAAU,CACR,IAAIygC,EAAAA,GAAiB,CACnBC,UAAW,kBAAC7C,EAAAA,GAAqBkH,WAAU,CAAC1iC,MAAOwiC,MAErD,IAAII,EAAAA,GAAuB,CAAElmC,MAAO2lC,EAAaj/B,KAAM,QAASy9B,OAAQx5B,KAAK84B,cAC7E,IAAI/B,EAAAA,GAAiB,CACnBC,UAAW,kBAAC7C,EAAAA,GAAqBqH,WAAU,CAAC7iC,MAAOwiC,MAErD,IAAI5G,EAAAA,EAAgB,CAClBpzB,KAAM,IAAIs6B,EAAAA,GAAmB,CAC3BC,gBAAiB,MACjBE,SAAU,QACVtlC,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI41B,EAAAA,GAAiB,CACzBC,UAAW,kBAACpY,EAAAA,mBAAkBA,CAACzmB,KAAK,oBAI1C0jC,QAAQ,IAEVxG,gBAAgByG,EAAAA,EAAAA,IACd9F,EAAAA,IACA1uB,aAAAA,EAAAA,EAAO9F,KAAKnI,SAAS,oBAAqB0iC,EAAAA,UAAUC,KAAOD,EAAAA,UAAUE,KAC1D,uBAAXv4B,EAAkC8V,EAAAA,GAAexD,EAAAA,GACjDnd,EAAAA,GAAWwE,YAAY2C,KAAMm0B,EAAAA,IAAsBl7B,MAAMwM,KACzDu1B,GAEF9F,SACAliB,YACAoY,mBAMZ,CAKA,wBACE,MAAM2N,GAAkBC,EAAAA,EAAAA,IAAwBh5B,MAC1Cg7B,EAAc/xB,OAAO8vB,EAAgB9/B,MAAMgK,OAEjD,MAAO,CAAE+3B,cAAat3B,QADKqvB,EAAAA,EAAAA,IAAkBiI,EAAah7B,MAE5D,CAKA,qBACE,OAAOk8B,EAAAA,EAAAA,KAA2BpmB,EAAAA,EAAAA,IAAkB9V,MACtD,CAKA,iBACE,MAAM,OAAE0D,GAAW1D,KAAKi6B,wBAClBkC,EAAkBn8B,KAAKo8B,qBAG7B,OAAI14B,IAAWy4B,EACNA,OAGMnmC,IAAX0N,EACK,QAGM,uBAAXA,EACKy4B,EAGe,uBAApBA,EACKz4B,EAEF,OACT,CAlcAhD,WAAAA,CAAYzH,GACV0H,MAAM1H,GACN+G,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,E,EAW0B,EAAGrH,YAC3B,MAAM,KAAEwI,GAASxI,EAAMI,WACjB3E,GAASC,EAAAA,EAAAA,YAAWm9B,EAAAA,IAC1B,OAAIrwB,EACK,kBAACogB,OAAAA,CAAK/sB,UAAWJ,EAAOq9B,cAAetwB,GAAQ,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,KAGxE,kBAACyd,EAAAA,mBAAkBA,CAACzmB,KAAM,c,KAPrBuB,e,EAfH62B,G,6aCNN,MAAMR,UAAuCr3B,EAAAA,GAc1C2jC,cAAAA,CAAehmB,EAA4BimB,OAAoCtmC,G,IAOrF,EANA,MAAMyjC,GAAsB8C,EAAAA,EAAAA,IAA2ClmB,GACjEmmB,GAAgBC,EAAAA,EAAAA,IAA2CpmB,GAC3DqmB,GAAkBC,EAAAA,EAAAA,IAA6CtmB,GAC/DumB,EAAiB58B,KAAK68B,wBAAwBxmB,GAGrC,QAAf,EAAArW,KAAK/G,MAAMkI,YAAX,SAAiBlI,MAAMmiC,QAAQp4B,SAASvJ,IACtC,GAAIA,aAAkBgiC,EAAAA,GAAoB,CAExC,MAAMqB,EAAe,IAAIt3B,IAAYg3B,aAAAA,EAAAA,EAAer6B,QAC9C46B,EAAkBtjC,EAAOR,MAAM3C,SAGrC,IAAK,IAAIuS,EAAI,EAAGA,EAAIk0B,EAAgB7jC,OAAQ2P,IAAK,CAC/C,MAAMimB,EAAWr1B,EAAOR,MAAM3C,SAASuS,GACvC,GAAIimB,aAAoBC,EAAAA,GAAkB,CACxC,MAAMvD,EAAQsD,EAAS71B,MAAMkI,KAC7B,GAAIqqB,aAAiBja,EAAAA,GAAU,CAC7B,GAAI+qB,EAAW,CACb,MAAM9X,EAAQgY,aAAAA,EAAAA,EAAer6B,OAAOkN,QAAQmc,EAAMvyB,MAAM5D,OAIxD,IAHuBmvB,IAAoB,IAAXA,EAAekY,aAAAA,EAAAA,EAAiBv6B,OAAOqiB,QAASxuB,KAGzDsmC,EAAW,CAChC,MAAMU,GAAYC,EAAAA,EAAAA,IAAqBzR,EAAMvyB,MAAM5D,MAAOokC,GACpDyD,EAAkBl9B,KAAKm9B,uBAC3B3R,EAAMvyB,MAAM5D,MACZokC,EACAuD,GAEFxR,EAAM9rB,SAAS,CACbuvB,MAAOiO,GAEX,CACF,CAEIJ,EAAan3B,IAAI6lB,EAAMvyB,MAAM5D,OAE/BynC,EAAaM,OAAO5R,EAAMvyB,MAAM5D,QAGhC0nC,EAAgB7wB,OAAOrD,EAAG,GAE1BA,IAEJ,MACExH,EAAAA,EAAOC,KAAK,yBAEhB,MACED,EAAAA,EAAOC,KAAK,mCAEhB,CAEA,MACMe,EADc2D,MAAMkS,KAAK4kB,GACHxjC,KAAK8yB,GAAcA,IAE/C2Q,EAAgBx5B,QAAQvD,KAAKq9B,cAAch7B,IAC3C06B,EAAgBt3B,KAAKzF,KAAKs9B,aAAaV,IAEvCG,EAAgBzjC,KAAKk7B,IACnBx0B,KAAKu9B,iBAAiB/I,EAAM,IAG9B/6B,EAAOiG,SAAS,CACdpJ,SAAUymC,GAEd,MACE17B,EAAAA,EAAOC,KAAK,mCACd,GAEJ,CAEQg8B,YAAAA,CAAaV,GACnB,MAAO,CAAC5lC,EAAqB0O,KAC3B,MAAM83B,EAASxmC,EAAEiC,MAAMkI,KACjBs8B,EAAS/3B,EAAEzM,MAAMkI,K,IACFy7B,EAArB,MAAMc,EAAoD,QAArCd,EAAAA,EAAe/6B,IAAI27B,EAAOvkC,MAAM5D,cAAhCunC,IAAAA,EAAAA,EAA0C,E,IAC1CA,EACrB,OAD0D,QAArCA,EAAAA,EAAe/6B,IAAI47B,EAAOxkC,MAAM5D,cAAhCunC,IAAAA,EAAAA,EAA0C,GACzCc,CAAY,CAEtC,CAEQb,uBAAAA,CAAwBxmB,GAC9B,MAAMojB,GAAsB8C,EAAAA,EAAAA,IAA2ClmB,GACjEumB,EAAiB,IAAIe,IAC3B,GAAIlE,aAAAA,EAAAA,EAAqBvgC,OACvB,IAAK,IAAI2P,EAAI,EAAGA,GAAI4wB,aAAAA,EAAAA,EAAqBvgC,QAAQ2P,IAAK,CACpD,MAAMnR,EAAe+hC,EAAoB9xB,OAAO,GAAGxF,OAAO0G,GACpD+0B,EAAsBnE,EAAoB9xB,OAAO,GAAGxF,OAAO0G,GACjE+zB,EAAeiB,IAAInmC,EAAMkmC,EAC3B,CAEF,OAAOhB,CACT,CAEA/8B,UAAAA,G,IAUiBi+B,EATf99B,KAAKN,SAAS,CACZyB,KAAMnB,KAAK4vB,UAGb,MAAMkO,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,SACXtf,IAAnC8nC,EAAa7kC,MAAM8kC,aACrB/9B,KAAKg+B,mBAGPh+B,KAAKkW,MAAMC,IAA0C,QAAtC2nB,EAAAA,EAAa7kC,MAAMglC,2BAAnBH,IAAAA,OAAAA,EAAAA,EAAwC1nB,iBAAiBpW,KAAKk+B,yBAC7El+B,KAAKkW,MAAMC,IAAInW,KAAKm+B,uBACtB,CAEQA,oBAAAA,GAGN,OAFkBroB,EAAAA,EAAAA,IAAkB9V,MAEnBoW,kBAAiB,CAACC,EAAUmB,KAC3C,MAAMsmB,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAC5C8oB,EAAa/nB,EAASvX,QAAQxF,KAAKmL,IAAMb,EAAAA,EAAAA,IAAyBa,GAAGf,SACrE26B,EAAa7mB,EAAU1Y,QAAQxF,KAAKmL,IAAMb,EAAAA,EAAAA,IAAyBa,GAAGf,SAEtE44B,GAAYgC,EAAAA,EAAAA,IAAuBF,GAGzC,GAAI9B,KAFcgC,EAAAA,EAAAA,IAAuBD,GAEZ,C,IACCP,EAA5B,MAAMS,EAA4D,QAAtCT,EAAAA,EAAa7kC,MAAMglC,2BAAnBH,IAAAA,OAAAA,EAAAA,EAAwC7kC,MAChEslC,GACFv+B,KAAKq8B,eAAekC,EAAqBjC,EAE7C,IAEJ,CAEO1M,KAAAA,G,IAU+CkO,EATpD,MACMz7B,GADkB22B,EAAAA,EAAAA,IAAwBh5B,MAChB/G,MAAMoJ,QAAQ/I,KAAKmmB,GAAQxW,OAAOwW,EAAIxc,SAEzCpK,EAAAA,GAAWwE,YAAY2C,KAAMm0B,EAAAA,IACrCl7B,MAAMkhB,OAAO/K,QAElC,MAAM9Y,EAAW0J,KAAKq9B,cAAch7B,GAE9By7B,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAC5CsnB,EAAiB58B,KAAK68B,wBAA8D,QAAtCiB,EAAAA,EAAa7kC,MAAMglC,2BAAnBH,IAAAA,OAAAA,EAAAA,EAAwC7kC,OAC5F3C,EAASmP,KAAKzF,KAAKs9B,aAAaV,IAChC,MAAM4B,EAAiBloC,EAASgD,KAAKk7B,GAAUA,EAAMxF,UAOrD,MAJA,IAAI14B,KAAakoC,GAAgBllC,KAAKk7B,IACpCx0B,KAAKu9B,iBAAiB/I,EAAM,IAGvB,IAAIgB,EAAAA,EAAe,CACxBnzB,QAAS,CACP,CAAEY,MAAO,OAAQpF,MAAO,QACxB,CAAEoF,MAAO,OAAQpF,MAAO,SAE1BinB,OAAQ,OACRsW,QAAS,CACP,IAAIK,EAAAA,GAAmB,CACrBC,gBAAiBC,EAAAA,GACjBC,SAAU,QACVtlC,SAAUA,EACVulC,QAAQ,IAEV,IAAIJ,EAAAA,GAAmB,CACrBC,gBAAiB,MACjBE,SAAU,QACVtlC,SAAUkoC,EACV3C,QAAQ,MAIhB,CAEQ0B,gBAAAA,CAAiB/I,GACvB,MAAMhJ,EAAQgJ,EAAMv7B,MAAMkI,K,IAGtBqqB,EAFAA,GACFxrB,KAAKkW,MAAMC,IACTqV,SAAkB,QAAlBA,EAAAA,EAAOvyB,MAAMg2B,aAAbzD,IAAAA,OAAAA,EAAAA,EAAoBiT,mBAAmB5tB,WAAW7L,IAC5CA,EAAO8lB,KAAK6P,QAAU31B,EAAO8lB,KAAK6P,OAAOzhC,OAAS,IACpDs7B,EAAM90B,SAAS,CAAEg/B,UAAU,IAC3B1+B,KAAKg+B,mBACP,IAIR,CAEOhO,gBAAAA,GACL,MAAMyJ,GAAsBC,EAAAA,EAAAA,IAAuB15B,MAC7C2+B,EAAe3+B,KAAK4+B,uBACpBtoC,EAA+B,G,IAEnCuoC,EADF,MAAMzQ,EACmF,QAAvFyQ,GAAAA,EAAAA,EAAAA,IAAe,YAAa,CAACzR,EAAAA,GAAkBmC,UAAWnC,EAAAA,GAAkBgC,oBAA5EyP,IAAAA,EAAAA,EACAzR,EAAAA,GAAkBgC,WAEpBuP,SAAAA,EAAc1lC,MAAM3C,SAAS0M,SAASwxB,IACpC,GAAIA,aAAiBzF,EAAAA,KAAqByF,EAAMv7B,MAAMylC,SAAU,CAC9D,MAAMI,EAASjmC,EAAAA,GAAWy7B,gBAAgBE,EAAOjjB,EAAAA,IACjD,GAAIutB,EAAO5lC,OAAQ,CAEjB,MACMwvB,EADQoW,EAAO,GACG7lC,MAAM5D,MACxB2nC,GAAYC,EAAAA,EAAAA,IAAqBvU,EAAW+Q,GAClD,IAAIsF,EAAAA,EAAAA,IAAW/B,GAAY,CACzB,MAAMgC,EAAWh/B,KAAKi/B,WAAWvW,EAAW+Q,EAAqBrL,GAC7D4Q,GACF1oC,EAASiN,KAAKy7B,EAElB,MACE1oC,EAASiN,KAAKixB,EAElB,CACF,KAGEl+B,EAAS4C,SACXylC,SAAAA,EAAcj/B,SAAS,CACrBpJ,aAGN,CAEQ+mC,aAAAA,CAAch7B,GACpB,MAAM/L,EAA+B,GAC/BmjC,GAAsBC,EAAAA,EAAAA,IAAuB15B,M,IAEjD6+B,EADF,MAAMzQ,EACmF,QAAvFyQ,GAAAA,EAAAA,EAAAA,IAAe,YAAa,CAACzR,EAAAA,GAAkBgC,WAAYhC,EAAAA,GAAkBmC,mBAA7EsP,IAAAA,EAAAA,EACAzR,EAAAA,GAAkBgC,WACpB,IAAK,MAAMjnB,KAAU9F,EAAS,CAC5B,GAAI8F,IAAW+2B,EAAAA,KAAuB/2B,EACpC,SAGF,MAAMqsB,EAAQx0B,KAAKi/B,WAAW92B,EAAQsxB,EAAqBrL,GACvDoG,GACFl+B,EAASiN,KAAKixB,EAElB,CACA,OAAOl+B,CACT,CAEQ2oC,UAAAA,CAAWvW,EAAmB+Q,EAA4CrL,GAChF,GAAI1F,IAAcwW,EAAAA,KAAuBxW,EACvC,OAGF,MAAMsU,GAAYC,EAAAA,EAAAA,IAAqBvU,EAAW+Q,GAC5CyD,EAAkBl9B,KAAKm9B,uBAAuBzU,EAAW+Q,EAAqBuD,GACpF,IAAI77B,EAEJ,MAAM+tB,EAAgB,IACjB6P,EAAAA,EAAAA,IAAW/B,IAcZ77B,EADgB,cAAditB,EACKe,EAAAA,GAAcI,YAEdJ,EAAAA,GAAcC,aAEvBjuB,EACGsuB,SAAS/G,GACTiH,QAAQuN,GACR1N,QAAQ,IAAIlC,EAAAA,GAAU,CAAEW,qBAAsB,CAAEvF,UAAWA,GAAa0F,eAC3Ec,EAAc3rB,KACZ,IAAI47B,EAAAA,EAAuB,CACzBzW,UAAWzf,OAAOyf,GAClB0W,oBAAoB,EACpBpC,UAAW9U,EAAAA,GAAW1hB,WAzB1BrF,EAAOguB,EAAAA,GAAcC,aAClBK,SAAS/G,GACTiH,QAAQuN,GACR1N,QAAQ,IAAIlC,EAAAA,GAAU,CAAEW,qBAAsB,CAAEvF,UAAWA,MAC3D2W,qBAAqB,WAAY,CAAEC,KAAMC,EAAAA,aAAaC,SACtDH,qBAAqB,cAAe,KACpCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAatD,EAAAA,UAAUC,MAC5C3M,aAAaC,EAAAA,IAChBJ,EAAc3rB,KAAK,IAAI47B,EAAAA,EAAuB,CAAEzW,UAAWzf,OAAOyf,GAAYsU,UAAW9U,EAAAA,GAAW1hB,UAmBtGrF,EAAKuuB,iBAAiBR,GACtB/tB,EAAKs+B,eAAeC,EAAAA,GACpBv+B,EAAKm6B,mBAAkB,GAEvB,MAAMxN,EAAM3sB,EAAKyuB,QACjB,OAAO,IAAIb,EAAAA,GAAiB,CAC1B5tB,KAAM2sB,GAEV,CAEQqP,sBAAAA,CACNnC,EACAvB,EACAuD,GAEA,MAAMphB,GAAiB9F,EAAAA,EAAAA,IAAkB9V,MACnC25B,GAAcC,EAAAA,EAAAA,IAAuBoB,EAAapf,EAAgB6d,GAClEnyB,GAAQ0yB,EAAAA,EAAAA,GAAeL,EAAa,CACxCrO,cAAcyT,EAAAA,EAAAA,IAAW/B,GAAahC,EAAc,KAAKA,MACzD9Q,MAAO8Q,IAGT,OAAO1B,EAAAA,EAAAA,IAAe,CAAChyB,GACzB,CAEQs3B,oBAAAA,G,IACE,EAA0D,EAA1D,EAAR,OAA6D,QAArD,EAAe,QAAf,EAAA5+B,KAAK/G,MAAMkI,YAAX,eAAiBlI,MAAMmiC,QAAQhX,MAAMub,GAAMA,EAAEruB,kBAA7C,QAAyE,QAAf,EAAAtR,KAAK/G,MAAMkI,YAAX,eAAiBlI,MAAMmiC,QAAQ,EAGnG,CAEQ4C,gBAAAA,G,IAMN7C,EAAAA,EALA,MAAMwD,EAAe3+B,KAAK4+B,uBACpBgB,EAAuBjB,aAAAA,EAAAA,EAAc1lC,MAAM3C,SAC3CupC,EAAeD,aAAAA,EAAAA,EAAsBzmC,QAAQq7B,IAAWA,EAAMv7B,MAAMylC,W,IAG5BmB,EAAH,QAA3C1E,GAAAA,EAD6BtiC,EAAAA,GAAWwE,YAAY2C,KAAMm0B,EAAAA,IACrCl7B,OAAM6mC,wBAA3B3E,IAAAA,GAAAA,EAAAA,KAAAA,EAAkE,QAApB0E,EAAAA,aAAAA,EAAAA,EAAc3mC,cAAd2mC,IAAAA,EAAAA,EAAwB,EACxE,CAEA,eAAchH,EAAS,MAAElgC,IACvB,MAAM,KAAEwI,GAASxI,EAAMI,WACvB,OAAO,oCAAGoI,GAAQ,kBAACq0B,EAAAA,EAAeqD,SAAQ,CAAClgC,MAAOwI,IACpD,CAhVAT,WAAAA,CAAYzH,GACV0H,MAAM1H,GAKR,OAAQilC,0BAA0B7nB,I,IAC5BA,GAAa,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,MAExC72B,KAAKq8B,eAAehmB,EACtB,IAPArW,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA8UA,EAnVW+vB,EAmVGr2B,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,GAASxI,EAAMI,WACjB3E,GAASC,EAAAA,EAAAA,YAAWm9B,EAAAA,IAC1B,OAAIrwB,EACK,kBAACogB,OAAAA,CAAK/sB,UAAWJ,EAAOq9B,cAAetwB,GAAQ,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,KAGxE,kBAACyd,EAAAA,mBAAkBA,CAACzmB,KAAM,c,idClW9B,MACMwjC,EAAyC,uCAiB/C,MAAMxH,UAA6Bz7B,EAAAA,GA8BhCmH,UAAAA,G,IAKKi+B,EAAAA,EA+BTA,EAnCF,MAAM/E,GAAkBC,EAAAA,EAAAA,IAAwBh5B,MAC1C89B,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAElDtV,KAAKN,SAAS,CACZqgC,SAA+C,QAAtCjC,EAAAA,EAAa7kC,MAAM+mC,2BAAnBlC,IAAAA,GAAkD,QAAlDA,EAAAA,EAAwC7kC,MAAM6xB,YAA9CgT,IAAAA,OAAAA,EAAAA,EAAoD7kC,SAAU29B,EAAAA,aAAaC,OAItF72B,KAAKkW,MAAMC,IACTnW,KAAKuW,iBAAiBud,EAAAA,GAAsB,KAC1C9zB,KAAK/G,MAAMkhB,OAAOya,kBAAkB,KAGxC50B,KAAKkW,MAAMC,IAAInW,KAAKuW,iBAAiB0pB,EAAAA,GAAqBjgC,KAAKkgC,qBAC/DlgC,KAAKkW,MAAMC,IAAI4iB,EAAgB3iB,iBAAiBpW,KAAKmgC,kBAErDngC,KAAKkW,MAAMC,KACTgB,EAAAA,EAAAA,IAAkBnX,MAAMoW,kBAAiB,CAACC,EAAUmB,KAClD,MAAMpe,GAAW4/B,EAAAA,EAAAA,IAAwBh5B,MACzC,IAAI,UAAE0oB,IAAc0X,EAAAA,EAAAA,MAEpB,MAAMC,EAAahqB,EAASvX,QAAQslB,MAAMjrB,GAAWA,EAAOK,MAAQkvB,IAC9D4X,EAAc9oB,EAAU1Y,QAAQslB,MAAMjrB,GAAWA,EAAOK,MAAQkvB,IAGlEtvB,EAASH,MAAMgK,QAAUi8B,EAAAA,IAAsBmB,IAAeC,GAChEtgC,KAAKN,SAAS,CACZqgC,SAAS,EACT5+B,UAAMnL,GAEV,KAIJgK,KAAKkW,MAAMC,IAC6B,QAAtC2nB,EAAAA,EAAa7kC,MAAMglC,2BAAnBH,IAAAA,OAAAA,EAAAA,EAAwC1nB,kBACtC,CAACC,EAA4BkqB,K,IACvBlqB,EACEA,EACiBA,GAFN,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,QAChB,QAApBxgB,EAAAA,EAASyU,KAAKY,cAAdrV,IAAAA,OAAAA,EAAAA,EAAuB,KACzBrW,KAAKwgC,cAAkC,QAApBnqB,EAAAA,EAASyU,KAAKY,cAAdrV,IAAAA,OAAAA,EAAAA,EAAuB,IAE9C,KAKN,MAAMojB,GAAsBC,EAAAA,EAAAA,IAAuB15B,MAE/Cy5B,GACFz5B,KAAKwgC,cAAc/G,IAGrBgH,EAAAA,EAAAA,IAAkBzgC,KACpB,CAcQwgC,aAAAA,CAAcE,GACpB,IAAKA,IAAcA,EAAUxnC,OAAQ,CACnC,MAAMkE,EAAavE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,GAGhD,IAAI6D,E,IAEF,IADF,IAHyBw/B,EAAAA,EAAAA,IAA6BvjC,GAGjClE,OAAS,EACD,QAA3B,KAAA8G,KAAK/G,OAAM6mC,wBAAX,gBAA8B,GAC9B3+B,EAAO,IAAIy/B,EAAAA,EAAsB,CAAEC,cAAe,KAAMC,EAAAA,EAAAA,IAAe9gC,aAEvEmB,EAAO,IAAIk2B,EAAAA,EAAiB,CAAEt7B,KAAM,WAMtC,YAJAiE,KAAKN,SAAS,CACZqgC,SAAS,EACT5+B,QAGJ,CAEA,MAAM28B,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,I,IAKzCwoB,GAJQ9E,EAAAA,EAAAA,IAAwBh5B,MAChCN,SAAS,CAChB2C,SAAS0+B,EAAAA,EAAAA,IAAgBL,EAAU/4B,OAAO,GAAGxF,OAAO7I,KAAKgK,GAAM2F,OAAO3F,MACtEy8B,SAAS,EACT98B,MAAwC,QAAjC66B,EAAAA,EAAa7kC,MAAMmc,sBAAnB0oB,IAAAA,EAAAA,EAAqCoB,EAAAA,KAE9Cl/B,KAAKN,SAAS,CACZqgC,SAAS,GAEb,CAyBQiB,UAAAA,CAAW3qB,GACjB,MAAMuF,GAAiBod,EAAAA,EAAAA,IAAwBh5B,MAG/C,IAAK4b,EAAe3iB,MAAMoJ,UAAYuZ,EAAe3iB,MAAMoJ,QAAQnJ,OACjE,OAGF,MAAM6b,EAAkD,CAAC,EAEzD,GAAI6G,EAAe3iB,MAAMoJ,SAAWuZ,EAAe3iB,MAAMoJ,QAAQnJ,QAAU,EAAG,CAE5E,MAAMkE,EAAavE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,G,IAI9C,IADF,IAFyBqjC,EAAAA,EAAAA,IAA6BvjC,GAEjClE,OAAS,EACD,QAA3B,KAAA8G,KAAK/G,OAAM6mC,wBAAX,gBAA8B,GAC9B/qB,EAAY5T,KAAO,IAAIy/B,EAAAA,EAAsB,CAAEC,cAAe,KAAMC,EAAAA,EAAAA,IAAe9gC,aAEnF+U,EAAY5T,KAAO,IAAIk2B,EAAAA,EAAiB,CAAEt7B,KAAM,UAEpD,MAEMsa,EAASpT,QAAUi8B,EAAAA,IAAsBl/B,KAAK/G,MAAMkI,gBAAgBovB,EAAAA,EACtExb,EAAY5T,KAAO,IAAI4uB,EAAAA,EAA+B,CAAC,GAC9C1Z,EAASpT,QAAUi8B,EAAAA,IAAsBl/B,KAAK/G,MAAMkI,gBAAgB4uB,EAAAA,EAC7Ehb,EAAY5T,KAAO,IAAIovB,EAAAA,EAA0B,CAAC,SAG9Bv6B,IAApBgK,KAAK/G,MAAMkI,MACXnB,KAAK/G,MAAMkI,gBAAgBk2B,EAAAA,GAC3Br3B,KAAK/G,MAAMkI,gBAAgBy/B,EAAAA,KAE3B7rB,EAAY5T,KACVkV,EAASpT,QAAUi8B,EAAAA,GACf,IAAInP,EAAAA,EAA+B,CAAC,GACpC,IAAIQ,EAAAA,EAA0B,CAAC,IAIzCvwB,KAAKN,SAASqV,EAChB,CA5LArU,WAAAA,CAAYzH,G,IAUOA,EACEA,EARfA,EAeKA,EAjBT0H,M,sUAAM,EACJqd,WACkB,QAAhB/kB,EAAAA,EAAM+kB,kBAAN/kB,IAAAA,EAAAA,EACA,IAAI6jB,EAAAA,GAAiB,CACnB9jB,UAAW,CACT,IAAIkkB,EAAAA,EAAuB,CACzBxlB,KAAMupC,EAAAA,GACNC,cAAc,EACdC,YAAY,EACZl+B,MAAkB,QAAXhK,EAAAA,EAAMgK,aAANhK,IAAAA,EAAAA,EAAeimC,EAAAA,GACtB78B,QAAsB,QAAbpJ,EAAAA,EAAMoJ,eAANpJ,IAAAA,EAAAA,EAAiB,QAIlC8mC,SAAS,EACTt6B,KAAM,IAAI27B,EAAAA,GAAY,CAAEnqC,OAAQ,WAChCkjB,OAAQ,IAAI6Z,EAAAA,EAAqB,UACjC/wB,MAAkB,QAAXhK,EAAAA,EAAMgK,aAANhK,IAAAA,EAAAA,EAAeimC,EAAAA,IACnBjmC,IAvBP,OAAUooC,sBAAsB,IAAIC,EAAAA,GAAyBthC,KAAM,CACjEuhC,cAAe,CAACtmB,EAAAA,OAoFlB,OAAQklB,mBAAkB,CAAC9pB,EAAuCkqB,MAE9DlqB,EAASpT,QAAUs9B,EAASt9B,SAC3Bkb,EAAAA,EAAAA,GAAe9H,EAAShU,QAASk+B,EAASl+B,eACvBrM,IAApBgK,KAAK/G,MAAMkI,MACXnB,KAAK/G,MAAMkI,gBAAgBk2B,EAAAA,GAC3Br3B,KAAK/G,MAAMkI,gBAAgBy/B,EAAAA,IAE3B5gC,KAAKghC,WAAW3qB,EAClB,IAkCF,OAAQ6pB,sBAAsBn3B,IAC5B,GAAqB,WAAjBA,EAAM9R,OACR,OAGF,MAAMkK,EAAOnB,KAAK/G,MAAMkI,K,IAEtBA,EADEA,aAAgBovB,EAAAA,GAA6BpvB,EAAKlI,MAAMkI,gBAAgBq0B,EAAAA,IAC3D,QAAfr0B,EAAAA,EAAKlI,MAAMkI,YAAXA,IAAAA,GAAAA,EAAiBlI,MAAMmiC,QAAQp4B,SAASvJ,IACdZ,EAAAA,GAAWy7B,gBAAgBnzB,EAAMozB,EAAAA,GACzCvxB,SAASe,GAAMA,EAAE0B,KAAKsD,EAAMmsB,OAAQnsB,EAAMiK,YAAW,MAGzE5W,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBklC,4BACpC,CACEvqC,OAAQ,SACRwqC,SAAU14B,EAAMmsB,OAChBliB,UAAWjK,EAAMiK,WACnB,IA8CJ,OAAO0uB,yBAAyBz+B,IAC9B,IAAKA,EACH,OAGF,MAAM7J,GAAW4/B,EAAAA,EAAAA,IAAwBh5B,OACnC,OAAEk1B,EAAM,UAAEliB,IAAcioB,EAAAA,EAAAA,IAAoB,SAAUC,EAAAA,gBAAiB,SAE7E9+B,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBqlC,kCACpC,CACEn7B,MAAOvD,EACP2+B,cAAexoC,EAASyoC,eACxBC,KAAM,SACN5M,SACA6M,gBAAiB/uB,IAIrB,MAAM8qB,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,KAClD0sB,EAAAA,EAAAA,IAAyB9Z,EAAAA,GAAW1hB,MAAOvD,EAAO66B,EAAa,IA5L/D99B,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA8LA,EA1NWm0B,EA0NGkH,cAAa,EAAG1iC,YAC5B,MAAM,KAAEwI,EAAI,QAAE4+B,EAAO,OAAE5lB,GAAWxhB,EAAMI,WAClC3E,GAASC,EAAAA,EAAAA,YAAWC,GACpB8E,GAAW4/B,EAAAA,EAAAA,IAAwBrgC,IACnC,QAAE0J,EAAO,MAAEY,GAAU7J,EAASL,WACpC,OACE,kBAACxE,MAAAA,CAAIC,UAAWJ,EAAO6tC,mBACpB9gC,aAAgB4uB,EAAAA,GAAkC,kBAACA,EAAAA,EAA+B8I,SAAQ,CAAClgC,MAAOwI,IAClGA,aAAgBovB,EAAAA,GAA6B,kBAACA,EAAAA,EAA0BsI,SAAQ,CAAClgC,MAAOwI,IACxFA,aAAgBovB,EAAAA,GAA6B,kBAACpW,EAAOzgB,UAAS,CAACf,MAAOwhB,KACrE4lB,GAAW19B,EAAQnJ,OAAS,GAC5B,kBAACq+B,EAAAA,EAAaA,CAAC15B,MAAM,QAAQwE,QAASA,EAASY,MAAOgG,OAAOhG,GAAQsd,SAAU5nB,EAAM+oC,wB,IAK7F,EA1OWvN,EA0OGqH,cAAa,EAAG7iC,YAC5B,MAAM,QAAEonC,EAAO,KAAEt6B,GAAS9M,EAAMI,WAC1B3E,GAASC,EAAAA,EAAAA,YAAWC,GACpB8E,GAAW4/B,EAAAA,EAAAA,IAAwBrgC,IACnC,MAAEsK,GAAU7J,EAASL,WAC3B,OACE,kBAACxE,MAAAA,CAAIC,UAAWJ,EAAO8tC,oBACnBnC,GAAW98B,IAAUi8B,EAAAA,IACrB,oCACE,kBAACz5B,EAAK/L,UAAS,CAACf,MAAO8M,K,IAOjC,EA1PW0uB,EA0PGz6B,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,EAAI,QAAE4+B,EAAO,gBAAEoC,GAAoBxpC,EAAMI,WAC3C3E,GAASC,EAAAA,EAAAA,YAAWC,GAE1B,OACE,kBAACC,MAAAA,CAAIC,UAAWJ,EAAOK,WACrB,kBAAC2tC,EAAAA,EAAkB,CAAEljB,UAAW6gB,EAASoC,mBACtChhC,aAAgB4uB,EAAAA,GAAkCp3B,GAAS,kBAACw7B,EAAqBkH,WAAU,CAAC1iC,MAAOA,IACpG,kBAACpE,MAAAA,CAAIC,UAAWJ,EAAOiuC,SAAUlhC,GAAQ,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,M,IAOnE,MAAMm2B,EAAmB,CAC9B9+B,MAAM7C,EAAAA,EAAAA,KAAI,CACR2sC,eAAgB,cAElBhe,QAAQ3uB,EAAAA,EAAAA,KAAI,CACVgC,WAAY,YAIhB,SAASrD,EAAUoB,GACjB,MAAO,CACLjB,WAAWkB,EAAAA,EAAAA,KAAI,CACbqL,SAAU,EACVpL,QAAS,OACTqL,UAAW,OACXjD,cAAe,SACfpG,IAAKlC,EAAMmC,QAAQ,KAErBwqC,SAAS1sC,EAAAA,EAAAA,KAAI,CACXqL,SAAU,EACVpL,QAAS,OACT2sC,WAAY7sC,EAAMmC,QAAQ,KAE5BoqC,mBAAmBtsC,EAAAA,EAAAA,KAAI,CACrBqL,SAAU,EACVpL,QAAS,OACTqH,WAAY,MACZpH,eAAgB,gBAChBmI,cAAe,cACfpG,IAAKlC,EAAMmC,QAAQ,KAErBqqC,mBAAmBvsC,EAAAA,EAAAA,KAAI,CACrBqL,SAAU,EACVpL,QAAS,OACTqH,WAAY,MACZrF,IAAKlC,EAAMmC,QAAQ,GACnBmG,cAAe,QAGrB,C,gbC1UO,MAAMwkC,UAAuC9pC,EAAAA,GASlDmH,UAAAA,G,IAYW4iC,EAXT,MAAM96B,GAASmO,EAAAA,EAAAA,IAAkB9V,MAE3ByiC,EADe5pC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IACbrc,MAAM+mC,oBAGtChgC,KAAK/G,MAAMkI,MAMPshC,SAA2B,QAA3BA,EAAAA,EAAiBxpC,MAAM6xB,YAAvB2X,IAAAA,OAAAA,EAAAA,EAA6BxpC,SAAU29B,EAAAA,aAAaC,MAC3D72B,KAAK0iC,OAAOD,aAAAA,EAAAA,EAAiBxpC,MAAM6xB,KAAKY,OAAO,IAN/C1rB,KAAKN,SAAS,CACZyB,KAAMnB,KAAK4vB,UAQf5vB,KAAKkW,MAAMC,IACTssB,aAAAA,EAAAA,EAAiBrsB,kBAAiB,CAACC,EAAUmB,K,IACvCnB,GAAa,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,MACxC72B,KAAK0iC,OAAOrsB,EAASyU,KAAKY,OAAO,GACnC,KAIJ1rB,KAAKkW,MAAMC,IACTxO,EAAOyO,kBAAiB,KACtBpW,KAAK2iC,qCAAqC,IAGhD,CAyBQC,eAAAA,CAAgBnpC,EAA4BoP,GAClD,MACM2iB,EADW/xB,EAAOR,MAAM3C,SAASuS,GAChB5P,MAAMkI,KAG7B,MAAO,CAAEqqB,QAAOn2B,MADFm2B,EAAMvyB,MAAM5D,MAE5B,CAEQqtC,MAAAA,CAAOG,G,IAIb,EAHA,MACMC,GADWC,EAAAA,EAAAA,IAAwB/iC,MACd/G,MAAMoJ,QAAQlJ,QAAQsmB,GAAQA,EAAIxc,QAAUi8B,EAAAA,KAAoB5lC,KAAKmmB,GAAQA,EAAI5hB,QAE7F,QAAf,EAAAmC,KAAK/G,MAAMkI,YAAX,SAAiBlI,MAAMmiC,QAAQp4B,SAASggC,IACtC,IAAIC,EAAiB,GACrB,MAAMxpC,EAASupC,EACTE,EAAe,IAAI19B,IAAYs9B,GAC/B/F,EAAkBtjC,EAAOR,MAAM3C,SAErC,IAAK,IAAIuS,EAAI,EAAGA,EAAIk0B,EAAgB7jC,OAAQ2P,IAAK,CAC/C,MAAM,MAAExT,GAAU2K,KAAK4iC,gBAAgBnpC,EAAQoP,GAE3Cq6B,EAAav9B,IAAItQ,GAEnB6tC,EAAa9F,OAAO/nC,IAGpB0nC,EAAgB7wB,OAAOrD,EAAG,GAE1BA,KAEFo6B,EAAe1/B,KAAKlO,EACtB,CAEA,MAEMgN,EAFc2D,MAAMkS,KAAKgrB,GAEH5pC,KAAK8yB,IACxB,CACLvuB,MAAOuuB,EACPnpB,MAAOmpB,MAIX2Q,EAAgBx5B,QAAQvD,KAAKq9B,cAAch7B,IAE3C,MAAMu6B,EAAiB58B,KAAK68B,wBAAwBgG,GACpD9F,EAAgBt3B,KAAKzF,KAAKs9B,aAAaV,IAEvCnjC,EAAOiG,SAAS,CACdpJ,SAAUymC,GACV,GAEN,CAEQF,uBAAAA,CAAwBsG,GAC9B,MAAMvG,EAAiB,IAAIe,IAC3B,GAAIwF,aAAAA,EAAAA,EAAgBjqC,OAClB,IAAK,IAAI2P,EAAI,EAAGA,GAAIs6B,aAAAA,EAAAA,EAAgBx7B,OAAOzO,QAAQ2P,IAAK,CACtD,MAAMnR,EAAeyrC,EAAex7B,OAAOkB,GAAGnR,KACxCkmC,EAAsBuF,EAAex7B,OAAOkB,GAAG1G,OAAO,GAC5Dy6B,EAAeiB,IAAInmC,EAAMkmC,EAC3B,CAEF,OAAOhB,CACT,CAEQhN,KAAAA,G,IASF6S,EARJ,MAAMrpC,GAAW2pC,EAAAA,EAAAA,IAAwB/iC,MACbnH,EAAAA,GAAWwE,YAAY2C,KAAMk0B,GACrCj7B,MAAMkhB,OAAO/K,QAEjC,MAAM9Y,EAAW0J,KAAKq9B,cAAcjkC,EAASH,MAAMoJ,SAG7CogC,EADe5pC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IACbrc,MAAM+mC,oBAC3C,IAAIyC,SAA2B,QAA3BA,EAAAA,EAAiBxpC,MAAM6xB,YAAvB2X,IAAAA,OAAAA,EAAAA,EAA6BxpC,SAAU29B,EAAAA,aAAaC,KAAM,CAC5D,MAAM+F,EAAiB58B,KAAK68B,wBAAwB4F,aAAAA,EAAAA,EAAiBxpC,MAAM6xB,KAAKY,OAAO,IACvFp1B,EAASmP,KAAKzF,KAAKs9B,aAAaV,GAClC,CAEA,MAAM4B,EAAiBloC,EAASgD,KAAKk7B,GAAUA,EAAMxF,UAErD,OAAO,IAAIwG,EAAAA,EAAe,CACxBnzB,QAAS,CACP,CAAEY,MAAO,OAAQpF,MAAO,QACxB,CAAEoF,MAAO,OAAQpF,MAAO,SAE1BinB,OAAQ,OACRsW,QAAS,CACP,IAAIK,EAAAA,GAAmB,CACrBI,QAAQ,EACRH,gBAAiB0H,EAAAA,GACjBxH,SAAU,QACVtlC,SAAUA,IAEZ,IAAImlC,EAAAA,GAAmB,CACrBI,QAAQ,EACRH,gBAAiB,MACjBE,SAAU,QACVtlC,SAAUkoC,MAIlB,CAEQnB,aAAAA,CAAch7B,GACpB,MAAM/L,EAA+B,GACrC,IAAK,MAAM6R,KAAU9F,EAAS,CAC5B,MAAM,MAAEY,GAAUkF,EACZ6yB,EAAc/xB,OAAOhG,GAC3B,GAAIA,IAAUi8B,EAAAA,KAAuBj8B,EACnC,SAEF,MAAMqE,GAAQ+7B,EAAAA,EAAAA,IAAiBrjC,KAAMiJ,OAAOd,EAAOlF,OAAQgG,OAAOd,EAAOlF,QACnE+nB,GAAcsO,EAAAA,EAAAA,IAAe,CAAChyB,IAEpChR,EAASiN,KACP,IAAIwrB,EAAAA,GAAiB,CACnB5tB,KAAMguB,EAAAA,GAAcC,aACjBK,SAASuL,GACTrL,QAAQ3E,GACR0E,iBAAiB,CAAC,IAAIyP,EAAAA,EAAuB,CAAEzW,UAAWsS,EAAagC,UAAW9U,EAAAA,GAAWrqB,UAC7FwhC,qBAAqB,WAAY,CAAEC,KAAMC,EAAAA,aAAaC,SACtDH,qBAAqB,cAAe,KACpCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAatD,EAAAA,UAAUC,MAC5CsH,gBAAe,GACfhI,mBAAkB,GAClBjM,aAAaC,EAAAA,IACbE,QAAQ,IAAIlC,EAAAA,GAAU,CAAEW,qBAAsB,CAAEvF,UAAWsS,MAC3DyE,eAAeC,EAAAA,GACf9P,UAGT,CACA,OAAOt5B,CACT,CAEQgnC,YAAAA,CAAaV,GACnB,MAAO,CAAC5lC,EAAqB0O,KAC3B,MAAM83B,EAASxmC,EAAEiC,MAAMkI,KACjBs8B,EAAS/3B,EAAEzM,MAAMkI,KACvB,GAAIq8B,EAAOvkC,MAAM5D,QAAUoR,EAAAA,GACzB,OAAQ,EAEV,GAAIg3B,EAAOxkC,MAAM5D,QAAUoR,EAAAA,GACzB,OAAO,E,IAEYm2B,EAArB,MAAMc,EAAoD,QAArCd,EAAAA,EAAe/6B,IAAI27B,EAAOvkC,MAAM5D,cAAhCunC,IAAAA,EAAAA,EAA0C,E,IAC1CA,EACrB,OAD0D,QAArCA,EAAAA,EAAe/6B,IAAI47B,EAAOxkC,MAAM5D,cAAhCunC,IAAAA,EAAAA,EAA0C,GACzCc,CAAY,CAEtC,CAEA,eAAc7E,EAAS,MAAElgC,IACvB,MAAM,KAAEwI,GAASxI,EAAMI,WACvB,OAAO,oCAAGoI,GAAQ,kBAACq0B,EAAAA,EAAeqD,SAAQ,CAAClgC,MAAOwI,IACpD,CA3NAT,WAAAA,CAAYzH,GACV0H,M,sUAAM,IACD1H,IAqCP,OAAQ0pC,uCAAsC,K,IAC5C,EAAe,QAAf,EAAA3iC,KAAK/G,MAAMkI,YAAX,SAAiBlI,MAAMmiC,QAAQp4B,SAASggC,IACtC,MAAMvpC,EAASupC,EAEf,IAAK,IAAIn6B,EAAI,EAAGA,EAAIpP,EAAOR,MAAM3C,SAAS4C,OAAQ2P,IAAK,CACrD,MAAM,MAAE2iB,EAAK,MAAEn2B,GAAU2K,KAAK4iC,gBAAgBnpC,EAAQoP,GAChDmiB,EAAgEQ,EAAMvyB,MAAMg2B,MAC5E3nB,GAAQ+7B,EAAAA,EAAAA,IAAiBrjC,KAAM3K,EAAOA,G,IAIvB21B,EAAAA,EADrB,GAAIA,aAAuBE,EAAAA,GACzB,GAAI5jB,EAAM9F,QAASwpB,SAA0B,QAA1BA,EAAAA,EAAa/xB,MAAMgxB,eAAnBe,IAAAA,GAA+B,QAA/BA,EAAAA,EAA6B,UAA7BA,IAAAA,OAAAA,EAAAA,EAAiCxpB,MAClD,MAIJgqB,EAAM9rB,SAAS,CACbuvB,OAAOqK,EAAAA,EAAAA,IAAe,CAAChyB,KAE3B,IACA,IAtDFtH,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAuNA,EA9NWwiC,EA8NG9oC,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,GAASxI,EAAMI,WACjB3E,GAASC,EAAAA,EAAAA,YAAWm9B,EAAAA,IAE1B,OAAIrwB,EACK,kBAACogB,OAAAA,CAAK/sB,UAAWJ,EAAOq9B,cAAetwB,GAAQ,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,KAGxE,kBAACyd,EAAAA,mBAAkBA,CAACzmB,KAAM,c,m6BCtN9B,MAAM+7B,UAA4Bx7B,EAAAA,GA+B/BmH,UAAAA,G,IAKKi+B,EAAAA,EACFA,EAAAA,EAUMA,EAff,MAAMA,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAC5CyjB,GAAkBgK,EAAAA,EAAAA,IAAwB/iC,MAEhDA,KAAKN,SAAS,CACZqgC,SAA+C,QAAtCjC,EAAAA,EAAa7kC,MAAM+mC,2BAAnBlC,IAAAA,GAAkD,QAAlDA,EAAAA,EAAwC7kC,MAAM6xB,YAA9CgT,IAAAA,OAAAA,EAAAA,EAAoD7kC,SAAU29B,EAAAA,aAAaC,KACpF70B,OAA6C,QAAtC87B,EAAAA,EAAa7kC,MAAM+mC,2BAAnBlC,IAAAA,GAAkD,QAAlDA,EAAAA,EAAwC7kC,MAAM6xB,YAA9CgT,IAAAA,OAAAA,EAAAA,EAAoD7kC,SAAU29B,EAAAA,aAAa30B,QAGpFjC,KAAKkW,MAAMC,IACTnW,KAAKuW,iBAAiBud,EAAAA,GAAsB,KAC1C9zB,KAAK/G,MAAMkhB,OAAOya,kBAAkB,KAGxC50B,KAAKkW,MAAMC,IAAInW,KAAKuW,iBAAiB0pB,EAAAA,GAAqBjgC,KAAKkgC,qBAE/DlgC,KAAKkW,MAAMC,IAA0C,QAAtC2nB,EAAAA,EAAa7kC,MAAM+mC,2BAAnBlC,IAAAA,OAAAA,EAAAA,EAAwC1nB,iBAAiBpW,KAAKujC,6BAE7EvjC,KAAKkW,MAAMC,KACTgB,EAAAA,EAAAA,IAAkBnX,MAAMoW,kBAAiB,CAACC,EAAUmB,KAClDxX,KAAKwjC,uBAAuBntB,EAAUmB,EAAU,KAIpDxX,KAAKkW,MAAMC,IACT4iB,EAAgB3iB,kBAAiB,CAACC,EAAUmB,KAC1CxX,KAAKyjC,wBAAwBptB,EAAUmB,EAAU,KAIrD,MAAMqrB,GAAsBxP,EAAAA,EAAAA,IAAuBrzB,MAE/C6iC,GACF7iC,KAAKwgC,cAAcqC,IAGrBpC,EAAAA,EAAAA,IAAkBzgC,KACpB,CAEQyjC,uBAAAA,CAAwBptB,EAAuCmB,IAGnEnB,EAASpT,QAAUuU,EAAUvU,SAC5Bkb,EAAAA,EAAAA,GAAe9H,EAAShU,QAASmV,EAAUnV,eACxBrM,IAApBgK,KAAK/G,MAAMkI,MACXnB,KAAK/G,MAAMkI,gBAAgBk2B,EAAAA,IAE3Br3B,KAAKghC,YAET,CAEQwC,sBAAAA,CACNntB,EACAmB,GAEA,IAAI,UAAEkR,IAAc0X,EAAAA,EAAAA,MAChB1X,IAAcgb,EAAAA,KAChBhb,EAAYib,EAAAA,IAEd,MAAMvqC,GAAW2pC,EAAAA,EAAAA,IAAwB/iC,MACnC4jC,EAAkBvtB,EAASvX,QAAQslB,MAAMjrB,GAAWA,EAAOK,MAAQkvB,IACnEmb,EAAmBrsB,EAAU1Y,QAAQslB,MAAMjrB,GAAWA,EAAOK,MAAQkvB,IAGvEtvB,EAASH,MAAMgK,QAAUi8B,EAAAA,IAAsB0E,IAAoBC,GACrE7jC,KAAKN,SAAS,CACZqgC,SAAS,EACT5+B,UAAMnL,EACNgM,WAAOhM,GAGb,CA6CQwqC,aAAAA,CAAc2C,GACpB,IAAKA,IAAmBA,EAAejqC,OAKrC,YAJA8G,KAAKN,SAAS,CACZqgC,SAAS,EACT5+B,KAAM,IAAIk2B,EAAAA,EAAiB,CAAEt7B,KAAM,aAIvC,MAAM3C,GAAW2pC,EAAAA,EAAAA,IAAwB/iC,MACnCqC,GAAUyhC,EAAAA,EAAAA,IAAgBX,EAAex7B,OAAOrO,KAAKuE,GAAUA,EAAMnG,Q,IAKlE,EAHT0B,EAASsG,SAAS,CAChBqgC,SAAS,EACT19B,UACAY,MAAuB,QAAhB,EAAAjD,KAAK/G,MAAMgK,aAAX,QAAoBi8B,EAAAA,IAE/B,CAEQ8B,UAAAA,GACN,MAAM5nC,GAAW2pC,EAAAA,EAAAA,IAAwB/iC,MAEzC,IAAK5G,EAASH,MAAMoJ,UAAYjJ,EAASH,MAAMoJ,QAAQnJ,OACrD,OAGF,MAAM6b,EAAiD,CACrDgrB,SAAS,EACToC,qBAAiBnsC,EACjBgM,OAAO,GAGL5I,EAAS2qC,eAAiB/jC,KAAK/G,MAAMkI,gBAAgBqvB,EAAAA,EACvDzb,EAAY5T,KAAO,IAAIqhC,EAA+B,CAAC,IAC7CppC,EAAS2qC,eAAiB/jC,KAAK/G,MAAMkI,gBAAgBqhC,EAC/DztB,EAAY5T,KAAO,IAAIqvB,EAAAA,EAA0B,CAAC,QACrBx6B,IAApBgK,KAAK/G,MAAMkI,KAChB/H,EAASH,MAAMoJ,QAAQnJ,OAAS,EAClC6b,EAAY5T,KAAO/H,EAAS2qC,cACxB,IAAIvB,EAA+B,CAAC,GACpC,IAAIhS,EAAAA,EAA0B,CAAC,GAEnCzb,EAAY5T,KAAO,IAAIk2B,EAAAA,EAAiB,CAAEt7B,KAAM,WAEzCiE,KAAK/G,MAAMkI,gBAAgBk2B,EAAAA,GAChCj+B,EAASH,MAAMoJ,QAAQnJ,OAAS,IAClC6b,EAAY5T,KAAO/H,EAAS2qC,cACxB,IAAIvB,EAA+B,CAAC,GACpC,IAAIhS,EAAAA,EAA0B,CAAC,IAIvCxwB,KAAKN,SAAS,KAAKqV,GACrB,CAjMArU,WAAAA,CAAYzH,G,IAWOA,EACEA,EARfA,EAHJ0H,MAAM,OACD1H,GAAAA,CACH+kB,WACkB,QAAhB/kB,EAAAA,EAAM+kB,kBAAN/kB,IAAAA,EAAAA,EACA,IAAI6jB,EAAAA,GAAiB,CACnB9jB,UAAW,CACT,IAAIkkB,EAAAA,EAAuB,CACzBxlB,KAAMssC,EAAAA,GACN9C,cAAc,EACdC,YAAY,EACZl+B,MAAkB,QAAXhK,EAAAA,EAAMgK,aAANhK,IAAAA,EAAAA,EAAeimC,EAAAA,GACtB78B,QAAsB,QAAbpJ,EAAAA,EAAMoJ,eAANpJ,IAAAA,EAAAA,EAAiB,QAIlC8mC,SAAS,EACTt6B,KAAM,IAAI27B,EAAAA,GAAY,CAAEnqC,OAAQ,WAChCkjB,OAAQ,IAAI6Z,EAAAA,EAAqB,UACjC/wB,MAAOhK,EAAMgK,SAxBjB,OAAUo+B,sBAAsB,IAAIC,EAAAA,GAAyBthC,KAAM,CACjEuhC,cAAe,CAACtmB,EAAAA,OA2GlB,OAAQsoB,8BAA6B,CAACltB,EAA4BmB,K,IAE9DnB,EACAA,EACgBA,EAAAA,EAAmCmB,EAAAA,EAAAA,EAG1CnB,EADUA,EALrB,IACe,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,OAClB,QAApBxgB,EAAAA,EAASyU,KAAKY,cAAdrV,IAAAA,OAAAA,EAAAA,EAAuB,OACtB8H,EAAAA,EAAAA,GAAmC,QAApB9H,EAAAA,EAASyU,KAAKY,cAAdrV,IAAAA,GAAyB,QAAzBA,EAAAA,EAAuB,UAAvBA,IAAAA,OAAAA,EAAAA,EAA2B1O,OAAsB,QAAd6P,EAAAA,EAAUsT,YAAVtT,IAAAA,GAAsB,QAAtBA,EAAAA,EAAgBkU,cAAhBlU,IAAAA,GAA2B,QAA3BA,EAAAA,EAAyB,UAAzBA,IAAAA,OAAAA,EAAAA,EAA6B7P,QAEhF3H,KAAKwgC,cAAkC,QAApBnqB,EAAAA,EAASyU,KAAKY,cAAdrV,IAAAA,OAAAA,EAAAA,EAAuB,SACrC,IAAiB,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KAAM,EAEpCkM,EAAAA,EAAAA,IAAwB/iC,MAChCN,SAAS,CAChBqgC,SAAS,GAEb,KAGF,OAAQG,sBAAsBn3B,IAC5B,GAAqB,WAAjBA,EAAM9R,OACR,OAEF,MAAMkK,EAAOnB,KAAK/G,MAAMkI,KACxB,GAAIA,aAAgBqvB,EAAAA,EAA2B,CACpB33B,EAAAA,GAAWy7B,gBAAgBnzB,EAAMozB,EAAAA,GACzCvxB,SAASvJ,IACxBA,EAAOgM,KAAKsD,EAAMmsB,OAAQnsB,EAAMiK,UAAU,GAE9C,EACA5W,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBklC,4BACpC,CACEvqC,OAAQ,SACRwqC,SAAU14B,EAAMmsB,OAChBliB,UAAWjK,EAAMiK,WACnB,IA0DJ,OAAOuN,YAAYtd,IACjB,IAAKA,EACH,OAGF,MAAM7J,GAAW2pC,EAAAA,EAAAA,IAAwB/iC,MACzC5G,EAASmhB,cAActX,GAEvB,MAAM,OAAEiyB,EAAM,UAAEliB,IAAcioB,EAAAA,EAAAA,IAAoB,SAAUC,EAAAA,gBAAiB,SAC7E9+B,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBqlC,kCACpC,CACE9jC,MAAOoF,EACPghC,cAAe7qC,EAASyoC,eACxBC,KAAM,SACN5M,SACA6M,gBAAiB/uB,IAIrB,MAAM8qB,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,KAClD0sB,EAAAA,EAAAA,IAAyB9Z,EAAAA,GAAWrqB,MAAOoF,EAAO66B,EAAa,IAnM/D99B,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA8PF,SAAS1L,EAAUoB,GACjB,MAAO,CACLjB,WAAWkB,EAAAA,EAAAA,KAAI,CACbqL,SAAU,EACVpL,QAAS,OACTqL,UAAW,OACXjD,cAAe,SACfpG,IAAKlC,EAAMmC,QAAQ,KAErBwqC,SAAS1sC,EAAAA,EAAAA,KAAI,CACXqL,SAAU,EACVpL,QAAS,OACT2sC,WAAY7sC,EAAMmC,QAAQ,KAE5BoqC,mBAAmBtsC,EAAAA,EAAAA,KAAI,CACrBqL,SAAU,EACVpL,QAAS,OACTqH,WAAY,MACZpH,eAAgB,gBAChBmI,cAAe,cACfpG,IAAKlC,EAAMmC,QAAQ,KAErBqqC,mBAAmBvsC,EAAAA,EAAAA,KAAI,CACrBqL,SAAU,EACVpL,QAAS,OACTqH,WAAY,MACZrF,IAAKlC,EAAMmC,QAAQ,GACnBmG,cAAe,QAGrB,CAvFE,EAlOWk2B,EAkOGmH,cAAa,EAAG1iC,YAC5B,MAAM,KAAEwI,EAAI,QAAE4+B,EAAO,OAAE5lB,GAAWxhB,EAAMI,WAClCK,GAAW2pC,EAAAA,EAAAA,IAAwBpqC,IACnC,QAAE0J,EAAO,MAAEY,GAAU7J,EAASL,WAC9B3E,GAASC,EAAAA,EAAAA,YAAWC,GAE1B,OACE,kBAACC,MAAAA,CAAIC,UAAWJ,EAAO6tC,mBACpB9gC,aAAgBqvB,EAAAA,GAA6B,kBAACA,EAAAA,EAA0BqI,SAAQ,CAAClgC,MAAOwI,IACxFA,aAAgBqhC,GAAkC,kBAACA,EAA+B3J,SAAQ,CAAClgC,MAAOwI,IAClGA,aAAgBqvB,EAAAA,GAA6B,kBAACrW,EAAOzgB,UAAS,CAACf,MAAOwhB,KACrE4lB,GAAW19B,EAAQnJ,OAAS,GAC5B,kBAACq+B,EAAAA,EAAaA,CAAC15B,MAAM,QAAQwE,QAASA,EAASY,MAAOgG,OAAOhG,GAAQsd,SAAU5nB,EAAM4nB,W,IAM7F,EApPW2T,EAoPGsH,cAAa,EAAG7iC,YAC5B,MAAM,QAAEonC,EAAO,KAAEt6B,GAAS9M,EAAMI,WAC1BK,GAAW2pC,EAAAA,EAAAA,IAAwBpqC,IACnC,MAAEsK,GAAU7J,EAASL,WACrB3E,GAASC,EAAAA,EAAAA,YAAWC,GAE1B,OACE,kBAACC,MAAAA,CAAIC,UAAWJ,EAAO8tC,oBACnBnC,GAAW98B,IAAUi8B,EAAAA,IACrB,oCACE,kBAACz5B,EAAK/L,UAAS,CAACf,MAAO8M,K,IAOjC,EArQWyuB,EAqQGx6B,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,EAAI,QAAE4+B,EAAO,gBAAEoC,EAAe,MAAEngC,GAAUrJ,EAAMI,WAClD3E,GAASC,EAAAA,EAAAA,YAAWC,GAE1B,OACE,kBAACC,MAAAA,CAAIC,UAAWJ,EAAOK,WACrB,kBAAC2tC,EAAAA,EAAkB,CAAEljB,UAAW6gB,EAASoC,mBACtCngC,GACC,kBAACpL,EAAAA,MAAKA,CAACvB,MAAM,GAAGyB,SAAS,WAAU,uGAKpCqK,aAAgBqhC,GAAkC7pC,GAAS,kBAACu7B,EAAoBmH,WAAU,CAAC1iC,MAAOA,IAEnG,kBAACpE,MAAAA,CAAIC,UAAWJ,EAAOiuC,SAAUlhC,GAAQ,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,M,y+CCrQnE,MAAMqvB,UAAkC93B,EAAAA,GAU7CmH,UAAAA,GACEG,KAAKN,SAAS,CACZuvB,MAAOjvB,KAAKk5B,mBACZ/3B,KAAMnB,KAAK4vB,UAIb5vB,KAAKo5B,WACLp5B,KAAKq5B,kBACP,CAEQH,gBAAAA,GACN,MAAM5xB,EAAQtH,KAAKi5B,aACnB,OAAOK,EAAAA,EAAAA,IAAe,CAAChyB,GAAQ,CAAEiyB,eAAgB,UACnD,CAEQN,UAAAA,GACN,MAAM3xB,GAAQ+7B,EAAAA,EAAAA,IAAiBrjC,KAAMkkC,EAAAA,GAAyBj7B,QAAO85B,EAAAA,EAAAA,IAAwB/iC,MAAM/G,MAAMgK,SAEnG,aAAEmwB,EAAY,iBAAEyG,GAAqB75B,KAAKmkC,4CAEhD,OADA78B,EAAM9F,KAAO8F,EAAM9F,KAAKqB,QAAQ,MAAMuwB,KAAiByG,GAChDvyB,CACT,CAKA,mB,IAII,EADFtH,KAAKkW,MAAMC,IACO,QAAhB,EAAAnW,KAAK/G,MAAMg2B,aAAX,eAAkB7Y,kBAAiB,CAACC,EAAUmB,KAC5CxX,KAAKm5B,wBAAwB9iB,EAAS,KAM1CrW,KAAKkW,MAAMC,KACT4sB,EAAAA,EAAAA,IAAwB/iC,MAAMoW,kBAAkBC,IAC1CA,EAASpT,QAAUi8B,EAAAA,IACrBl/B,KAAKN,SAAS,CACZuvB,WAAOj5B,EACPmL,UAAMnL,GAEV,KAKJgK,KAAKkW,MAAMC,IACTtd,EAAAA,GAAWqZ,aAAalS,MAAMoW,kBAAiB,KAE7CpW,KAAKo5B,UAAU,KAInBp5B,KAAKkW,MAAMC,KACTL,EAAAA,EAAAA,IAAkB9V,MAAMoW,kBAAiB,CAACC,EAAUmB,MAC7C2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAE9CkB,KAAKo5B,UACP,KAKJp5B,KAAKkW,MAAMC,KACTQ,EAAAA,EAAAA,IAAoB3W,MAAMoW,kBAAiB,CAACC,EAAUmB,MAC/C2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKo5B,UACP,KAKJp5B,KAAKkW,MAAMC,KACTkN,EAAAA,EAAAA,IAAuBrjB,MAAMoW,kBAAiB,CAACC,EAAUmB,MAClD2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKo5B,UACP,KAKJp5B,KAAKkW,MAAMC,KACTP,EAAAA,EAAAA,IAAoB5V,MAAMoW,kBAAiB,CAACC,EAAUmB,KAChDnB,EAASpT,QAAUuU,EAAUvU,OAC/BjD,KAAKo5B,UACP,KAIJ,MAAM5/B,EAAMwG,KAAK84B,Y,WAEjB94B,KAAKkW,MAAMC,KACTgB,EAAAA,EAAAA,IAAkBnX,MAAMoW,iBAAgB,W,MAAC,aAAOC,EAAUmB,IAErD2G,EAAAA,EAAAA,GACC9H,EAASvX,QAAQ3F,QAAQsL,GAAMjL,IAAQiN,EAAAA,IAAwBhC,EAAEjL,MAAQA,IACzEge,EAAU1Y,QAAQ3F,QAAQsL,GAAMjL,IAAQiN,EAAAA,IAAwBhC,EAAEjL,MAAQA,MAG5E,EAAK4/B,UAET,I,gBATgD/iB,EAAUmB,G,gCAAlB,K,WAY1CxX,KAAKkW,MAAMC,KACTF,EAAAA,EAAAA,IAAkBjW,MAAMoW,iBAAgB,W,MAAC,aAAOC,EAAUmB,IAErD2G,EAAAA,EAAAA,GACC9H,EAASvX,QAAQ3F,QAAQsL,GAAMjL,IAAQiN,EAAAA,IAAwBhC,EAAEjL,MAAQA,IACzEge,EAAU1Y,QAAQ3F,QAAQsL,GAAMjL,IAAQiN,EAAAA,IAAwBhC,EAAEjL,MAAQA,MAG5E,EAAK4/B,UAET,I,gBATgD/iB,EAAUmB,G,gCAAlB,IAW5C,CAKA,e,IAEE,EAAwB,QAAxB,EAAAxX,KAAKo6B,6BAAL,SAA4B16B,SAAS,CACnCuqB,QAAS,CAACjqB,KAAKi5B,eAEnB,CAMA,WACEj5B,KAAKq6B,eACL,MAAMrP,EAAchrB,KAAKo6B,sBACzBpP,SAAAA,EAAasP,YACf,CAKA,sBACE,GAAIt6B,KAAK/G,MAAMg2B,MAAO,CACpB,MAAMsL,EAAe1hC,EAAAA,GAAWy7B,gBAAgBt0B,KAAK/G,MAAMg2B,MAAO/D,EAAAA,IAClE,GAA4B,IAAxBqP,EAAarhC,OAAc,CAC7B,MAAM8I,EAAQ,IAAIC,MAAM,mDAExB,MADAZ,EAAAA,EAAOW,MAAMA,EAAO,CAAEgC,IAAK,+EACrBhC,CACR,CAEA,OAAOu4B,EAAa,EACtB,CACAl5B,EAAAA,EAAOC,KAAK,4FAEd,CAOA,4CACE,MAAMk4B,EAASx5B,KAAK84B,YACpB,IAAIe,EACAzG,EAEJ,GAAIoG,IAAW/yB,EAAAA,GAAsB,CACnC,MAAMuY,GAAY/I,EAAAA,EAAAA,IAAkBjW,MACpCozB,EAAexwB,EAAAA,GACfi3B,GAAmB3d,EAAAA,EAAAA,IAAmB8C,EAAU/lB,MAAM6F,QAAS,CAAC06B,GAClE,KAAO,CACL,MAAMtiB,GAAYC,EAAAA,EAAAA,IAAkBnX,MACpCozB,EAAenY,EAAAA,GACf4e,GAAmBxe,EAAAA,EAAAA,IAAwBnE,EAAUje,MAAM6F,QAAS,CAAC06B,GACvE,CAEA,MAAO,CAAEK,mBAAkBzG,eAC7B,CAKA,YACE,MAAMh6B,GAAW2pC,EAAAA,EAAAA,IAAwB/iC,MACzC,OAAOiJ,OAAO7P,EAASH,MAAMgK,MAC/B,CAKA,wBAAgCoT,GAE9BrW,KAAKokC,eAAe/tB,GAGpBrW,KAAKqkC,eAAehuB,EACtB,CAKA,eAAuBA,G,IAEjBA,EAA0BA,EAA9B,IAAIA,SAAc,QAAdA,EAAAA,EAAUyU,YAAVzU,IAAAA,OAAAA,EAAAA,EAAgBskB,UAAuB,QAAbtkB,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KAAM,C,IAExExgB,EADA,MAAMskB,EAAwB36B,KAAK/G,MAAM0hC,OACzCtkB,SAAc,QAAdA,EAAAA,EAAUyU,YAAVzU,IAAAA,GAAAA,EAAgBskB,OAAO33B,SAAS43B,IAC9B,MAAM0J,EAAa,GAAG1J,EAAIC,UAAUD,EAAIG,WAAWH,EAAInkC,eAC5BT,IAAvB2kC,EAAO2J,KACT3J,EAAO2J,GAAc,OAAK1J,GAAAA,CAAK2J,WAAW,IAC5C,IAEFvkC,KAAKN,SAAS,CACZi7B,WAGF36B,KAAKwkC,eAAexkC,KAAK/G,MAAM0hC,OACjC,CACF,CAKA,eAAuBtkB,G,IACjBA,EAAJ,IAAiB,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KACxC,GAAIxgB,EAASyU,KAAKY,OAAOxyB,OAAS,KAAO8G,KAAK/G,MAAMkI,gBAAgBq0B,EAAAA,GAClEx1B,KAAKN,SAAS,CACZyB,KAAMnB,KAAK4vB,eAER,GAAoC,IAAhCvZ,EAASyU,KAAKY,OAAOxyB,OAAc,CAC5C,MAAMkE,EAAavE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,IACvBqjC,EAAAA,EAAAA,IAA6BvjC,GAEjClE,OAAS,EAC5B8G,KAAKN,SAAS,CACZyB,KAAM,IAAIy/B,EAAAA,EAAsB,CAAEC,cAAe,KAAMC,EAAAA,EAAAA,IAAe9gC,UAGxEA,KAAKN,SAAS,CACZyB,KAAM,IAAIk2B,EAAAA,EAAiB,CAAEt7B,KAAM,YAGzC,CAEJ,CAKA,kBACE,MAAMw5B,EAAiBv1B,KAAK/G,MAAMkI,KAClC,GAAIo0B,aAA0BC,EAAAA,EAAgB,CAC5C,MAAMmJ,EAAepJ,aAAAA,EAAAA,EAAgBt8B,MAAMmiC,QAAQhX,MAAM3qB,GAAWA,EAAO6X,WAC3E,GAAIqtB,aAAwBp/B,EAAAA,GAC1B,OAAOo/B,CAEX,CAEF,CAKA,+BACE,MAAMA,EAAe3+B,KAAKykC,kBAC1B,GAAI9F,EAAc,CAEhB,OADyB9lC,EAAAA,GAAWy7B,gBAAgBqK,EAAcpK,EAAAA,GAC1C5vB,MAAM+/B,IAC5B,MAAMlQ,EAAQkQ,EAASzrC,MAAMkI,KAAKlI,MAAM3C,SAAS,GACjD,OAAOk+B,aAAiBlX,EAAAA,IAAiBkX,aAAiBuC,EAAAA,EAAgBA,GAE9E,CAEA,OAAO,CACT,CAKA,QACE,MACM4N,GADW5B,EAAAA,EAAAA,IAAwB/iC,MACV/G,MACzBugC,EAASvwB,OAAO07B,aAAAA,EAAAA,EAAe1hC,OAC/B2hC,EAAsB/rC,EAAAA,GAAWwE,YAAY2C,KAAMk0B,EAAAA,GAEzD,IAAI2Q,EAAW1V,EAAAA,GAAcC,aAC7ByV,EAAWA,EACRxF,qBAAqB,WAAY,CAAEC,KAAMC,EAAAA,aAAaC,SACtDH,qBAAqB,cAAe,KACpCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAatD,EAAAA,UAAUC,MAC5CV,mBAAkB,GAClBjM,aAAaC,EAAAA,IACbE,QAAQ,IAAIlC,EAAAA,GAAU,CAAC,IACvBmC,SAAS+J,GAEZ,MAAMr4B,EAAO0jC,EAASjV,SAEhB,OAAEsF,EAAM,UAAEliB,IAAcioB,EAAAA,EAAAA,IAAoB,SAAUC,EAAAA,gBAAiB,QAEvE9P,EAAY,K,IAAMwZ,E,OAA6C,QAA7CA,EAAAA,EAAoB3rC,MAAMkhB,OAAOlhB,MAAME,cAAvCyrC,IAAAA,EAAAA,EAAiD,EAAE,EAE3E,OAAO,IAAIpP,EAAAA,EAAe,CACxBnzB,QAAS,CACP,CAAEY,MAAO,SAAUpF,MAAO,UAC1B,CAAEoF,MAAO,OAAQpF,MAAO,QACxB,CAAEoF,MAAO,OAAQpF,MAAO,SAE1BinB,OAAQ,OACRsW,QAAS,CACP,IAAI77B,EAAAA,GAAgB,CAClByT,UAAW,SACX1c,SAAU,CACR,IAAIygC,EAAAA,GAAiB,CAAEC,UAAW,kBAAC9C,EAAAA,EAAoBmH,WAAU,CAAC1iC,MAAOisC,MACzE,IAAItnB,EAAAA,GAAc,CAChBrc,UAAW,IACXE,YAIN,IAAI5B,EAAAA,GAAgB,CAClByT,UAAW,SACX1c,SAAU,CACR,IAAIygC,EAAAA,GAAiB,CAAEC,UAAW,kBAAC9C,EAAAA,EAAoBmH,WAAU,CAAC1iC,MAAOisC,MACzE,IAAIrJ,EAAAA,GAAuB,CAAElmC,MAAOmkC,EAAQsL,YAAY,EAAMtL,OAAQx5B,KAAK84B,YAAa/8B,KAAM,UAC9F,IAAIg7B,EAAAA,GAAiB,CAAEC,UAAW,kBAAC9C,EAAAA,EAAoBsH,WAAU,CAAC7iC,MAAOisC,MACzE,IAAIrQ,EAAAA,EAAgB,CAClBpzB,KAAM,IAAIs6B,EAAAA,GAAmB,CAC3BI,QAAQ,EACRH,gBAAiB0H,EAAAA,GACjBxH,SAAU,QACVtlC,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI41B,EAAAA,GAAiB,CACzBC,UAAW,kBAACpY,EAAAA,mBAAkBA,CAACzmB,KAAK,sBAK5Ck9B,gBAAgByG,EAAAA,EAAAA,IACd9F,EAAAA,GACA+F,EAAAA,UAAUC,KACV/gB,EAAAA,GACApiB,EAAAA,GAAWwE,YAAY2C,KAAMk0B,EAAAA,GAAqBj7B,MAAMwM,KACxD+zB,GAEFtE,SACAliB,YACAoY,iBAIN,IAAI7rB,EAAAA,GAAgB,CAClByT,UAAW,SACX1c,SAAU,CACR,IAAIygC,EAAAA,GAAiB,CAAEC,UAAW,kBAAC9C,EAAAA,EAAoBmH,WAAU,CAAC1iC,MAAOisC,MACzE,IAAIrJ,EAAAA,GAAuB,CAAElmC,MAAOmkC,EAAQsL,YAAY,EAAMtL,OAAQx5B,KAAK84B,YAAa/8B,KAAM,UAC9F,IAAIg7B,EAAAA,GAAiB,CAAEC,UAAW,kBAAC9C,EAAAA,EAAoBsH,WAAU,CAAC7iC,MAAOisC,MACzE,IAAIrQ,EAAAA,EAAgB,CAClBpzB,KAAM,IAAIs6B,EAAAA,GAAmB,CAC3BC,gBAAiB,MACjBE,SAAU,QACVtlC,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI41B,EAAAA,GAAiB,CACzBC,UAAW,kBAACpY,EAAAA,mBAAkBA,CAACzmB,KAAK,sBAK5Ck9B,gBAAgByG,EAAAA,EAAAA,IACd9F,EAAAA,GACA+F,EAAAA,UAAUC,KACV/gB,EAAAA,GACApiB,EAAAA,GAAWwE,YAAY2C,KAAMk0B,EAAAA,GAAqBj7B,MAAMwM,KACxD+zB,GAEFtE,SACAliB,YACAoY,mBAMZ,CAEQoZ,cAAAA,CAAe7J,GACrB,MAAMrqB,GAAYC,EAAAA,EAAAA,gBAGlB,IAAIw0B,EAA6B,GACjC,IAAK,MAAMnK,KAAOD,EAAQ,CACxB,MAAMqK,EAAerK,EAAOC,GACvBoK,EAAaT,YAChBQ,EAAWxhC,KAAKyhC,GAChBA,EAAaT,WAAY,EAE7B,CAEIQ,EAAW7rC,SAER8G,KAAKilC,gCACR30B,EAAU6B,QAAQ,CAChBpW,KAAMuc,EAAAA,UAAU4sB,WAAWxtC,KAC3BqZ,QAASg0B,aAAAA,EAAAA,EAAYzrC,KAAI,CAACshC,EAAKphC,IAAQwG,KAAKmlC,YAAY3rC,EAAKohC,OAGjE56B,KAAKN,SAAS,CACZi7B,WAGN,CAEQwK,WAAAA,CAAY3rC,EAAaohC,GAC/B,OACE,kBAACrmC,MAAAA,CAAIiF,IAAKA,GACPohC,EAAIC,QACH,oCACE,kBAACC,SAAAA,KAAO,UAAe,KAAGF,EAAIC,OAAO,IAAC,kBAACzjC,KAAAA,OAG1CwjC,EAAInkC,SACH,oCACE,kBAACqkC,SAAAA,KAAO,WAAgB,KAAGF,EAAInkC,QAAQ,IAAC,kBAACW,KAAAA,OAG5CwjC,EAAIG,SACH,oCACE,kBAACD,SAAAA,KAAO,WAAgB,KAAGF,EAAIG,SAKzC,CAEA,eAAclC,EAAS,MAAElgC,IACvB,MAAM,KAAEwI,GAASxI,EAAMI,WACvB,OAAO,oCAAGoI,GAAQA,aAAgBq0B,EAAAA,GAAkB,kBAACA,EAAAA,EAAeqD,SAAQ,CAAClgC,MAAOwI,IACtF,CApcAT,WAAAA,CAAYzH,GACV0H,MAAM,OACD1H,GAAAA,CACH0hC,OAAQ,CAAC,KAGX36B,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA+bA,EAvcWwwB,EAucG92B,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,GAASxI,EAAMI,WACjB3E,GAASC,EAAAA,EAAAA,YAAWm9B,EAAAA,IAC1B,OAAIrwB,EACK,kBAACogB,OAAAA,CAAK/sB,UAAWJ,EAAOq9B,cAAetwB,GAAQ,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,KAGxE,kBAACyd,EAAAA,mBAAkBA,CAACzmB,KAAM,c,wrBCrf9B,MAAMq9B,UAAuB98B,EAAAA,GAElCgI,WAAAA,CAAYzH,G,IAGAA,EAFV0H,MAAM,E,sUAAA,IACD1H,GAAAA,CACH6rB,OAAoB,QAAZ7rB,EAAAA,EAAM6rB,cAAN7rB,IAAAA,EAAAA,EAAgB,UAM5B,OAAOmsC,wBAAuB,IAETplC,KAAK/G,MAAMoJ,QAAQgjC,OAAOh0B,GAAkB,WAAZA,EAAEpO,UAIvD,OAAOqiC,gBAAe,KACpB,MAAM7rC,GAAS8rC,EAAAA,EAAAA,MACX9rC,IACa,WAAXA,GAAoCuG,KAAKolC,uBAE3CplC,KAAKN,SAAS,CAAEolB,OAAQ,SAExB9kB,KAAKN,SAAS,CACZolB,OACa,SAAXrrB,GAA6C,SAAXA,GAA6C,WAAXA,EAChEA,EAAAA,SAIZ,IAGF,OAAO+rC,kBAAkB1gB,KACvB1oB,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkBC,gBAAiBC,EAAAA,GAAoBD,gBAAgBmpC,oBAAqB,CAC/GhsC,OAAQqrB,EACRgd,MAAM/hC,EAAAA,EAAAA,SAER2lC,EAAAA,EAAAA,IAAe5gB,GACf9kB,KAAKN,SAAS,CAAEolB,UAAS,IAG3B,OAAOjlB,cAAa,KAClBG,KAAKslC,cAAc,IApCnBtlC,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EARA,EADWw1B,EACGqD,YA4DhB,UAAiC,MAAElgC,IACjC,MAAM,OAAEmsB,EAAM,QAAEziB,GAAY1J,EAAMI,WAC5B3E,GAASC,EAAAA,EAAAA,YAAWC,GAE1B,OACE,kBAACqxC,EAAAA,MAAKA,CAACnxC,UAAWJ,EAAOoS,OACvB,kBAACo/B,EAAAA,iBAAgBA,CAACvjC,QAASA,EAASY,MAAO6hB,EAAQvE,SAAU5nB,EAAM6sC,iBAGzE,IAvBE,EA/CWhQ,EA+CG97B,aAAY,EAAGf,YAC3B,MAAM,QAAEyiC,EAAO,QAAE/4B,EAAO,OAAEyiB,GAAWnsB,EAAMI,WAErCyrB,EAAQniB,EAAQwjC,WAAWx0B,GAAMA,EAAEpO,QAAU6hB,IACnD,IAAe,IAAXN,EACF,OAAO,KAGT,MAAM/qB,EAAS2hC,EAAQ5W,GAEvB,OAAO,kBAAC/qB,EAAOC,UAAS,CAACf,MAAOc,G,IAepC,MAAMnF,EAAaoB,IACV,CACL8Q,OAAO7Q,EAAAA,EAAAA,KAAI,CACTif,aAAc,K,uGC1Fb,MAAMgsB,UAA8BloC,EAAAA,I,EACf,EAAGC,YAC3B,MAAM,cAAEkoC,GAAkBloC,EAAMI,WAChC,OACE,kBAAC1C,EAAAA,EAASA,KACR,kBAACO,EAAAA,MAAKA,CAACvB,MAAM,GAAGyB,SAAS,QAAO,iCACC,IAC/B,kBAACpC,EAAAA,OAAMA,CAACF,UAAW8iC,EAAAA,GAAiBhT,OAAQtvB,QAAS,IAAM6rC,KAAiB,iBAElE,Q,EARJnnC,e,EADHknC,G,6YCoCN,MAAMrF,UAA+B7iC,EAAAA,GAmB1CmH,UAAAA,G,IAEIg/B,EADF,MAAMrQ,EACuF,QAA3FqQ,GAAAA,EAAAA,EAAAA,IAAe,YAAa,CAACxR,EAAAA,GAAqBmB,UAAWnB,EAAAA,GAAqBxzB,kBAAlFglC,IAAAA,EAAAA,EACAxR,EAAAA,GAAqBxzB,SACjBi0B,EAoMV,SAAgCz4B,EAAegN,G,IAE3Cw8B,EADF,MAAMrQ,EACuF,QAA3FqQ,GAAAA,EAAAA,EAAAA,IAAe,YAAa,CAACxR,EAAAA,GAAqBmB,UAAWnB,EAAAA,GAAqBxzB,kBAAlFglC,IAAAA,EAAAA,EACAxR,EAAAA,GAAqBxzB,SAEjBsH,EAAOguB,EAAAA,GAAcC,aACxBK,SAASp6B,GACTm6B,QAAQ,IAAIlC,EAAAA,GAAU,CAAC,IACvBwY,gBAAe,GACfC,aAAavX,IAAcnB,EAAAA,GAAqBmB,WAChD6Q,qBAAqB,WAAY,CAAEC,KAAMC,EAAAA,aAAaC,SACtDH,qBAAqB,cAAe,KACpCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAatD,EAAAA,UAAUC,MAC5CV,mBAAkB,GAClBmE,eApP8B,MAsP7Bp9B,aAAAA,EAAAA,EAASyiC,aACX3jC,EAAKkuB,aAAaC,EAAAA,IAEpB,OAAOnuB,EAAKyuB,OACd,CA1NgBoW,CAAuBhmC,KAAK/G,MAAM5D,MAAO,CAAEyvC,WAAY9kC,KAAK/G,MAAM6rC,aACxEpwB,EAASuxB,EAAsBzX,GAErCV,EAAIpuB,SAAS,CACXwmC,mBAAoB,CAACj+B,EAAG2iB,IAAY5qB,KAAKmmC,0BAA0Bvb,KAGrE5qB,KAAKN,SAAS,CACZyB,KAAM,IAAI5B,EAAAA,GAAgB,CACxB/F,IAAKk8B,EACLz0B,UAAWyT,EACXA,OAAQA,EACR0xB,UAAW1xB,EACXne,KAAM,SACND,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM2sB,SAMd9tB,KAAKkW,MAAMC,IACT2X,EAAI1X,kBAAiB,CAACC,EAAUmB,KAC9B,GAAInB,EAASmY,YAAchX,EAAUgX,UAAW,CAE9CG,EAD2B91B,EAAAA,GAAWwE,YAAYywB,EAAKvuB,EAAAA,IAGrD8W,EAASmY,UAAYnB,EAAAA,GAAqBmB,UAAYnB,EAAAA,GAAqBxzB,WAE7E+0B,EAAAA,EAAAA,IACE,YACAvY,EAASmY,UAAYnB,EAAAA,GAAqBmB,UAAYnB,EAAAA,GAAqBxzB,SAE/E,KAGN,CAyDA,kBAA0B6mC,EAAoClnC,EAAagyB,GACrEkV,IACsB,UAApB1gC,KAAK/G,MAAM8C,KACTvC,IAAQiN,EAAAA,IACV4/B,EAAAA,EAAAA,IAAwB7a,EAAOkV,EAAW1gC,OAE1CsmC,EAAAA,EAAAA,IAAoC9sC,EAAKgyB,EAAOkV,EAAW1gC,OAG7DumC,EAAAA,EAAAA,IAAoC/sC,EAAKgyB,EAAOkV,EAAW1gC,MAGjE,CAKA,qBAA6BxG,EAAay1B,EAA0BzD,GAClE,OAAOyD,EAAM7Y,kBAAiB,CAACC,EAAUmB,K,IACnCnB,GAAa,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,OAChB,UAApB72B,KAAK/G,MAAM8C,KACTvC,IAAQiN,EAAAA,IACV4/B,EAAAA,EAAAA,IAAwB7a,EAAOnV,EAASyU,KAAKY,OAAQ1rB,OAErDsmC,EAAAA,EAAAA,IAAoC9sC,EAAKgyB,EAAOnV,EAASyU,KAAKY,OAAQ1rB,OAGxEumC,EAAAA,EAAAA,IAAoC/sC,EAAKgyB,EAAOnV,EAASyU,KAAKY,OAAQ1rB,MAE1E,GAEJ,CAEQwmC,uCAAAA,CAAwChtC,EAAaJ,GAC3D,OAAOA,aAAAA,EAAAA,EAAUgd,kBAAiB,K,IACV,EAUJ6Y,EAVlB,MAAMwX,EAA+B,QAAf,EAAAzmC,KAAK/G,MAAMkI,YAAX,eAAiBlI,MAAM3C,SAAS,GACtD,KAAMmwC,aAAyBnpB,EAAAA,IAC7B,MAAM,IAAIrb,MAAM,6BAElB,MAAMupB,EAAQib,EAAcxtC,MAAMkI,KAClC,KAAMqqB,aAAiBja,EAAAA,IACrB,MAAM,IAAItP,MAAM,gFAGlB,MACMy+B,EAA4B,QAAhBzR,EADJp2B,EAAAA,GAAWkyB,QAAQ/qB,MACT/G,MAAM6xB,YAAZmE,IAAAA,OAAAA,EAAAA,EAAkBvD,OAE/BgV,GAKL6F,EAAAA,EAAAA,IAAoC/sC,EAAKgyB,EAAOkV,EAAW1gC,MAJzDqB,EAAAA,EAAOC,KAAK,6EAIkD,GAEpE,CAKA,wCAAgD9H,GAC9C,MAAMktC,EAAUltC,IAAQiN,EAAAA,GAClBrN,EAAWstC,GAAUzwB,EAAAA,EAAAA,IAAkBjW,OAAQmX,EAAAA,EAAAA,IAAkBnX,MACvE,OAAO5G,aAAAA,EAAAA,EAAUgd,kBAAiB,K,IACV,EAUJ6Y,EAVlB,MAAMwX,EAA+B,QAAf,EAAAzmC,KAAK/G,MAAMkI,YAAX,eAAiBlI,MAAM3C,SAAS,GACtD,KAAMmwC,aAAyBnpB,EAAAA,IAC7B,MAAM,IAAIrb,MAAM,6BAElB,MAAMupB,EAAQib,EAAcxtC,MAAMkI,KAClC,KAAMqqB,aAAiBja,EAAAA,IACrB,MAAM,IAAItP,MAAM,gFAGlB,MACMy+B,EAA4B,QAAhBzR,EADJp2B,EAAAA,GAAWkyB,QAAQ/qB,MACT/G,MAAM6xB,YAAZmE,IAAAA,OAAAA,EAAAA,EAAkBvD,OAE/BgV,EAKDgG,GACFL,EAAAA,EAAAA,IAAwB7a,EAAOkV,EAAW1gC,OAE1CsmC,EAAAA,EAAAA,IAAoC9sC,EAAKgyB,EAAOkV,EAAW1gC,MAP3DqB,EAAAA,EAAOC,KAAK,6EAQd,GAEJ,CA1MAZ,WAAAA,CAAYzH,GACV0H,MAAM1H,GA+DR,OAAQktC,6BAA6Bvb,I,IAEjBqE,EAGI,EAJtB,MAAMA,EAAQp2B,EAAAA,GAAWkyB,QAAQ/qB,MAC3B0gC,EAA4B,QAAhBzR,EAAAA,EAAMh2B,MAAM6xB,YAAZmE,IAAAA,OAAAA,EAAAA,EAAkBvD,OAC9BlyB,EAAMwG,KAAK/G,MAAMugC,OAEjBiN,EAA+B,QAAf,EAAAzmC,KAAK/G,MAAMkI,YAAX,eAAiBlI,MAAM3C,SAAS,GACtD,KAAMmwC,aAAyBnpB,EAAAA,IAC7B,MAAM,IAAIrb,MAAM,6BAElB,MAAMupB,EAAQib,EAAcxtC,MAAMkI,KAElC,KAAMqqB,aAAiBja,EAAAA,IACrB,MAAM,IAAItP,MAAM,wBAGlBjC,KAAK2mC,kBAAkBjG,EAAWlnC,EAAKgyB,GAEf,UAApBxrB,KAAK/G,MAAM8C,KACbiE,KAAKkW,MAAMC,IAAInW,KAAK4mC,wCAAwCptC,KAE5DwG,KAAKkW,MAAMC,IAAInW,KAAKwmC,wCAAwChtC,GAAKsc,EAAAA,EAAAA,IAAkB9V,QACnFA,KAAKkW,MAAMC,IAAInW,KAAKwmC,wCAAwChtC,GAAKmd,EAAAA,EAAAA,IAAoB3W,SAGvFA,KAAKkW,MAAMC,IAAInW,KAAK6mC,qBAAqBrtC,EAAKy1B,EAAOzD,IAErDZ,EAAQkc,yBAA2B,CAAC7jC,EAAeq8B,KACjD,IAAI71B,EAGAA,EAFoB,UAApBzJ,KAAK/G,MAAM8C,KACTvC,IAAQiN,EAAAA,IACDsgC,EAAAA,EAAAA,IAAsB9jC,EAAOjD,OAE7BgnC,EAAAA,EAAAA,IAAsBxtC,EAAKyJ,EAAOjD,OAGpCinC,EAAAA,EAAAA,IAAsBztC,EAAKyJ,EAAOjD,OAG7C5D,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgB4qC,+BACpC,CACErpC,MAAOoF,EACPwG,UACF,CAEH,IA5GDzJ,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA0MK,SAAS2uB,EAAsBD,EAAqCyY,GACzE,MAAMzyB,EAASuxB,EAAsBkB,GACrCzY,EAAmBhvB,SAAS,CAC1BuB,UAAWyT,EACXA,OAAQA,EACR0xB,UAAW1xB,GAEf,CAEA,SAASuxB,EAAsBkB,GAC7B,OAAOA,IAAqB9Z,EAAAA,GAAqBmB,UAAY,GAAK,GACpE,CAnNE,EANW+M,EAMG7hC,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,GAASxI,EAAMI,WACvB,OAAIoI,EAEA,kBAAC5M,MAAAA,KACC,kBAAC4M,EAAKzH,UAAS,CAACf,MAAOwI,KAKtB,IAAI,IAmOR,MAAMu0B,EAA0B,qB,yjBCrRhC,MAAMb,EAAe,I,IAAA,MAAE5xB,EAAK,SAAEsd,EAAQ,YAAED,EAAW,QAAEtsB,EAAO,OAAEozC,GAAwB,EAAbC,EAAAA,EAAAA,EAAAA,CAAlDpkC,QAAOsd,WAAUD,cAAatsB,UAASozC,WACnE,MAAMhzC,GAASC,EAAAA,EAAAA,YAAWC,GAC1B,OACE,kBAACgzC,EAAAA,M,sUAAKA,CAAAA,CACJrkC,MAAOA,EACPsd,SAAUA,EACV6mB,OACE,kBAAC7lB,OAAAA,CAAK/sB,UAAWJ,EAAOmzC,eACrBvzC,GAAWiP,EACV,kBAACwe,EAAAA,WAAUA,CACTtnB,aAAY,eACZ0nB,QAAS,eACT7sB,QAAShB,EACT0D,KAAK,QACLlD,UAAWJ,EAAOozC,iBAElBxxC,EACHoxC,GAAUA,GAGf/mB,OAAQ,kBAAC5oB,EAAAA,KAAIA,CAACC,KAAK,WACnB4oB,YAAaA,GACT+mB,GAAAA,EAKJ/yC,EAAaoB,IAA0B,CAC3C6xC,eAAe5xC,EAAAA,EAAAA,KAAI,CACjBiC,IAAKlC,EAAMmC,QAAQ,IACnBjC,QAAS,gBAEX4xC,WAAW7xC,EAAAA,EAAAA,KAAI,CACbqF,OAAQ,a,2TCXZ,eAAKysC,G,6DAAAA,C,CAAL,CAAKA,GAAAA,CAAAA,GAkBL,eAAKC,G,uDAAAA,C,CAAL,CAAKA,GAAAA,CAAAA,GAkDE,MAAMC,UAAkCjvC,EAAAA,GAoB7CmH,UAAAA,GAEE,MAIMf,GAJW+0B,EAAAA,EAAAA,KACfV,EAAAA,EAAAA,IAA6BnzB,KAAK/G,MAAMyvB,UAAW1oB,KAAK/G,MAAMyI,cAC9D1B,MAEuB/G,MAAM6F,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQwG,KAAK/G,MAAMyvB,YACpEkf,EAAW9oC,EAAQslB,MAAM3f,GAAMA,EAAErB,WAAa6B,EAAAA,GAASqtB,KAAO7tB,EAAErB,WAAa6B,EAAAA,GAASotB,KACtFwV,EAAW/oC,EAAQslB,MAAM3f,GAAMA,EAAErB,WAAa6B,EAAAA,GAASutB,KAAO/tB,EAAErB,WAAa6B,EAAAA,GAASstB,KAC5F,IAAIxd,EAA4D,CAAC,EAEjE,GAA6B,aAAzB/U,KAAK/G,MAAM+jC,WAAqD,UAAzBh9B,KAAK/G,MAAM+jC,UAAuB,CAC3E,GAAI4K,EAAU,CACZ,MAAME,EAAiBC,GAAuBnkC,EAAAA,EAAAA,IAAyBgkC,GAAU3kC,MAAOjD,KAAK/G,MAAM+jC,WAE/F8K,IACF/yB,EAAYsd,GAAKyV,EAAe7kC,MAChC8R,EAAYizB,IAAMF,EAAeG,KACjClzB,EAAYud,IAAMsV,EAASxkC,WAAa6B,EAAAA,GAASqtB,IAErD,CAEA,GAAIuV,EAAU,CACZ,MAAMC,EAAiBC,GAAuBnkC,EAAAA,EAAAA,IAAyBikC,GAAU5kC,MAAOjD,KAAK/G,MAAM+jC,WAE/F8K,IACF/yB,EAAYwd,GAAKuV,EAAe7kC,MAChC8R,EAAYmzB,IAAMJ,EAAeG,KACjClzB,EAAYyd,IAAMqV,EAASzkC,WAAa6B,EAAAA,GAASutB,IAErD,CACF,KAAO,CAEL,GAAIoV,EAAU,CACZ,MAAME,GAAiBlkC,EAAAA,EAAAA,IAAyBgkC,GAAU3kC,MAC1D8R,EAAYsd,GAAK8V,OAAOL,GACxB/yB,EAAYizB,IAAM,GAClBjzB,EAAYud,IAAMsV,EAASxkC,WAAa6B,EAAAA,GAASqtB,GACnD,CACA,GAAIuV,EAAU,CACZ,MAAMC,GAAiBlkC,EAAAA,EAAAA,IAAyBikC,GAAU5kC,MAC1D8R,EAAYwd,GAAK4V,OAAOL,GACxB/yB,EAAYmzB,IAAM,GAClBnzB,EAAYyd,IAAMqV,EAASzkC,WAAa6B,EAAAA,GAASutB,GACnD,CACF,CAEwC,IAApCnlB,OAAOrD,KAAK+K,GAAa7b,SAC3B6b,EAAYqzB,mBAAoB,GAGlCpoC,KAAKN,SAASqV,EAChB,CAEAszB,QAAAA,GAGMroC,KAAK/G,MAAMo5B,IACbQ,EAAAA,EAAAA,IACE7yB,KAAK/G,MAAMyvB,UACX1oB,KAAK/G,MAAMo5B,GAAG/sB,WAAatF,KAAK/G,MAAM+uC,IACtChoC,KAAK/G,MAAMq5B,IAAMrtB,EAAAA,GAASqtB,IAAMrtB,EAAAA,GAASotB,GACzCryB,KACAA,KAAK/G,MAAMyI,eAGb+wB,EAAAA,EAAAA,IACEzyB,KAAK/G,MAAMyvB,UACX1oB,KACAA,KAAK/G,MAAMq5B,IAAMrtB,EAAAA,GAASqtB,IAAMrtB,EAAAA,GAASotB,GACzCryB,KAAK/G,MAAMyI,cAIX1B,KAAK/G,MAAMs5B,IACbM,EAAAA,EAAAA,IACE7yB,KAAK/G,MAAMyvB,UACX1oB,KAAK/G,MAAMs5B,GAAGjtB,WAAatF,KAAK/G,MAAMivC,IACtCloC,KAAK/G,MAAMu5B,IAAMvtB,EAAAA,GAASutB,IAAMvtB,EAAAA,GAASstB,GACzCvyB,KACAA,KAAK/G,MAAMyI,eAGb+wB,EAAAA,EAAAA,IACEzyB,KAAK/G,MAAMyvB,UACX1oB,KACAA,KAAK/G,MAAMu5B,IAAMvtB,EAAAA,GAASutB,IAAMvtB,EAAAA,GAASstB,GACzCvyB,KAAK/G,MAAMyI,cAIgB7I,EAAAA,GAAWwE,YAAY2C,KAAMm/B,GACrCmJ,eACzB,CAhHA5nC,WAAAA,CAAYzH,GACV,IAAIsvC,EACJ,MAAMvL,EAA4C/jC,EAAM+jC,UACxD,GAAkB,UAAdA,EACFuL,EAAQ,CAAEL,IAAK,IAAoBF,IAAK,UACnC,GAAkB,aAAdhL,EACTuL,EAAQ,CAAEL,IAAK,IAAwBF,IAAK,SACvC,IAAkB,UAAdhL,EAGT,MAAM,IAAI/6B,MAAM,mCAAmC+6B,KAFnDuL,EAAQ,CAAEL,IAAK,GAAIF,IAAK,GAG1B,CAGArnC,M,sUAAM,IAAK1H,EAAUsvC,IAmGvBC,EAAAA,KAAAA,kBAAkBvkC,IAChB,MAAMwkC,OAAiCzyC,IAAlBgK,KAAK/G,MAAMo5B,SAAsCr8B,IAAlBgK,KAAK/G,MAAMs5B,GACjD,UAAVtuB,EAAEzK,KAAoBivC,GACxBzoC,KAAKqoC,UACP,IArGAroC,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA+RK,SAAS+nC,EACdW,EACAC,GAEA,GAAkB,aAAdA,EAA0B,CAC5B,MAGMC,EAHiBv7B,OAAOlL,OAAOslC,GAGArjB,MAAMwkB,IACzC,MAAMC,EAAsBD,EAAc1vC,OAC1C,OAAOwvC,EAAYt7B,OAA6B,EAAvBy7B,KAA8BD,CAAa,IAGtE,GAAIA,EAAe,CACjB,MAAM3lC,EAAQklC,OAAOO,EAAY7lC,QAAQ+lC,EAAe,KACxD,IAAKE,MAAM7lC,GACT,MAAO,CACLglC,KAAMW,EACN3lC,MAAOA,EAGb,CACF,CAEA,GAAkB,UAAd0lC,EAAuB,CACzB,MAKMI,EALc17B,OAAOlL,OAAOulC,GAE/BjiC,MAAK,CAACzO,EAAG0O,IAAMA,EAAExM,OAASlC,EAAEkC,SAGAkrB,MAAM2kB,IACnC,MAAMC,EAAkBD,EAAW7vC,OACnC,OAAOwvC,EAAYt7B,OAAyB,EAAnB47B,KAA0BD,CAAU,IAG/D,GAAIA,EAAY,CACd,MAAM9lC,EAAQklC,OAAOO,EAAY7lC,QAAQkmC,EAAY,KACrD,IAAKD,MAAM7lC,GACT,MAAO,CACLglC,KAAMc,EACN9lC,MAAOA,EAGb,CACF,CAGF,CAEA,SAASgmC,EACPjM,GAEA,GAAkB,aAAdA,EAA0B,CAE5B,OADa3vB,OAAOrD,KAAKy9B,GACbnuC,KAAKE,IACR,CACLrB,KAAMqB,EACNyJ,MAAOwkC,EAAqBjuC,GAC5BqE,MAAOrE,KAGb,CAEA,GAAkB,UAAdwjC,EAAuB,CAEzB,OADa3vB,OAAOrD,KAAK09B,GACbpuC,KAAKE,IACR,CACLrB,KAAMqB,EACNyJ,MAAOykC,EAAiBluC,GACxBqE,MAAOrE,KAGb,CAEA,MAAMwI,EAAQ,IAAIC,MAAM,uBAAuB+6B,KAE/C,MADA37B,EAAAA,EAAOW,MAAMA,EAAO,CAAEgC,IAAK,uCACrBhC,CACR,CArQE,EAzHW2lC,EAyHGjuC,aAAY,EAAGf,YAC3B,MAAMuwC,GAAgB70C,EAAAA,EAAAA,YAAW80C,IAC3B,UAAEzgB,EAAS,GAAE2J,EAAE,GAAEE,EAAE,IAAED,EAAG,IAAEE,EAAG,IAAEwV,EAAG,IAAEE,EAAG,UAAElL,EAAS,kBAAEoL,GAAsBzvC,EAAMI,WAChFqwC,EAAyB,UAAdpM,GAAyBA,IAActU,EAAY,IAAIsU,UAAehnC,EAEjFqzC,EAAyBxwC,EAAAA,GAAWwE,YAAY1E,EAAOwmC,GACvDsJ,OAAsBzyC,IAAPq8B,QAA2Br8B,IAAPu8B,EAEzC,OACE,kBAAC+W,EAAAA,oBAAmBA,CAACC,YAAY,EAAMv0C,QAAS,IAAMq0C,EAAuBf,iBAC3E,kBAACkB,EAAAA,MAAKA,CAACx2B,UAAU,SAASpb,IAAK,EAAG6xC,KAAK,WACrC,kBAACl1C,MAAAA,CAAIC,UAAW00C,EAAcQ,KAAKvoC,MACjC,kBAAC5M,MAAAA,CAAIC,UAAW00C,EAAcQ,KAAKr0C,OAChCqzB,EAAU,IAAE0gB,GAGf,kBAAC70C,MAAAA,CAAIC,UAAW00C,EAAcQ,KAAKC,WAEjC,kBAACC,EAAAA,SAAQA,CAACp1C,UAAW00C,EAAcQ,KAAKG,UACtC,kBAAClE,EAAAA,MAAKA,CACJ1wC,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqBC,0BAC5DC,YAAY,EACZ11C,WAAW6K,EAAAA,EAAAA,IAAG6pC,EAAcQ,KAAKljC,MAAO0iC,EAAcQ,KAAKS,iBAE3D,kBAACvS,EAAAA,OAAMA,CACLpjC,UAAW00C,EAAcQ,KAAKU,eAC9B1pB,kBAAkB,EAClBzd,WAAejN,IAARs8B,EAAoBA,EAAIhtB,WAAa,QAC5CjD,QAAS,CACP,CAAExE,MAAO,eAAgBoF,MAAO,SAChC,CAAEpF,MAAO,wBAAyBoF,MAAO,SAE3Csd,SAAWtd,GAAUtK,EAAM+G,SAAS,CAAE4yB,IAAqB,SAAhBrvB,EAAMA,WAGrD,kBAAC0iC,EAAAA,MAAKA,CACJ1wC,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqBK,iBAC5DH,YAAY,EACZ11C,UAAW00C,EAAcQ,KAAKljC,OAE9B,kBAAC8gC,EAAAA,MAAKA,CACJgD,iBAAkB3xC,EAAM6vC,eACxB+B,WAAW,EACXhqB,SAAWtc,IACTtL,EAAM+G,SAAS,CACb2yB,GAA8B,KAA1BpuB,EAAEumC,cAAcvnC,MAAeklC,OAAOlkC,EAAEumC,cAAcvnC,YAASjN,GACnE,EAEJxB,UAAW00C,EAAcQ,KAAKe,YAC9BxnC,MAAOovB,EACPt2B,KAAM,YAGK,UAAdihC,GACC,kBAAC0N,EAAAA,MAAKA,KACJ,kBAAC/E,EAAAA,MAAKA,CACJ1wC,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqBW,qBAC5DT,YAAY,EACZ11C,UAAW00C,EAAcQ,KAAKljC,MAC9B3I,MAAO,kBAAC0jB,OAAAA,CAAK/sB,UAAW00C,EAAcQ,KAAKkB,gBAAgB,SAE3D,kBAAChT,EAAAA,OAAMA,CACLrX,SAAWtc,IACTtL,EAAM+G,SAAS,CACbsoC,IAAK/jC,EAAEhB,OACP,EAEJyd,kBAAkB,EAClBre,QAAS4mC,EAAejM,GACxBxoC,UAAW00C,EAAcQ,KAAKmB,YAC9B5nC,MAAO+kC,OAQjB,kBAAC4B,EAAAA,SAAQA,CAACp1C,UAAW00C,EAAcQ,KAAKG,UACtC,kBAAClE,EAAAA,MAAKA,CACJ1wC,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqBc,uBAC5DZ,YAAY,EACZ11C,WAAW6K,EAAAA,EAAAA,IAAG6pC,EAAcQ,KAAKljC,MAAO0iC,EAAcQ,KAAKS,iBAE3D,kBAACvS,EAAAA,OAAMA,CACLpjC,UAAW00C,EAAcQ,KAAKU,eAC9B1pB,kBAAkB,EAClBzd,WAAejN,IAARw8B,EAAoBA,EAAIltB,WAAa,QAC5CjD,QAAS,CACP,CAAExE,MAAO,YAAaoF,MAAO,SAC7B,CAAEpF,MAAO,qBAAsBoF,MAAO,SAExCsd,SAAWtd,GAAUtK,EAAM+G,SAAS,CAAE8yB,IAAqB,SAAhBvvB,EAAMA,WAGrD,kBAAC0iC,EAAAA,MAAKA,CACJ1wC,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqBe,cAC5Db,YAAY,EACZ11C,UAAW00C,EAAcQ,KAAKljC,OAE9B,kBAAC8gC,EAAAA,MAAKA,CACJgD,iBAAkB3xC,EAAM6vC,eACxBjoB,SAAWtc,GACTtL,EAAM+G,SAAS,CAAE6yB,GAA8B,KAA1BtuB,EAAEumC,cAAcvnC,MAAeklC,OAAOlkC,EAAEumC,cAAcvnC,YAASjN,IAEtFxB,UAAW00C,EAAcQ,KAAKe,YAC9BxnC,MAAOsvB,EACPx2B,KAAM,YAGK,UAAdihC,GACC,kBAAC0N,EAAAA,MAAKA,KACJ,kBAAC/E,EAAAA,MAAKA,CACJ1wC,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqBgB,kBAC5Dd,YAAY,EACZ11C,UAAW00C,EAAcQ,KAAKljC,MAC9B3I,MAAO,kBAAC0jB,OAAAA,CAAK/sB,UAAW00C,EAAcQ,KAAKkB,gBAAgB,SAE3D,kBAAChT,EAAAA,OAAMA,CACLrX,SAAWtc,IACTtL,EAAM+G,SAAS,CACbwoC,IAAKjkC,EAAEhB,OACP,EAEJyd,kBAAkB,EAClBre,QAAS4mC,EAAejM,GACxBxoC,UAAW00C,EAAcQ,KAAKmB,YAC9B5nC,MAAOilC,QASnB,kBAAC3zC,MAAAA,CAAIC,UAAW00C,EAAcQ,KAAKuB,SAChC7C,GACC,kBAAC1zC,EAAAA,OAAMA,CACLO,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqB3vC,aAC5DkjB,UAAW6qB,EACXpzC,QAAS,KACP2D,EAAM+G,SAAS,CACb2yB,QAAIr8B,EACJu8B,QAAIv8B,IAEN2C,EAAM0vC,UAAU,EAElBxzC,KAAM,KACNF,QAAS,cACTC,KAAM,WACP,UAIH,kBAACF,EAAAA,OAAMA,CACLO,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqBkB,aAC5D3tB,SAAUkrB,EACVzzC,QAAS,IAAM2D,EAAM0vC,WACrBxzC,KAAM,KACNF,QAAS,UACTC,KAAM,UACNmH,KAAM,UACP,OAID,kBAACrH,EAAAA,OAAMA,CACLO,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOC,qBAAqBmB,aAC5Dn2C,QAAS,IAAMq0C,EAAuBf,gBACtCzzC,KAAM,KACNF,QAAS,YACTC,KAAM,WACP,iBA0Ff,MAAMu0C,EAAoBzzC,IAA0B,CAClDg0C,KAAM,CACJuB,SAASt1C,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACTsH,SAAU,OACVrH,eAAgB,WAChB+B,IAAKlC,EAAMmC,QAAQ,KACnBqH,UAAWxJ,EAAMmC,QAAQ,KAE3BuyC,gBAAgBz0C,EAAAA,EAAAA,KAAI,CAClByhC,SAAU,UAEZyT,aAAal1C,EAAAA,EAAAA,KAAI,CACfyhC,SAAU,SAEZqT,aAAa90C,EAAAA,EAAAA,KAAI,CACfqJ,MAAO,SAET2qC,WAAWh0C,EAAAA,EAAAA,KAAI,CACbC,QAAS,OACToI,cAAe,SACfukC,WAAY7sC,EAAMmC,QAAQ,GAC1BguB,cAAe,IAEjBrf,OAAO7Q,EAAAA,EAAAA,KAAI,CACTC,QAAS,OACTqH,WAAY,SACZ2X,aAAclf,EAAMmC,QAAQ,KAE9BsyC,gBAAgBx0C,EAAAA,EAAAA,KAAI,CAClB8vB,YAAa/vB,EAAMmC,QAAQ,KAE7B+yC,gBAAgBj1C,EAAAA,EAAAA,KAAI,CAClBgC,WAAYjC,EAAMmC,QAAQ,GAC1B4tB,YAAa/vB,EAAMmC,QAAQ,OAE7BuzC,kBAAkBz1C,EAAAA,EAAAA,KAAI,CACpBqJ,MAAO,UAETqsC,kBAAkB11C,EAAAA,EAAAA,KAAI,CACpBgC,WAAYjC,EAAMmC,QAAQ,GAC1B4tB,YAAa/vB,EAAMmC,QAAQ,KAE7BgyC,UAAUl0C,EAAAA,EAAAA,KAAI,CACZC,QAAS,OACTqH,WAAY,SACZpH,eAAgB,gBAChBmJ,MAAO,OACP4V,aAAc,IAEhBvf,OAAOM,EAAAA,EAAAA,KAAI,CAAC,GACZwL,MAAMxL,EAAAA,EAAAA,KAAI,CACR6F,QAAS9F,EAAMmC,QAAQ,KAEzBkF,GAAGpH,EAAAA,EAAAA,KAAI,CACLuL,SAAU,S,y6BCrehB,MAAMoqC,EAAgB,UAChBC,EAAgB,UAChBC,EAAuB,gBAEtB,MAAMrM,UAA+BzmC,EAAAA,GAM1C6nB,QAAAA,CAAStd,GACP,MAAM7J,EAAW4G,KAAKyrC,cAChBrY,EAAeh6B,EAASH,MAAMvB,KAC9ByqB,EAAiBniB,KAAK0rC,kBAAkBtyC,GACxC64B,GAAaC,EAAAA,EAAAA,IAAgCkB,EAAcjR,IAC9CA,aAAAA,EAAAA,EAAgB/e,YAAa6B,EAAAA,GAAS2tB,UAAYX,EAAWhvB,QAAU0oC,EAAAA,IAExE1oC,EAAMA,QAAUqoC,EAChCtrC,KAAK02B,YAAYtD,GACRnwB,EAAMA,QAAUqoC,EACzBtrC,KAAK4rC,oBAAoBxY,GAChBnwB,EAAMA,QAAUsoC,EACzBvrC,KAAK6rC,oBAAoBzY,GAChBnwB,EAAMA,QAAUuoC,GACzBxrC,KAAK8rC,qBAAqB1Y,GAG5BpzB,KAAKN,SAAS,CACZqsC,cAAe9oC,GAEnB,CAwJQyoC,iBAAAA,CAAkBtyC,GACxB,IAAI,UAAEsvB,IAAc0X,EAAAA,EAAAA,MACpB,GAAIpgC,KAAK/G,MAAMyvB,YAAcA,EAC3B,OAAOtvB,aAAAA,EAAAA,EAAUH,MAAM6F,QAAQslB,MAAMjrB,GAC5BA,EAAOK,MAAQwG,KAAK/G,MAAMyvB,WAKvC,CAEO7oB,UAAAA,G,IAGDi+B,EAAAA,EAFJ,MAAMA,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,KAEtB,QAAxBwoB,EAAAA,EAAa7kC,MAAMg2B,aAAnB6O,IAAAA,GAAoC,QAApCA,EAAAA,EAA0B7kC,MAAM6xB,YAAhCgT,IAAAA,OAAAA,EAAAA,EAAsC7kC,SAAU29B,EAAAA,aAAaC,MAC/D72B,KAAKgsC,oBAGPhsC,KAAKkW,MAAMC,IACTtd,EAAAA,GAAWkyB,QAAQ/qB,MAAMoW,kBAAkBC,I,IACrCA,EACEynB,EAAAA,EAKFA,GANa,QAAbznB,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,QACZ,QAAxBiH,EAAAA,EAAa7kC,MAAMg2B,aAAnB6O,IAAAA,GAAoC,QAApCA,EAAAA,EAA0B7kC,MAAM6xB,YAAhCgT,IAAAA,OAAAA,EAAAA,EAAsC7kC,SAAU29B,EAAAA,aAAaC,MAC/D72B,KAAKgsC,oBAGPhsC,KAAKkW,MAAMC,IACe,QAAxB2nB,EAAAA,EAAa7kC,MAAMg2B,aAAnB6O,IAAAA,OAAAA,EAAAA,EAA0B1nB,kBAAkB61B,I,IACtCA,GAAsB,QAAtBA,EAAAA,EAAkBnhB,YAAlBmhB,IAAAA,OAAAA,EAAAA,EAAwBhzC,SAAU29B,EAAAA,aAAaC,MACjD72B,KAAKgsC,mBACP,KAGN,IAGN,CA2CO1D,aAAAA,GACLtoC,KAAKN,SAAS,CACZwsC,aAAclsC,KAAK/G,MAAMizC,aAE7B,CAEQF,iBAAAA,G,IAEkClO,EADxC,MAAMA,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAC5C62B,GAAgBC,EAAAA,EAAAA,IAA0C,QAAxBtO,EAAAA,EAAa7kC,MAAMg2B,aAAnB6O,IAAAA,OAAAA,EAAAA,EAA0B7kC,MAAM6xB,MAClE/C,EAAoCokB,aAAAA,EAAAA,EAAexkC,OAAOyc,MAAM5d,GAAyB,WAAfA,EAAM9O,OAEhFozB,EAAOjyB,EAAAA,GAAWkyB,QAAQ/qB,MAC1BgrB,GAAcC,EAAAA,EAAAA,IAAiBH,GAAOzZ,GAAMA,aAAa6Z,EAAAA,IAAkBA,EAAAA,IACjF,GAAIF,EAAa,CACf,MACM1jB,EADU0jB,EAAY/xB,MAAMgxB,QACZ,IAClB3iB,aAAAA,EAAAA,EAAO9F,KAAKnI,SAAS,mBACvB2G,KAAKN,SAAS,CACZ2sC,mBAAmB,GAGzB,CAEA,IAAKtkB,IAAWokB,EAId,YAHAnsC,KAAKN,SAAS,CACZ4sC,kBAAkB,IAItB,MAAMlzC,EAAW4G,KAAKyrC,cAEhBc,EAAyBxkB,EAAO5lB,OAAOqqC,QAAO,CAACC,EAAK1kB,MACpDA,aAAAA,EAAAA,EAAS/nB,KAAK/G,MAAMyvB,aACtB+jB,IAEKA,IACN,GAEGjhB,EAAQ3yB,EAAAA,GAAWwE,YAAY2C,KAAMuR,EAAAA,IAC3C,QAA+Bvb,IAA3Bu2C,GAAwCJ,EAAcjzC,OAAS,EAAG,CACpE,MAAMwzC,GAAc,EAA0BP,EAAcjzC,OAAU,KAAKitB,iBACrE4G,EAAc,GAAG/sB,KAAK/G,MAAMyvB,uBAAuBgkB,SAAkBP,EAAcjzC,2BAGzFsyB,EAAM9rB,SAAS,CACbqtB,eAEJ,MACEvB,EAAM9rB,SAAS,CACbqtB,iBAAa/2B,IAKjB,MAAMmsB,EAAiBniB,KAAK0rC,kBAAkBtyC,GACxCuzC,EACJxqB,GAAkB/oB,EAASH,MAAMvB,OAASse,EAAAA,IAAapS,EAAAA,EAAAA,IAAyBue,QAAkBnsB,EAEhGu2C,EAAyBJ,EAAcjzC,SAAUyzC,aAAAA,EAAAA,EAAqB1pC,SAAU0oC,EAAAA,GAClF3rC,KAAKN,SAAS,CACZ4sC,kBAAkB,IAGpBtsC,KAAKN,SAAS,CACZ4sC,kBAAkB,GAGxB,CAEQb,WAAAA,GACN,OAAIzrC,KAAK/G,MAAM+jC,YAAc9U,EAAAA,GAAW1hB,OAC/BsP,EAAAA,EAAAA,IAAkB9V,MAChBA,KAAK/G,MAAMyvB,YAAcjiB,EAAAA,IAC3BwP,EAAAA,EAAAA,IAAkBjW,OAElBmX,EAAAA,EAAAA,IAAkBnX,KAE7B,CA5UAU,WAAAA,CAAYzH,GACV0H,MAAM,OAAK1H,GAAAA,CAAOizC,aAAa,KAqNjC,OAAOJ,wBAAwBpqC,IAC7B,MAAMkrC,GAAqBlT,EAAAA,EAAAA,IAAuB15B,MAC5Cg9B,GAAYC,EAAAA,EAAAA,IAAqBj9B,KAAK/G,MAAMyvB,UAAWkkB,GAE7D,IAAK5P,GAA2B,WAAdA,GAAwC,YAAdA,GAAyC,QAAdA,EAAqB,CAC1F,MAAMh7B,EAAQ,IAAIC,MAAM,yBAAyB+6B,KAEjD,MADA37B,EAAAA,EAAOW,MAAMA,EAAO,CAAEgC,IAAK,2CAA2Cg5B,MAChEh7B,CACR,CAEAhC,KAAKN,SAAS,CACZ2lB,QAAS,IAAIsiB,EAA0B,CAAEjf,UAAW1oB,KAAK/G,MAAMyvB,UAAWhnB,eAAcs7B,gBAE1Fh9B,KAAKsoC,eAAe,IAGtB,OAAOuE,qBAAoB,KACzB,MAAM/O,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAClD,OAAOw3B,EAAAA,EAAAA,IAAsB9sC,KAAK/G,MAAM+jC,UAAWh9B,KAAK/G,MAAMyvB,UAAWoV,EAAa,IAGxF,OAAO8N,uBAAuBlqC,KAC5BowB,EAAAA,EAAAA,IAAa9xB,KAAK/G,MAAMyvB,UAAWijB,EAAAA,GAAsB,UAAW3rC,KAAM0B,EAAa,IAGzF,OAAOmqC,uBAAuBnqC,KAE5BowB,EAAAA,EAAAA,IAAa9xB,KAAK/G,MAAMyvB,UAAWijB,EAAAA,GAAsB,UAAW3rC,KAAM0B,EAAa,IAGzF,OAAOg1B,eAAeh1B,KACpBowB,EAAAA,EAAAA,IAAa9xB,KAAK/G,MAAMyvB,UAAWijB,EAAAA,GAAsB,QAAS3rC,KAAM0B,EAAa,IAGvF,OAAOqwB,gBAAgBrwB,KACrBqwB,EAAAA,EAAAA,IAAa/xB,KAAK/G,MAAMyvB,UAAW1oB,KAAM0B,GACrC1B,KAAK/G,MAAMyvB,YAAcjiB,EAAAA,KAC3BqZ,EAAAA,EAAAA,IAAmB9f,KACrB,IA1PAA,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA4UF,SAAS+sC,EAAyBp5C,GAChC,MAAMS,GAASC,EAAAA,EAAAA,YAAW24C,GAC1B,OACE,kBAACzrB,OAAAA,CAAK/sB,UAAWJ,EAAO24B,aACrBp5B,EAAMsrB,UAAY,kBAACsC,OAAAA,CAAK/sB,UAAWJ,EAAO6qB,WAC1CtrB,EAAMwE,KAGb,CA5TE,EA5BWgnC,EA4BGzlC,aAAY,EAAGf,YAC3B,MAAM,mBACJymC,EAAkB,UAClB1W,EAAS,iBACT4jB,EAAgB,kBAChBD,EAAiB,cACjBN,EAAa,QACb1mB,EAAO,YACP6mB,EAAW,UACXlP,GACErkC,EAAMI,WACJK,EAAWT,EAAM8yC,cACjBrY,EAAeh6B,EAASL,WAAWrB,KACnCyqB,EAAiBxpB,EAAM+yC,kBAAkBtyC,GACzC64B,GAAaC,EAAAA,EAAAA,IAAgCkB,EAAcjR,GAC3D/tB,GAASC,EAAAA,EAAAA,YAAWC,GACpB24C,GAAaC,EAAAA,EAAAA,QAA0B,MACvCC,EACJnQ,IAAc9U,EAAAA,GAAWrqB,OACzBzE,EAASH,MAAMvB,OAASse,EAAAA,IAC8E,IAAtG5c,EAASH,MAAM6F,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQkvB,GAAajkB,EAAErB,WAAa6B,EAAAA,GAASC,QAAOhM,OAEvFrF,GAAasuB,aAAAA,EAAAA,EAAgB/e,YAAa6B,EAAAA,GAAS2tB,UAAYX,EAAWhvB,QAAU0oC,EAAAA,GACpFyB,IAAmBjrB,E,IAGvB4pB,EADF,MAAMsB,EACgB,QAApBtB,EAAAA,aAAAA,EAAAA,EAAe9oC,aAAf8oC,IAAAA,EAAAA,EAAyBl4C,EAAay3C,EAAgBe,EAAoBb,EAAuBF,EAE7FgC,KAA2BnrB,aAAAA,EAAAA,EAAgB/e,WAC7C,CAAC6B,EAAAA,GAASqtB,IAAKrtB,EAAAA,GAASotB,GAAIptB,EAAAA,GAASutB,IAAKvtB,EAAAA,GAASstB,IAAIl5B,SAAS8oB,EAAe/e,UAE7EmqC,EAAkBF,IAAwB7B,GAAwB8B,EAClEE,EAAkBH,IAAwB/B,IAAkBiC,EAE5DE,EAA+C,CACnDxqC,MAAOqoC,EACPoC,UAAW,IACT,kBAACX,EAAAA,CAAyB9tB,SAAUuuB,EAAiBr1C,KAAM,8BAA8BuwB,OAGvFilB,EAA+C,CACnD1qC,MAAOsoC,EACPmC,UAAW,IAAM,kBAACX,EAAAA,CAAyB9tB,UAAU,EAAO9mB,KAAM,8BAA8BuwB,OAE5FklB,EAA+C,CACnD3qC,MAAOuoC,EACPkC,UAAW,IACT,kBAACX,EAAAA,CAAyB9tB,SAAUsuB,EAAiBp1C,KAAM,2BAA2BuwB,YAIpFrmB,EAA0C,GAC5CgqC,GACFhqC,EAAQkB,KAAKqqC,GAGXtB,IACGgB,GACHjrC,EAAQkB,KAAKkqC,GAGfprC,EAAQkB,KAAKoqC,IAGf,MAAME,EAAgBh6C,EAClB45C,EACApB,EACAuB,EACAH,E,IAuBS1B,EArBb,OACE,oCACGqB,GACC,kBAAC3rB,EAAAA,WAAUA,CACTlE,SAAU4vB,EACVz1C,KAAM,SACNmqB,QAAS,SAAS6G,YAClB1zB,QAAS,IAAM2D,EAAMo5B,aAAaqB,MAGpCiZ,GAAqBC,IACrB,oCACE,kBAACwB,EAAAA,YAAWA,CAAC74C,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOgE,mBAClD,kBAACr5C,EAAAA,OAAMA,CACLO,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOiE,aACvCC,IAAKhB,EACLj4C,QAAS,IAAM2D,EAAM4nB,SAASwrB,QAAAA,EAAiB8B,GAC/Ch5C,KAAM,KACND,KAAM,UACND,QAAS,aAEY,QAApBo3C,EAAAA,aAAAA,EAAAA,EAAe9oC,aAAf8oC,IAAAA,EAAAA,EAAwB8B,EAAc5qC,OAEzC,kBAACirC,EAAAA,aAAYA,CACXj5C,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOoE,aACvC35C,UAAWJ,EAAOg6C,aAClBz5C,QAAS,UACT0N,QAASA,EACTke,SAAWtd,IACTtK,EAAM4nB,SAAStd,EAAM,OAMP,IAAvBm8B,GACC,kBAAC7a,EAAAA,WAAUA,CACTlvB,MAAO,gCAAgCqzB,IACvC/zB,QAAQ,UACRC,KAAK,UACLC,KAAK,KACLsF,aAAY,UAAUuuB,IACtBxxB,KAAMyB,EAAMk0C,qBACb,UAKFxnB,GACC,kBAACgpB,EAAAA,kBAAiBA,CAAChM,QAAS,kBAAChd,EAAQ3rB,UAAS,CAACf,MAAO0sB,MACnD,CAACipB,EAAYC,EAAYC,KACxB,MAAMC,EAAiB,CACrBC,OAAQH,EACR9tB,QAAS6tB,GAGX,OACE,oCACGrB,EAAW0B,SACV,oCACE,kBAACC,EAAAA,QAAOA,EAAAA,EAAAA,EAAAA,CAAAA,EACFJ,EACAnH,EAAAA,MAAIA,CACRwH,KAAM3C,EACN4C,iBAAkB16C,EAAOixB,QACzB0pB,iBAAkB9B,EAAW0B,QAC7BK,aAAa,IACTP,KAAAA,IAMhB,IA+KZ,MAAMzB,EAAqCt3C,IAClC,CACLupB,UAAUtpB,EAAAA,EAAAA,KAAI,CACZkI,MAAO,4BACP,WAAY,CACVwkC,QAAS,KACTvqC,SAAU,WACVuG,KAAM,EACNtG,IAAK,MACL2c,OAAQ,mBACR1V,MAAO,MACP5D,gBAAiB1F,EAAMwC,OAAO+2C,QAAQ5zC,QAG1C0xB,aAAap3B,EAAAA,EAAAA,KAAI,CACfkf,UAAW,OACXxc,SAAU3C,EAAM4C,WAAW42C,QAAQ,QAKnC56C,EAAaoB,IACV,CACL2vB,SAAS1vB,EAAAA,EAAAA,KAAI,CACXG,aAAcJ,EAAMO,MAAMC,OAAOC,QACjCuI,UAAWhJ,EAAMiJ,QAAQ4mB,GACzBjnB,WAAY5I,EAAMwC,OAAOoG,WAAWgnB,QACpChqB,OAAQ,aAAa5F,EAAMwC,OAAOoD,OAAOkqB,SAE3CuH,aAAap3B,EAAAA,EAAAA,KAAI,CACfkf,UAAW,OACXxc,SAAU3C,EAAM4C,WAAW42C,QAAQ,MAErCd,cAAcz4C,EAAAA,EAAAA,KAAI,CAChB2F,OAAQ,aAAa5F,EAAMwC,OAAOoD,OAAOw/B,SACzC1kC,WAAY,OACZ+4C,oBAAqB,EACrBC,uBAAwB,EACxB5zC,QAAS,EACTkZ,OAAQ,U,0QC3aP,MAAMurB,UAA4B1sB,EAAAA,aACvC7S,WAAAA,CAAY,EAAoC,EAAuB,GACrEC,QAAK,gFADY1J,OAAAA,EAAAA,KAAoCi+B,OAAAA,EAAAA,KAAuBliB,UAAAA,CAE9E,EACA,EAJWitB,EAIGlkC,OAAO,yBAGhB,MAAMqlC,UAAoB1oC,EAAAA,GAgD/BgI,WAAAA,CAAYzH,GACV,MAAM,OAAEi8B,EAAM,UAAEliB,IAAcioB,EAAAA,EAAAA,IAAoBhiC,EAAMhC,OAAQikC,EAAAA,gBAAiB,QACjFv6B,MAAM,CACJ1J,OAAQgC,EAAMhC,OACdi+B,SACAliB,cApDJ,OAAOq8B,iBAA6E,CAClF,CACExxC,MAAO,GACPwE,QAAS,CACP,CACEY,MAAO,cACPpF,MAAO,gBACPkvB,YAAa,6EAEf,CACE9pB,MAAO,WACPpF,MAAO,kBACPkvB,YAAa,sDAEf,CACE9pB,MAAOqsC,EAAAA,UAAUC,OACjB1xC,MAAO,gBACPkvB,YAAa,mDAEf,CACE9pB,MAAO,eACPpF,MAAO,OACPkvB,YAAa,sBAEf,CACE9pB,MAAOqsC,EAAAA,UAAUE,IACjB3xC,MAAO,QACPkvB,YAAa,uCAEf,CACE9pB,MAAOqsC,EAAAA,UAAUtiC,IACjBnP,MAAO,gBACPkvB,YAAa,2CAEf,CACE9pB,MAAOqsC,EAAAA,UAAUG,IACjB5xC,MAAO,aACPkvB,YAAa,8CAInB,CACElvB,MAAO,cACPwE,QAAS,IAAIqtC,EAAAA,cAAcC,cAAc,GAAIC,GAAsBvtC,YAavE,OAAOwtC,oBAAoBpO,IACpBA,EAASx+B,QAGdjD,KAAKN,SAAS,CAAEw1B,OAAQuM,EAASx+B,SACjC6sC,EAAAA,EAAAA,IAAoB9vC,KAAK/G,MAAMhC,OAAQwqC,EAASx+B,MAAOjD,KAAK/G,MAAM+Z,WAClEhT,KAAKuS,aAAa,IAAI0tB,EAAoBjgC,KAAK/G,MAAMhC,OAAQwqC,EAASx+B,MAAOjD,KAAK/G,MAAM+Z,YAAY,GAAK,IAG3G,OAAO+8B,qBAAqB/8B,IACrBA,EAAU/P,QAGfjD,KAAKN,SAAS,CAAEsT,UAAWA,EAAU/P,SACrC6sC,EAAAA,EAAAA,IAAoB9vC,KAAK/G,MAAMhC,OAAQ+I,KAAK/G,MAAMi8B,OAAQliB,EAAU/P,OACpEjD,KAAKuS,aAAa,IAAI0tB,EAAoBjgC,KAAK/G,MAAMhC,OAAQ+I,KAAK/G,MAAMi8B,OAAQliB,EAAU/P,QAAQ,GAAK,GAjBzG,EAoBA,EA3EWm+B,EA2EG1nC,aAAY,EAAGf,YAC3B,MAAM,OAAEu8B,EAAM,UAAEliB,GAAcra,EAAMI,WAC9B6N,EAAQjO,EAAM02C,eAAejrB,MAAMxd,GACvCA,EAAMvE,QAAQ+hB,MAAMjc,GAAoCA,EAAOlF,QAAUiyB,MAErE8a,EAAmDppC,aAAAA,EAAAA,EAAOvE,QAAQ+hB,MACrEjc,GAAoCA,EAAOlF,QAAUiyB,IAExD,OACE,oCACE,kBAACwC,EAAAA,YAAWA,CACV75B,MAAM,UACNoyC,QAAQ,mBACRpuB,QAAQ,+HAER,kBAAC+V,EAAAA,OAAMA,CACL3iC,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOmG,eACvCjtC,MAAO+sC,EACPhxC,MAAO,GACPmxC,cAAc,EACd9tC,QAAS1J,EAAM02C,eACf/uB,YAAa,kBACbC,SAAU5nB,EAAMk3C,iBAChBO,QAAQ,sBAGZ,kBAAC1Y,EAAAA,YAAWA,KACV,kBAACE,EAAAA,OAAMA,CACL3iC,cAAaC,EAAAA,EAAQ40C,WAAWC,OAAOhI,gBACvCxhB,SAAU5nB,EAAMo3C,kBAChB51C,aAAW,iBACXmmB,YAAY,GACZrd,MAAO+P,EACP3Q,QAAS,CACP,CACExE,MAAO,MACPoF,MAAO,OAET,CACEpF,MAAO,OACPoF,MAAO,Y,IAUvB,MAAMotC,EAAsB,CAAC,MAAO,MAAO,MAAO,MAAO,OACzD,SAAST,EAAqBU,GAC5B,OAAIA,EAAIzkB,IAAM,MAAQykB,EAAIzkB,IAAM,OACvBwkB,EAAoBh3C,SAASi3C,EAAIzkB,GAG5C,CAEO,SAASmK,EAAc7K,G,IACrBolB,EAAP,OAAkCplB,QAA3BolB,GAAAA,EAAAA,EAAAA,IAA2BplB,UAA3BolB,IAAAA,EAAAA,EAAqC,WAC9C,C,6ECnJO,SAASnO,GAAc,gBAAED,EAAe,UAAEjjB,EAAS,SAAE5oB,IAC1D,MAAMlC,GAASC,EAAAA,EAAAA,YAAWC,GAM1B,OAJI4qB,IAAcijB,IAChBA,EAAkB,cAGhBjjB,EACK,kBAACN,EAAAA,mBAAkBA,CAACpqB,UAAWJ,EAAOo8C,cAAer4C,KAAMgqC,IAG/DA,EAIE,kBAAC5tC,MAAAA,CAAIC,UAAWJ,EAAOo8C,eAAgBrO,GAHrC,oCAAG7rC,EAId,CAEA,SAAShC,EAAUoB,GACjB,MAAO,CACL86C,eAAe76C,EAAAA,EAAAA,KAAI,CACjB86C,UAAW,SACXvxC,UAAWxJ,EAAMmC,QAAQ,GACzBgd,UAAW,WAGjB,C,kCCtCO,MAAM6qB,EAA4B,E,qFCGlC,SAASgR,EAAeh7C,GAC7B,MAAO,CACLi7C,QAAS,yBACTC,cAAe,MACflyC,UAAW,aAAahJ,EAAMwC,OAAOoG,WAAWC,uBAAuB7I,EAAMwC,OAAOotB,QAAQjqB,OAC5Fw1C,yBAA0B,iCAC1BC,mBAAoB,OACpBC,mBAAoB,sCAExB,CASO,SAASC,EAAoBC,EAAmBv7C,GACrD,MAAO,CACL8I,OAAQ,KACR1G,SAAU,WACVo5C,QAAS,IACTlyC,MAAO,GAAGiyC,MACVv8B,OAAQ,GAAGu8B,MACXn7C,aAAcJ,EAAMO,MAAMC,OAAOC,QACjCksC,QAAS,KACT,CAAC3sC,EAAMy7C,YAAYC,aAAa,gBAAiB,WAAY,CAC3DN,mBAAoB,OACpBD,yBAA0B,+BAC1BE,mBAAoB,WAG1B,C,w4BCxBO,MAAMM,EAAmB19C,IAC9B,MAAM+B,GAAQwe,EAAAA,EAAAA,aACRtf,EAAOjB,EAAMkvB,MAAQntB,EAAMwC,OAAOC,KAAKm5C,YAAc57C,EAAMwC,OAAOC,KAAKolB,SACvEnpB,EAASE,EAAUoB,GACnBq3B,GAAiBp5B,EAAMkvB,MAAQ,UAAY,UAA7B,SAEpB,OACE,kBAAC0uB,EAAAA,QAAOA,CAAClP,QAAStV,GAChB,kBAACzI,SAAAA,CACCtvB,QAAS,IAAMrB,EAAM+uB,cAAc/uB,EAAMkvB,MAAQ,QAAU,SAC3DruB,WAAW6K,EAAAA,EAAAA,IAAGjL,EAAOkwB,OAAQ3wB,EAAMkvB,MAAQzuB,EAAO0wB,OAAS,MAC3D3qB,aAAY4yB,GAEZ,kBAACykB,MAAAA,CAAI58C,KAAMA,EAAMoK,MAAM,KAAK0V,OAAO,KAAK+8B,QAAQ,YAAYC,MAAM,8BAChE,kBAACv5C,OAAAA,CAAKE,SAAS,KAAK2G,MAAM,KAAK0V,OAAO,KAAKi9B,EAAE,MAAMC,EAAE,MAAMC,iBAAiB,UAAUC,WAAW,UAAS,UAS9Gx9C,EAAY,CAACoB,EAAsBf,EAA6B,eACpE,MAAMs8C,EAAY,GAAKv7C,EAAMmC,QAAQk6C,SAErC,MAAO,CACLztB,QAAQ3uB,EAAAA,EAAAA,KAAI,CACV6I,OAAQ,EACR1G,SAAU,WACVpB,OAAQ,KAAKhB,EAAMmC,QAAQm6C,UAAUt8C,EAAMmC,QAAQm6C,OACnDtzC,UAAW,OACXpD,OAAQ,OACR1F,QAAS,cACT0I,WAAY,cACZzI,eAAgB,SAChBoH,WAAY,SACZzB,QAAS,EACTvD,MAAOvC,EAAMwC,OAAOC,KAAKmtB,QAEzB,WAAY,OACP0rB,EAAoBC,EAAWv7C,IAAAA,CAClCoC,SAAU,aAGZ,UAAW,CACT,WAAY,CACVsD,gBACc,cAAZzG,EACIe,EAAMwC,OAAOuR,OAAOwoC,MACpBC,EAAAA,iBAAiBC,MAAMz8C,EAAMwC,OAAOC,KAAKmtB,QAAS,KACxD4rB,QAAS,IAIb,2BAA4BR,EAAeh7C,GAC3C,8BDrDG,CACLi7C,QAAS,OACTjyC,UAAW,UCqDXomB,QAAQnvB,EAAAA,EAAAA,KAAI,CACV,WAAY,CACVyF,gBACc,cAAZzG,EAA0Be,EAAMwC,OAAOuR,OAAOwoC,MAAQC,EAAAA,iBAAiBC,MAAMz8C,EAAMwC,OAAOC,KAAKmtB,QAAS,KAC1G4rB,QAAS,GAEX,UAAW,CACT,WAAY,CACV91C,gBAAiB,OACjB81C,QAAS,MAIhB,E,g6BCvEI,MAAMkB,EAAmCz+C,IAC9C,MAAM+B,GAAQwe,EAAAA,EAAAA,aACRtf,EAAOjB,EAAMqvB,cAAgBttB,EAAMwC,OAAOC,KAAKm5C,YAAc57C,EAAMwC,OAAOC,KAAKolB,SAC/EnpB,EAASE,EAAUoB,GACnBq3B,GAAiBp5B,EAAMqvB,cAAgB,UAAY,UAArC,cAEpB,OACE,kBAACuuB,EAAAA,QAAOA,CAAClP,QAAStV,GAChB,kBAACzI,SAAAA,CACCtvB,QAAS,IACPrB,EAAMovB,sBACJpvB,EAAMqvB,cAAgBC,EAAAA,GAAwBC,gBAAkBD,EAAAA,GAAwBD,eAG5FxuB,WAAW6K,EAAAA,EAAAA,IAAGjL,EAAOkwB,OAAQ3wB,EAAMqvB,cAAgB5uB,EAAO0wB,OAAS,MACnE3qB,aAAY4yB,GAEZ,kBAACykB,MAAAA,CAAI58C,KAAMA,EAAMoK,MAAM,KAAK0V,OAAO,KAAK+8B,QAAQ,YAAYC,MAAM,8BAChE,kBAACv5C,OAAAA,CAAKE,SAAS,KAAK2G,MAAM,KAAK0V,OAAO,KAAKi9B,EAAE,MAAMC,EAAE,MAAMC,iBAAiB,UAAUC,WAAW,UAAS,UAS9Gx9C,EAAY,CAACoB,EAAsBf,EAA6B,eACpE,MAAMs8C,EAAY,GAAKv7C,EAAMmC,QAAQk6C,SAErC,MAAO,CACLztB,QAAQ3uB,EAAAA,EAAAA,KAAI,CACV6I,OAAQ,EACR1G,SAAU,WACVpB,OAAQ,KAAKhB,EAAMmC,QAAQm6C,UAAUt8C,EAAMmC,QAAQm6C,OACnDtzC,UAAW,OACXpD,OAAQ,OACR1F,QAAS,cACT0I,WAAY,cACZzI,eAAgB,SAChBoH,WAAY,SACZzB,QAAS,EACTvD,MAAOvC,EAAMwC,OAAOC,KAAKmtB,QAEzB,WAAY,OACP0rB,EAAoBC,EAAWv7C,IAAAA,CAClCoC,SAAU,aAGZ,UAAW,CACT,WAAY,CACVsD,gBACc,cAAZzG,EACIe,EAAMwC,OAAOuR,OAAOwoC,MACpBC,EAAAA,iBAAiBC,MAAMz8C,EAAMwC,OAAOC,KAAKmtB,QAAS,KACxD4rB,QAAS,IAIb,2BAA4BR,EAAeh7C,GAC3C,8BFzDG,CACLi7C,QAAS,OACTjyC,UAAW,UEyDXomB,QAAQnvB,EAAAA,EAAAA,KAAI,CACV,WAAY,CACVyF,gBACc,cAAZzG,EAA0Be,EAAMwC,OAAOuR,OAAOwoC,MAAQC,EAAAA,iBAAiBC,MAAMz8C,EAAMwC,OAAOC,KAAKmtB,QAAS,KAC1G4rB,QAAS,GAEX,UAAW,CACT,WAAY,CACV91C,gBAAiB,OACjB81C,QAAS,MAIhB,E,mnBCxEH,IAAImB,EAEG,MAAMC,EAAmB,I,IAAA,MAAErvC,EAAK,SAAEsd,EAAQ,YAAED,EAAW,QAAEtsB,EAAO,OAAEozC,EAAM,MAAEpoC,EAAK,MAAE6jB,GAAuB,EAAbwkB,EAAAA,EAAAA,EAAAA,CAAhEpkC,QAAOsd,WAAUD,cAAatsB,UAASozC,SAAQpoC,QAAO6jB,UACtF,MAAMzuB,GAASC,EAAAA,EAAAA,YAAWC,IACnBi+C,EAASC,IAAcz5C,EAAAA,EAAAA,WAAS,IAChC05C,EAAcC,IAAmB35C,EAAAA,EAAAA,UAAS,IAE3C45C,GAAWC,EAAAA,EAAAA,cACd3vC,IAEC,IAAKA,IAAU4f,EAGb,OAFA6vB,EAAgB,SAChBF,GAAW,GAIb,QAAcx8C,IAAVq8C,EAKJ,IACEA,SAAAA,EAAOQ,QAAQ5vC,GACfuvC,GAAW,GACXE,EAAgB,GAClB,CAAE,MAAOzuC,GACP,MAAMD,GAAM8uC,EAAAA,EAAAA,IAAmB7uC,GAC/BuuC,GAAW,GACPxuC,GACF0uC,EAAgB1uC,EAEpB,MAdE+uC,IAAOr0B,MAAK,IAAMi0B,EAAS1vC,IAc7B,GAEF,CAAC4f,IAOH,OAJAmwB,EAAAA,EAAAA,YAAU,KACRL,EAAS1vC,EAAM,GACd,CAAC0vC,EAAU1vC,IAGZ,kBAACsuC,EAAAA,QAAOA,CAAC/qB,UAAW,aAAcqoB,OAAQ4D,GAAgBF,EAASlQ,QAASoQ,GAC1E,kBAACnL,EAAAA,M,sUAAKA,CAAAA,CACJiL,QAASA,EACTU,eAAcV,EACdW,KAAM,EACNl0C,MAAOA,EACPiE,MAAOA,EACPsd,SAAUA,EACV6mB,OACE,kBAAC7lB,OAAAA,CAAK/sB,UAAWJ,EAAOmzC,eACrBvzC,GAAWiP,EACV,kBAACwe,EAAAA,WAAUA,CACTtnB,aAAY,oBACZ0nB,QAAS,oBACT7sB,QAAShB,EACT0D,KAAK,QACLlD,UAAWJ,EAAOozC,iBAElBxxC,EACHoxC,GAAUA,GAGf/mB,OAAQ,kBAAC5oB,EAAAA,KAAIA,CAACC,KAAK,WACnB4oB,YAAaA,GACT+mB,IAAAA,EAMN0L,EAAAA,W,WAAO,YACXV,EAAQ,KACRA,SAAe,+BAAiBc,KAClC,E,iOAHMJ,GAKAz+C,EAAaoB,IAA0B,CAC3C6xC,eAAe5xC,EAAAA,EAAAA,KAAI,CACjBiC,IAAKlC,EAAMmC,QAAQ,IACnBjC,QAAS,gBAEX4xC,WAAW7xC,EAAAA,EAAAA,KAAI,CACbqF,OAAQ,cCjFNo4C,EAAsB,GAErB,SAASzxB,GAAiB,UAC/BoC,EAAS,WACTtB,EAAU,cACVO,EAAa,aACbgB,EAAY,MACZnB,EAAK,cACLM,EAAa,sBACbJ,EAAqB,cACrBL,EAAa,YACbF,EAAW,mBACX6wB,EAAkB,kBAClBC,EAAiB,MACjBlyB,EAAK,SACLC,EAAQ,KACRtlB,IAEA,MAAM3H,GAASC,EAAAA,EAAAA,aAAYqB,GAAUpB,EAAUoB,EAAOqG,MAC/CiD,EAAOu0C,IAAYx6C,EAAAA,EAAAA,UAASq6C,GAEnC,SAASI,EAAOnR,G,IAESA,EAAvB,MAAMrjC,EAAQvE,KAAKuS,IAAmB,QAAfq1B,EAAAA,aAAAA,EAAAA,EAASnpC,cAATmpC,IAAAA,EAAAA,EAAmB,EAAG+Q,GAE7CG,EAASv0C,EAAQ,EACnB,CAMA,OAJAg0C,EAAAA,EAAAA,YAAU,KACRQ,EAAO/wB,EAAW,GACjB,CAACA,EAAYrB,IAGd,kBAAC7sB,MAAAA,CAAIC,UAAWJ,EAAOmD,UACnB87C,GACA,kBAACzb,EAAAA,OAAMA,CACLvX,OAAQ,KACR7rB,UAAWJ,EAAOyjC,OAClB50B,MAAO8gB,EAAY,YAAc,YACjC1hB,QAAS,CACP,CACEY,MAAO,YACPpF,MAAO,WAET,CACEoF,MAAO,YACPpF,MAAO,YAGX0iB,SAAU,IAAMyD,GAAcD,KAGlC,kBAAC4hB,EAAAA,MAAKA,CAACnxC,UAAWJ,EAAOoS,OACvB,kBAAC8rC,EAAeA,CACdzvB,MAAOA,EAEP7jB,MAAOoiB,EAAQpiB,OAAQhJ,EACvByqB,QAAS,IAAMY,GAAS,GACxBpsB,cAAaC,EAAAA,EAAQC,sBAAsBs+C,WAC3CxwC,MAAOwf,QAAAA,EAAc,GACrBjuB,WAAW6K,EAAAA,EAAAA,IAAGg0C,EAAqBj/C,EAAOs/C,wBAAqB19C,EAAW5B,EAAOukC,OACjFpY,SAAU4C,EACVikB,OACE,kBAAC7lB,OAAAA,CAAK/sB,UAAW,GAAGJ,EAAOgzC,uBACzB,kBAACgL,EAA+BA,CAC9BpvB,cAAeA,EACfD,sBAAuBA,IAEzB,kBAACsuB,EAAeA,CAACxuB,MAAOA,EAAOH,cAAeA,KAGlDrC,OAAQ,KACRC,YAAY,sBACZtsB,QAASs/C,EACTK,QAAU1vC,IACRue,EAAYve,EAAGwe,GACf+wB,EAAO/wB,EAAW,KAIvB4wB,GACC,kBAAC9xB,OAAAA,CAAK/sB,UAAWJ,EAAOw/C,YACtB,kBAACl/C,EAAAA,OAAMA,CACLM,QAAS,KACPgvB,GAAa,GACbqvB,GAAoB,EAEtB7+C,UAAWJ,EAAOW,cAClBJ,QAAS,YACTC,KAAM,UACN2oB,UAAWkF,GACZ,WAGD,kBAAC/tB,EAAAA,OAAMA,CACLM,QAAS,KACPgvB,GAAa,GACbqvB,GAAoB,EAEtB7+C,UAAWJ,EAAOmB,cAClBZ,QAAS,YACTC,KAAM,UACN2oB,UAAWkF,GACZ,YAOX,CAEA,MAAMnuB,EAAY,CAACoB,EAAsBqG,KAAiC,CACxE23C,oBAAoB/9C,EAAAA,EAAAA,KAAI,CACtBgjC,MAAO,CACLz9B,qBAAsB,EACtBC,wBAAyB,KAG7BisC,QAAQzxC,EAAAA,EAAAA,KAAI,CACVC,QAAS,cACTgC,IAAKlC,EAAMmC,QAAQ,MAErBg8C,WAAWl+C,EAAAA,EAAAA,KAAI,CACbw5C,oBAAqB,EACrBC,uBAAwB,IAE1BwE,YAAYj+C,EAAAA,EAAAA,KAAI,CACdC,QAAS,OACTC,eAAgB,WAElBd,eAAeY,EAAAA,EAAAA,KAAI,CACjBS,WAAY,OACZN,aAAc,EACdC,YAAa,OACb,cAAe,CACbA,YAAa,UAGjBR,eAAeI,EAAAA,EAAAA,KAAI,CACjBG,aAAc,KAAKJ,EAAMO,MAAMC,OAAOC,WAAWT,EAAMO,MAAMC,OAAOC,YACpEC,WAAY,OACZ,cAAe,CACbA,WAAY,UAGhB09C,QAAQn+C,EAAAA,EAAAA,KAAI,CACVw5C,oBAAqB,EACrBC,uBAAwB,IAE1BvX,QAAQliC,EAAAA,EAAAA,KAAI,CACVkI,MAAO,wBACPlG,WAAY,EACZ+D,YAAa,EACbgZ,OAAQ,OACRvZ,wBAAyB,IACzBD,qBAAsB,IACtBnF,YAAa,OACbkL,UAAW,OACXm2B,SAAU,OACVl2B,SAAU,OACVyvC,QAAS,SAEXp5C,SAAS5B,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACToJ,MAAO,SAET25B,OAAOhjC,EAAAA,EAAAA,KAAI,CACTkI,MAAO,4BACPu5B,SAAU,QAGVl2B,SAAmB,WAATnF,EAAoB,sBAAwB,sBAEtD48B,MAAO,CACLwW,oBAAqB,EACrBC,uBAAwB,EACxBr0C,WAAY,YACZ1C,SAAU3C,EAAM4C,WAAWC,UAAUF,SACrC2G,MAAO,UAGX+0C,cAAcp+C,EAAAA,EAAAA,KAAI,CAChB8vB,YAAa,SAEfjf,OAAO7Q,EAAAA,EAAAA,KAAI,CACTkI,MAAO,QACPxG,KAAM,WACNud,aAAc,K,4TCtLX,MAAMo/B,UAAwBt7C,EAAAA,GAGnCgI,WAAAA,CAAYzH,GACV0H,M,sUAAM,IACD1H,IAIPg7C,EAAAA,KAAAA,yBAAyBl4C,IACvBiE,KAAKk0C,oBAAoBx0C,SAAS,CAAEy0C,eAAgBp4C,KACpDq4C,EAAAA,EAAAA,IAAa,iBAAkBr4C,GAC/BiE,KAAKq0C,mBAAmBC,iBAAiB,CAAEH,eAAgBp4C,IAC3DiE,KAAKq0C,mBAAmBC,iBAAiB,CAAEC,mBAAoBx4C,GAAO,IAGxEy4C,EAAAA,KAAAA,yBAAyBC,IACvBz0C,KAAKk0C,oBAAoBx0C,SAAS,CAAE+0C,UAAWA,KAC/CL,EAAAA,EAAAA,IAAa,YAAaK,GAC1Bz0C,KAAKq0C,mBAAmBC,iBAAiB,CAAEG,UAAWA,GAAY,IAGpEJ,EAAAA,KAAAA,oBAAmB,IACVx7C,EAAAA,GAAWwE,YAAY2C,KAAM00C,EAAAA,KAGtCR,EAAAA,KAAAA,qBAAoB,IACXr7C,EAAAA,GAAWwE,YAAY2C,KAAM20C,EAAAA,KAGtCC,EAAAA,KAAAA,wBAAuB,KACD50C,KAAKq0C,mBACbO,wBACZx4C,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBu4C,4BAA2B,GA5BnE,EA6FK,SAASC,IACd,OAAOC,EAAAA,EAAAA,IAA4B,YAAaC,EAAAA,cAAcC,WAChE,CAEO,SAASC,IAGd,MAAMl7B,EAAWnI,EAAAA,gBAAgBoI,cAE3Bw6B,EADS,IAAIv6B,gBAAgBF,EAASG,QACnBtY,IAAI,aAE7B,IACE,GAAyB,iBAAd4yC,EAAwB,CACjC,MAAMU,GAAmBC,EAAAA,EAAAA,IAAoBvxC,KAAKiQ,MAAM2gC,IACxD,GAAIU,EACF,OAAOA,CAEX,CACF,CAAE,MAAOlxC,GAEP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,4EACzB,CAEA,OAAO,CACT,CA3HE,EADWgwC,EACJt6C,aAuCT,UAA4B,MAAEf,IAC5B,MAAM,0BAAE08C,EAAyB,kBAAEC,GAAsB38C,EAAMI,YACzD,eAAEo7C,EAAc,UAAEM,GAAc97C,EAAMu7C,oBAAoBn7C,YAC1D,gBAAEuwB,GAAoB3wB,EAAM07C,mBAAmBt7C,WAC/C3E,GAASC,EAAAA,EAAAA,YAAWC,GACpBihD,EAAYpB,SAAAA,EAElB,OACE,kBAAC5/C,MAAAA,CAAIC,UAAWJ,EAAOK,WACpB60B,EAAgBpwB,OAAS,GACxB,kBAACq4C,EAAAA,QAAOA,CAAClP,QAAS,2BAA2B/Y,EAAgBxd,KAAK,SAChE,kBAACpX,EAAAA,OAAMA,CAACG,KAAM,KAAMF,QAAQ,YAAYC,KAAK,UAAUI,QAAS2D,EAAMi8C,sBAAsB,2BAKhG,kBAACld,EAAAA,YAAWA,CAACljC,UAAWJ,EAAOohD,mBAAoBC,aAAAA,GACjD,kBAAC7P,EAAAA,iBAAgBA,CACf/wC,KAAK,KACLwN,QAAS,CACP,CACExE,MAAO,eACPoF,MAAO+xC,EAAAA,cAAcC,WACrBloB,YAAa,iCAEf,CACElvB,MAAO,eACPoF,MAAO+xC,EAAAA,cAAcU,UACrB3oB,YAAa,kCAGjB9pB,MAAOwxC,EACPl0B,SAAU5nB,EAAM67C,yBAIpB,kBAAC9c,EAAAA,YAAWA,CAACljC,UAAWJ,EAAOohD,mBAAoBC,aAAAA,GACjD,kBAAC7P,EAAAA,iBAAgBA,CACf/wC,KAAK,KACLoO,MAAOsyC,EACPh1B,SAAU5nB,EAAMs7C,sBAChB5xC,QAAS,CACP,CACExE,MAAO,OACPoF,OAAO,EACP8pB,YAAa,qCAEf,CACElvB,MAAO,UACPoF,OAAO,EACP8pB,YAAa,0CAKrB,kBAAC4oB,EAAAA,EAAsBA,CAACC,QAASN,EAAmB/0B,SAAU80B,IAGpE,IA4BA,MAAM/gD,EAAaoB,IAA0B,CAC3CjB,WAAWkB,EAAAA,EAAAA,KAAI,CACbC,QAAS,OACTqH,WAAY,SACZrF,IAAKlC,EAAMmC,QAAQ,GACnBqH,UAAWxJ,EAAMmC,QAAQ,MAE3B29C,oBAAoB7/C,EAAAA,EAAAA,KAAI,CACtBe,OAAQ,EACRuG,WAAY,Y,87BCrJhB,MAAM44C,EAA0B,GAAGj2C,EAAAA,uBAqB5B,eAAKk2C,G,qDAAAA,C,CAAL,C,IAMP,MAAMC,GAAsBC,EAAAA,EAAAA,eAAuC,CACjEC,eAAgB,CAAC,EACjBC,kBAAmB,OACnBxsB,QAAS,CAAC,EACVysB,gBAAiB,CAAC,EAClBC,WAAY,OACZC,mBAAoB,OACpBC,WAAY,KAAM,EAClBn3B,SAAS,EACTo3B,UAAW,OACXC,aAAc,OACdC,kBAAmB,SA+Cd,MAAMC,EAA6B,EACxCpgD,WACAqgD,iBACAC,YACAC,gBACAJ,oBACAK,uBACAC,oBACAC,6BACAC,+BAYA,MAAOvtB,EAAS0sB,IAAcr9C,EAAAA,EAAAA,UAA6Bm+C,EAAmBP,KACvEJ,EAAWC,IAAgBz9C,EAAAA,EAAAA,UAAuBg+C,QAAAA,EAAAA,SAClDZ,EAAiBE,IAAsBt9C,EAAAA,EAAAA,eAAyC/C,GAEjFmhD,EA7CR,WACE,IAAIA,EAAsB,CAAC,EAC3B,MAAMC,EAAiB52C,aAAaI,QAAQi1C,GAC5C,GAAIuB,EACF,IAQE,OAPAD,GAAsBE,EAAAA,EAAAA,IAAyBxzC,KAAKiQ,MAAMsjC,KAC9B,IAAxBD,GACF91C,EAAAA,EAAOW,MACL,IAAIs1C,EAAAA,GAAe,+EACnB,CAAEtzC,IAAK,yEAGJmzC,CACT,CAAE,MAAOlzC,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,wDACzB,CAEF,OAAOmzC,CACT,CA2B8BI,IACrBtB,EAAgBuB,IAA0Bz+C,EAAAA,EAAAA,UAAiCo+C,GAsB5EM,GAAmB7E,EAAAA,EAAAA,cACtB8E,IACC,GAAIA,EAAY,CACd,MAAMhuB,EAAUwtB,EAAmBQ,GAEnCtB,EAAW1sB,GAGXmtB,EAxBmB,CAACntB,IACxB,IAAIiuB,EAA0B,GAY9B,OAXAtqC,OAAOrD,KAAK0f,GAAS1mB,SAASopB,IACxB1C,EAAQ0C,GAAWtH,aAAuC9uB,IAA7B0zB,EAAQ0C,GAAW5H,OAClDmzB,EAAcp0C,KAAK6oB,EACrB,IAEFurB,EAAclyC,MAAK,CAACzO,EAAG0O,KAErB,MAAMkyC,EAAwBluB,EAAQ1yB,GAChC6gD,EAAwBnuB,EAAQhkB,GACtC,OAAOkyC,EAAKpzB,MAAQqzB,EAAKrzB,KAAK,IAEzBmzB,CAAa,EAWFG,CAAiBpuB,GACjC,IAEF,CAACmtB,IAGGkB,GAAqBnF,EAAAA,EAAAA,cACxBoF,IACCxB,EAAawB,GAGblB,EAAqBkB,EAAa,GAEpC,CAAClB,IAOGmB,GAAmBrF,EAAAA,EAAAA,cACtBsF,IACClB,EAA2BkB,EAAU,GAEvC,CAAClB,IA0BH,OAtBAhE,EAAAA,EAAAA,YAAU,KACJ2D,GACFc,EAAiBd,EACnB,GACC,CAACA,EAAgBc,KAGpBzE,EAAAA,EAAAA,YAAU,KACR,MAAM2E,EAiDV,SAA2BQ,EAAuCvB,GAChE,IAAKA,EAEH,YADAv1C,EAAAA,EAAOC,KAAK,2CAId,MAAM82C,EAAkB/qC,OAAOrD,KAAKmuC,GAEjCh/C,QAAQK,I,IAAQ2+C,E,OAAsB,QAAtBA,EAAAA,EAAkB3+C,UAAlB2+C,IAAAA,OAAAA,EAAAA,EAAwBrzB,MAAM,IAC9Crf,MAAK,CAACzO,EAAG0O,KACR,MAAM2yC,EAAKF,EAAkBnhD,GACvBshD,EAAKH,EAAkBzyC,GAC7B,YAAiB1P,IAAbqiD,EAAG7zB,YAAoCxuB,IAAbsiD,EAAG9zB,MACxB6zB,EAAG7zB,MAAQ8zB,EAAG9zB,MAEhB,CAAC,IAGN+zB,EAAY3B,EAAU2B,UACtBC,EAAY5B,EAAU4B,UAE5B,GAAI,GAAcA,GAAcJ,EAAgBl/C,OAAQ,CACtD,MAAMu/C,EAAiB,GASvB,OARIF,aAAAA,EAAAA,EAAW7gD,OACb+gD,EAAel1C,KAAKg1C,EAAU7gD,OAE5B8gD,aAAAA,EAAAA,EAAW9gD,OACb+gD,EAAel1C,KAAKi1C,EAAU9gD,MAIzB0gD,EAAgBl/C,OAASk/C,EAAkBK,CACpD,CAEA,MAAO,EACT,CApF0BC,CAAkBhvB,EAASktB,GACjD,GAAIe,aAAAA,EAAAA,EAAez+C,OAAQ,CAIG,IAHPmU,OAAOrD,KAAK0f,GAASvwB,QAAQw/C,GAAQjvB,EAAQivB,GAAK7zB,SAGtD5rB,QA7IvB,SACEwwB,EACA+tB,EACAb,GAEA,MAAMgC,EAAiB,KAAKlvB,GAE5BkvB,GAAeC,EAAAA,EAAAA,IAAYjC,IAAc,CACvCpyB,MAAO,EACPM,QAAQ,EACR/oB,KAAM,aACN+8C,wBAAyB,IACzBlb,YAAamb,KAEfH,GAAeI,EAAAA,EAAAA,IAAYpC,IAAc,CACvCpyB,MAAO,EACPM,QAAQ,EACR/oB,KAAM,aACN+8C,wBAAyB,IACzBlb,YAAamb,KAEftB,EAAiBmB,EACnB,CAwHQK,CAAkBvvB,EAAS+tB,EAAkBb,GAI/CP,OAAmBrgD,EACrB,IACC,CAAC0zB,EAASktB,EAAWP,EAAoBoB,IAG1C,kBAAC1B,EAAoBmD,SAAQ,CAC3Bj2C,MAAO,CACLizC,kBAlFqB58C,IACzBkH,aAAaC,QAAQo1C,EAAyBhyC,KAAKC,UAAUxK,IAC7Dk+C,EAAuBl+C,EAAI,EAiFvB28C,iBACAM,YACAC,aAAcuB,EACd1B,qBACAF,kBACAzsB,UACA0sB,WAAYqB,EACZt4B,QAAS83B,EACTX,WAAY2B,EACZxB,kBA/C0B,KAC9BA,GAAmB,IAiDhBngD,EAAAA,EAQD4gD,EAAsBxtB,IAE1B,GAAI,eAAgBA,EAAS,CAC3B,MAA4D,OACvDA,IADC,WAAEyvB,GAAoD,EAG5D,OAHuBC,EAAqC,GAApDD,cAIV,CACA,OAAOzvB,CAAO,EAwCT,MAAM2vB,EAAwB,KAC5BC,EAAAA,EAAAA,YAAWvD,G,4CCjQpB,MAAMwD,GAAmBvD,EAAAA,EAAAA,eAAoC,CAC3DwD,UAAW,CAAEh1B,MAAO,KAAMi1B,kBAAmB,GAC7CC,mBAAqBF,IAAyB,IAGnCG,EAA2B,EAAGrjD,eACzC,MAAOsjD,EAAYC,IAAiB9gD,EAAAA,EAAAA,UAAoB,CAAEyrB,MAAO,OAE3Ds1B,GAAmBlH,EAAAA,EAAAA,cAAa4G,IACpCK,EAAcL,EAAU,GACvB,IAEH,OACE,kBAACD,EAAiBL,SAAQ,CAACj2C,MAAO,CAAEu2C,UAAWI,EAAYF,mBAAoBI,IAC5ExjD,EAAAA,EAKMyjD,EAAsB,KAC1BT,EAAAA,EAAAA,YAAWC,GC5BdS,GAAqBhE,EAAAA,EAAAA,eAAsC,CAC/DiE,oBAAoB,EACpBC,oBAAsBD,IAAgC,IAG3CE,EAA6B,EAAG7jD,eAC3C,MAAO2jD,EAAoBC,IAAuBnhD,EAAAA,EAAAA,WAAkB,GAE9DqhD,GAA2BxH,EAAAA,EAAAA,cAAaqH,IAC5CC,EAAoBD,EAAmB,GACtC,IAEH,OACE,kBAACD,EAAmBd,SAAQ,CAACj2C,MAAO,CAAEg3C,qBAAoBC,oBAAqBE,IAC5E9jD,EAAAA,EAKM+jD,EAAwB,KAC5Bf,EAAAA,EAAAA,YAAWU,G,cCJb,SAASM,GAAiB,YAAEC,EAAW,eAAEC,IAC9C,MAAM,QAAE9wB,EAAO,mBAAE2sB,GAAuBgD,IAGlCoB,EAAc3vB,IAClB,MAAMtf,EAAUsf,EAAK,GACrB,IAAI4vB,EAAyC,CAAC,EAC1CC,EAAkB,EAqC1B,IAA2BC,EApCvBpvC,EAAQxI,SAAS4f,IACXA,KAAS8G,IACXgxB,EAAmB93B,GAAS8G,EAAQ9G,GACpC+3B,IACF,IAEFtE,EAAmBqE,GA8BIE,EA7BLD,GA8BpBE,EAAAA,EAAAA,mBAAkB,kDAAmD,CACnEC,YAAaF,GA/BqB,EAqB9BxmD,EAhDR,SAAmBsB,GACjB,MAAO,CACLqlD,YAAYplD,EAAAA,EAAAA,KAAI,CACd6F,QAAS,GAAG9F,EAAMmC,QAAQ,SAAUnC,EAAMmC,QAAQ,OAAQnC,EAAMmC,QAAQ,QAG9E,CA0CiBvD,EADD4f,EAAAA,EAAAA,cAEd,OACE,kBAACyxB,EAAAA,MAAKA,CAACnxC,UAAWJ,EAAO2mD,YACvB,kBAACzT,EAAAA,MAAKA,CAACrkC,MAAOs3C,EAAax+C,KAAM,OAAQukB,YAAa,wBAAyBC,SAftDtc,I,IACbA,EAAd,MAAMhB,EAAuB,QAAfgB,EAAAA,EAAEumC,qBAAFvmC,IAAAA,OAAAA,EAAAA,EAAiBhB,MANlB,IAAC+3C,EAOdR,EAAev3C,GACXA,GARU+3C,EASL/3C,GARTg4C,EAAAA,EAAAA,GAAqB5tC,OAAOrD,KAAK0f,GAAUsxB,EAAQP,IAWjDpE,OAAmBrgD,EACrB,IAUJ,C,cCjDO,SAASklD,IACd,MACM9mD,EAZR,SAAmBsB,GACjB,MAAO,CACLylD,OAAOxlD,EAAAA,EAAAA,KAAI,CACTif,aAAclf,EAAMmC,QAAQ,GAC5BF,WAAYjC,EAAMmC,QAAQ,MAC1BQ,SAAU3C,EAAM4C,WAAWD,WAGjC,CAIiB/D,EADD4f,EAAAA,EAAAA,cAEd,OAAO,kBAAC3f,MAAAA,CAAIC,UAAWJ,EAAO+mD,OAAO,YACvC,C,84BCZO,SAASC,EAAkBznD,GAShC,MACMS,EAmDR,SAAmBsB,GACjB,MAAO,CACL2lD,UAAU1lD,EAAAA,EAAAA,KAAI,CACZqF,OAAQ,OACRrD,WAAYjC,EAAMmC,QAAQ,GAC1Bq5C,QAAS,KAEXoK,YAAY3lD,EAAAA,EAAAA,KAAI,CACdgC,WAAYjC,EAAMmC,QAAQ,IAC1B4tB,YAAa/vB,EAAMmC,QAAQ,IAC3B0jD,WAAY,OACZj9C,WAAY,OACZhD,OAAQ,OACRjD,SAAU3C,EAAM4C,WAAW42C,QAAQ,IACnCgC,QAAS,GACTt7C,QAAS,OACToI,cAAe,SACff,WAAY,aAEdu+C,aAAa7lD,EAAAA,EAAAA,KAAI,CACfC,QAAS,OACTqH,WAAY,SACZpH,eAAgB,gBAChBmJ,MAAO,SAETy8C,iBAAiB9lD,EAAAA,EAAAA,KAAI,CACnB0C,SAAU3C,EAAM4C,WAAWC,UAAUF,SACrC2C,OAAQ,YAGV0gD,eAAe/lD,EAAAA,EAAAA,KAAI,CACjB,SAAU,CACRsF,SAAU,SACVQ,aAAc,WACdylB,WAAY,SACZtrB,QAAS,QACTsL,SAAU,UAIlB,CA3FiB5M,EADD4f,EAAAA,EAAAA,c,IAWKvgB,EAIDA,EAEHA,EACAA,EAI6CA,EAXzCA,EARnB,OAAIA,EAAMo0B,OAAOp0B,EAAMkK,OAEnB,oCACE,kBAACtJ,MAAAA,CAAIC,UAAWJ,EAAOonD,aACrB,kBAACG,EAAAA,SAAQA,CACPnnD,UAAWJ,EAAOsnD,cAClB79C,MAAOlK,EAAMkK,MACb0iB,SAAU5sB,EAAM4sB,SAChBq7B,QAA0C,QAAjCjoD,EAAyB,QAAzBA,EAAAA,EAAMo0B,OAAOp0B,EAAMkK,cAAnBlK,IAAAA,OAAAA,EAAAA,EAA2BmxB,cAA3BnxB,IAAAA,GAAAA,IAEVA,EAAMkoD,WACL,kBAACtnD,MAAAA,CAAIC,UAAWJ,EAAOknD,YACrB,kBAAC/mD,MAAAA,KAA8B,QAAzBZ,EAAAA,EAAMo0B,OAAOp0B,EAAMkK,cAAnBlK,IAAAA,OAAAA,EAAAA,EAA2BmlD,wBAAwB,KACzD,kBAACvkD,MAAAA,KAC2B,QAAzBZ,EAAAA,EAAMo0B,OAAOp0B,EAAMkK,cAAnBlK,IAAAA,OAAAA,EAAAA,EAA2BiqC,YAAa,IACG,KAAlB,QAAzBjqC,EAAAA,EAAMo0B,OAAOp0B,EAAMkK,cAAnBlK,IAAAA,OAAAA,EAAAA,EAA2BiqC,aAAoB,QAAU,WAI/DjqC,EAAMsiD,gBAAkBtiD,EAAMuiD,wBAA6DlgD,KAApB,QAApBrC,EAAAA,EAAMsiD,sBAANtiD,IAAAA,OAAAA,EAAAA,EAAuBA,EAAMkK,SAC/E,kBAACtJ,MAAAA,CACCS,QAAS,K,IAEPrB,EADA,MAAwC,E,sUAAA,IAAKA,EAAMsiD,gBAA1CtiD,EAAAA,EAAMkK,OAAP,CAAClK,GAAcmoD,GAAiB,EAARxiD,EAAAA,EAAQ,GAA/B3F,G,QACc,QAAvBA,EAAAA,EAAMuiD,yBAANviD,IAAAA,GAAAA,EAAAA,KAAAA,EAA0B2F,EAAI,EAEhCjE,MAAO,8BACPb,UAAWJ,EAAOqnD,iBACnB,qBAEC,kBAAChkD,EAAAA,KAAIA,CAACC,KAAM,QAIjB/D,EAAMooD,WACL,kBAACtkD,EAAAA,KAAIA,CACH0C,aAAW,qBACX9E,MAAM,2BACNqC,KAAK,gBACL7C,KAAK,KACLL,UAAWJ,EAAOinD,YAOrB,IACT,C,w4BCpBO,MAAMW,EAAyBroD,IAOpC,MAAM,eAAEsiD,EAAc,kBAAEC,GAAsBmD,KACxC,cAAE4C,EAAa,OAAEl0B,EAAM,YAAEm0B,EAAW,aAAEC,GAAiBxoD,EACvD+B,GAAQwe,EAAAA,EAAAA,cACR,QAAEwV,GAAY2vB,IACdjlD,EA7CD,SAA6BsB,GAClC,MAAO,CACLa,MAAMZ,EAAAA,EAAAA,KAAI,CACRuJ,UAAWxJ,EAAMmC,QAAQ,GACzB+c,aAAclf,EAAMmC,QAAQ,GAC5BjC,QAAS,OACT0I,WAAY5I,EAAMwC,OAAOoG,WAAWgnB,UAEtC82B,UAAUzmD,EAAAA,EAAAA,KAAI,CACZ2I,WAAY5I,EAAMwC,OAAOoG,WAAWlG,YAEtCikD,eAAe1mD,EAAAA,EAAAA,KAAI,CACjBif,aAAclf,EAAMmC,QAAQ,KAE5B6D,YAAahG,EAAMmC,QAAQ,MAGjC,CA4BiBykD,CAAoB5mD,GAC7B6mD,EAAYlvC,OAAOrD,KAAK+d,GAAQ5uB,QAAQuvB,GAAcwzB,EAAYxzB,KAElE8zB,EAAax3C,IACZA,EAAOy3C,aAGZR,EAAcvyB,EAAS1kB,EAAO2sB,OAAOnN,MAAOxf,EAAOy3C,YAAYj4B,MAAM,EAGjEk4B,EAAeh0B,IACnB,MAAM7qB,EAAQkqB,EAAOW,GACrB,GAAI7qB,EACF,MAAO,GAAG6qB,gBAAwB7qB,aAAAA,EAAAA,EAAOi7C,uCAG3B,EAGlB,OAAIyD,EAAUrjD,OAEV,kBAACyjD,EAAAA,GAAeA,CAACH,UAAWA,GAC1B,kBAACI,EAAAA,GAASA,CAACC,YAAY,eAAe7pC,UAAU,aAC5C8pC,GACA,kBAACvoD,MAAAA,EAAAA,EAAAA,CAAIC,UAAWJ,EAAOioD,eAAmBS,EAASC,gBAAc,CAAE9O,IAAK6O,EAASE,WAC9ET,EAAU92C,KAnDzB,SAAoBsiB,GAClB,MAAO,CAAC/wB,EAAW0O,KACjB,MAAMu3C,EAAKl1B,EAAO/wB,GACZkmD,EAAKn1B,EAAOriB,GAGlB,OAAgB,MAAZu3C,EAAGz4B,OAA6B,MAAZ04B,EAAG14B,MAClBy4B,EAAGz4B,MAAQ04B,EAAG14B,MAIhB,CAAC,CAEZ,CAsC8B24B,CAAWp1B,IAASzuB,KAAI,CAACovB,EAAWlE,IAClD,kBAAC44B,EAAAA,GAASA,CAACC,YAAa30B,EAAWlvB,IAAKkvB,EAAWlE,MAAOA,IACvD,CAACs4B,EAA6BQ,IAC7B,kBAAC/oD,MAAAA,EAAAA,EAAAA,CACCC,WAAW6K,EAAAA,EAAAA,IAAGjL,EAAOmC,KAAM+mD,EAASC,WAAanpD,EAAOgoD,cAAWpmD,GACnEi4C,IAAK6O,EAASE,UACVF,EAASU,eACTV,EAASW,iBAAe,CAC5BpoD,MAAOqnD,EAAYh0B,KAEnB,kBAAC0yB,EAAiBA,CAChBlF,kBAAmBA,EACnBD,eAAgBA,EAChBp4C,MAAO6qB,EACPnI,SAAU,IAAM47B,EAAazzB,GAC7BX,OAAQA,EACRg0B,WAAW,SAMpBe,EAASx8B,gBAQf,kBAAC46B,EAAoBA,KAAAA,ECtGxBwC,EAAW,IAAIC,KAAKC,cAAS5nD,EAAW,CAAE6nD,YAAa,SAyCtD,MAAMC,EAA4BnqD,IAKvC,MAAM,OAAEo0B,EAAM,YAAEm0B,EAAW,aAAEC,GAAiBxoD,EAExCS,EA9CR,SAA6BsB,GAC3B,MAAO,CACLa,MAAMZ,EAAAA,EAAAA,KAAI,CACRuJ,UAAWxJ,EAAMmC,QAAQ,KACzB+c,aAAclf,EAAMmC,QAAQ,KAC5BjC,QAAS,OACT0I,WAAY5I,EAAMwC,OAAOoG,WAAWgnB,QACpCy4B,aAAc,aAAaroD,EAAMwC,OAAOoG,WAAWC,WAErD69C,UAAUzmD,EAAAA,EAAAA,KAAI,CACZ2I,WAAY5I,EAAMwC,OAAOoG,WAAWlG,YAEtCikD,eAAe1mD,EAAAA,EAAAA,KAAI,CACjBif,aAAclf,EAAMmC,QAAQ,KAE5B6D,YAAahG,EAAMmC,QAAQ,MAGjC,CA4BiBykD,EADDpoC,EAAAA,EAAAA,cAERqoC,EAAYlvC,OAAOrD,KAAK+d,GAAQ5uB,QAAQuvB,GAAcwzB,EAAYxzB,KACxE,OAAI6zB,EAAUrjD,OAGV,kBAAC3E,MAAAA,CAAIC,UAAWJ,EAAOioD,eACpBE,EAAU92C,KAhCnB,SAAoBsiB,GAClB,MAAO,CAAC/wB,EAAW0O,KACjB,MAAMu3C,EAAKl1B,EAAO/wB,GACZkmD,EAAKn1B,EAAOriB,GAGlB,OAAU,MAANu3C,GAAoB,MAANC,EAEd/U,OAAmB,eAAZ+U,EAAGnhD,MAAyBosC,OAAmB,eAAZ8U,EAAGlhD,OAC7CosC,OAAmB,eAAZ+U,EAAGnhD,MAAyBosC,OAAmB,eAAZ8U,EAAGlhD,OAC7C2hD,EAASM,QAAQhnD,EAAG0O,GAKjB,CAAC,CAEZ,CAewBy3C,CAAWp1B,IAASzuB,KAAKovB,I,IAIHX,E,OAHpC,kBAACxzB,MAAAA,CACCiF,IAAKkvB,EACLl0B,UAAWJ,EAAOmC,KAClBlB,MAAO,GAAGqzB,gBAAyC,QAAjBX,EAAAA,EAAOW,UAAPX,IAAAA,OAAAA,EAAAA,EAAmB+wB,yCAErD,kBAACsC,EAAiBA,CAChBS,WAAW,EACXh+C,MAAO6qB,EACPnI,SAAU,IAAM47B,EAAazzB,GAC7BX,OAAQA,I,KAQb,kBAACmzB,EAAoBA,KAAAA,ECpCvB,MAAM+C,EAAwBtqD,IAOnC,MACMS,EA5CR,SAAmBsB,GACjB,MAAO,CACLwoD,aAAavoD,EAAAA,EAAAA,KAAI,CACfwoD,UAAW,SACXzpC,OAAQ,oBAER,uBAAwB,CACtB9e,QAAS,QAGXwoD,eAAgB,SAElBC,oBAAoB1oD,EAAAA,EAAAA,KAAI,CACtB4lD,WAAY,OACZj9C,WAAY,OACZhD,OAAQ,OACRjD,SAAU3C,EAAM4C,WAAW42C,QAAQ,MAErCoP,cAAc3oD,EAAAA,EAAAA,KAAI,CAChBC,QAAS,OACTC,eAAgB,gBAChBwC,SAAU3C,EAAM4C,WAAWimD,GAAGlmD,SAC9BiG,WAAY5I,EAAMwC,OAAOoG,WAAWlG,UACpCN,SAAU,SACVC,IAAK,EACLsG,KAAM,EACNkkC,WAAY7sC,EAAMmC,QAAQ,KAC1B8D,aAAcjG,EAAMmC,QAAQ,KAC5BguB,cAAenwB,EAAMmC,QAAQ,KAC7B6D,YAAahG,EAAMmC,QAAQ,KAC3B2G,OAAQ,EACRoW,aAAclf,EAAMmC,QAAQ,KAGlC,CAUiBvD,EADD4f,EAAAA,EAAAA,c,IAgBEvgB,EAQAA,EArBhB,OACE,kBAACY,MAAAA,CAAIC,UAAWJ,EAAO8pD,aAErB,oCACE,kBAAC3pD,MAAAA,CAAIC,UAAWJ,EAAOkqD,cAAc,kBAEnC,kBAACh6B,SAAAA,CAAOtvB,QAASrB,EAAM6qD,MAAOhqD,UAAWJ,EAAOiqD,oBAAoB,UAItE,kBAACrC,EAAqBA,CACpBC,cAAetoD,EAAMsoD,cACrBE,aAAcxoD,EAAMwoD,aACpBp0B,OAAqC,QAA7Bp0B,EAAAA,EAAM8qD,+BAAN9qD,IAAAA,EAAAA,EAAiCA,EAAM+qD,gBAC/CxC,YAAcj5C,I,IAAUtP,EAAAA,E,OAAoC,QAApCA,EAA4B,QAA5BA,EAAAA,EAAM+qD,gBAAgBz7C,UAAtBtP,IAAAA,OAAAA,EAAAA,EAA8BmxB,cAA9BnxB,IAAAA,GAAAA,CAA6C,EACrEk4B,GAAI,oBAGN,kBAACt3B,MAAAA,CAAIC,UAAWJ,EAAOkqD,cAAc,UACrC,kBAACR,EAAwBA,CACvB3B,aAAcxoD,EAAMwoD,aACpBp0B,OAAqC,QAA7Bp0B,EAAAA,EAAM8qD,+BAAN9qD,IAAAA,EAAAA,EAAiCA,EAAM+qD,gBAC/CxC,YAAcj5C,I,IAAWtP,E,QAA4B,QAA5BA,EAAAA,EAAM+qD,gBAAgBz7C,UAAtBtP,IAAAA,OAAAA,EAAAA,EAA8BmxB,OAAM,K,04BCnEhE,SAAS65B,EAAiBvI,GAC/B,MAAO,CAAC1sB,EAA6Bk1B,EAAqBC,KACxD,GAAID,IAAgBC,EAClB,OAGF,MAAM1G,EAAoB,KAAKzuB,GACzB1f,EAAOqD,OAAOrD,KAAKmuC,GACtBh/C,QAAQK,GAAQ2+C,EAAkB3+C,GAAKsrB,SACvCxrB,KAAKE,I,IAEG2+C,E,MAFM,CACb/rB,UAAW5yB,EACXgrB,MAAmC,QAA5B2zB,EAAAA,EAAkB3+C,GAAKgrB,aAAvB2zB,IAAAA,EAAAA,EAAgC,EACxC,IACA1yC,MAAK,CAACzO,EAAG0O,IAAM1O,EAAEwtB,MAAQ9e,EAAE8e,SAEvBmN,GAAU3nB,EAAKkC,OAAO0yC,EAAa,GAC1C50C,EAAKkC,OAAO2yC,EAAkB,EAAGltB,GAEjC3nB,EACG7Q,QAAQK,QAAgBxD,IAARwD,IAChBwJ,SAAQ,CAACxJ,EAAKgrB,KACb2zB,EAAkB3+C,EAAI4yB,WAAW5H,MAAQA,CAAK,IAIlD4xB,EAAW+B,EAAkB,CAEjC,CAkBO,SAAS2G,IACd,MAAM,QAAEp1B,EAAO,WAAE0sB,EAAU,WAAEE,EAAU,gBAAEH,EAAe,mBAAEE,GAAuBgD,KAC1EkB,EAAaC,IAAkBzhD,EAAAA,EAAAA,UAAiB,IAkEjDkjD,EAAgB0C,EAAiBvI,GAgCvC,OACE,kBAAC9M,EAAAA,oBAAmBA,CAClBt0C,QAAS,KACPshD,GAAW,GACXD,EAAmB3sB,GACnB8wB,EAAe,GAAG,EAEpBjR,YAAY,GAEZ,kBAAC+Q,EAAgBA,CAACC,YAAaA,EAAaC,eAAgBA,IAC5D,kBAACyD,EAAoBA,CACnB9B,aA5GgB4C,IACpB,IAAKr1B,KAAaq1B,KAAcr1B,GAE9B,YAtBN,SAAkBq1B,EAAoBr1B,GACpC,IAAIs1B,EACJ,IACEA,EAAa,CACXt1B,QAAS7lB,KAAKC,UAAU4lB,GACxBq1B,WAAYA,EAEhB,CAAE,MAAO96C,GACP+6C,EAAa,CACXh7C,IAAK,4DACL+6C,WAAYA,EAEhB,CACA19C,EAAAA,EAAOC,KAAK,uBAAwB09C,EACtC,CAOMC,CAASF,EAAYr1B,GAIvB,MAAMxwB,EAASmU,OAAOrD,KAAK0f,GAASvwB,QAAQ+lD,GAAMx1B,EAAQw1B,GAAGp6B,SAAQ5rB,OAC/DoY,GAAYoY,EAAQq1B,GAAYj6B,aAAgB9uB,EAEtD,IAAImiD,EA4BJ,GA1BEA,EAAoB,OACfzuB,GAFHpY,EAEGoY,CACH,CAACq1B,GAAa,OACTr1B,EAAQq1B,IAAW,CACtBj6B,OAAQxT,EACRkT,MAAOtrB,KAKNwwB,CACH,CAACq1B,GAAa,OACTr1B,EAAQq1B,IAAW,CACtBj6B,QAAQ,EACRN,WAAOxuB,MA4Df,SAA2B+oD,GACzB,GAAIr1B,EAAS,C,IACOA,EACOrc,EADzB,MAAMgJ,IAA+B,QAAnBqT,EAAAA,EAAQq1B,UAARr1B,IAAAA,OAAAA,EAAAA,EAAqB5E,QACjCq6B,E,QAAmB9xC,EAAAA,OAAOrD,KAAK0f,GAASvwB,QAAQimD,I,IAAW11B,E,OAAe,QAAfA,EAAAA,EAAQ01B,UAAR11B,IAAAA,OAAAA,EAAAA,EAAiB5E,MAAM,WAA/DzX,IAAAA,OAAAA,EAAAA,EAAkEnU,OACrF6P,EAAQ,CACZs2C,aAAchpC,EAAW,MAAQ,SACjCipC,YAAajpC,EAAW8oC,EAAmB,EAAIA,EAAmB,IAEpEtE,EAAAA,EAAAA,mBAAkB,+CAAgD9xC,EACpE,CACF,CAhEEw2C,CAAkBR,GAGlB3I,EAAW+B,GAGPhC,EAAiB,C,IACHA,EAAhB,MAAMrxB,IAAqC,QAA3BqxB,EAAAA,EAAgB4I,UAAhB5I,IAAAA,OAAAA,EAAAA,EAA6BrxB,QAC7C,IAAI06B,EAEFA,EAA4B,OACvBrJ,GAFHrxB,EAEGqxB,CACH,CAAC4I,GAAa,OACT5I,EAAgB4I,IAAW,CAC9Bj6B,OAAQA,EACRN,MAAOtrB,KAKNi9C,CACH,CAAC4I,GAAa,OACT5I,EAAgB4I,IAAW,CAC9Bj6B,QAAQ,EACRN,WAAOxuB,MAKbqgD,EAAmBmJ,GACnBhF,EAAe,GACjB,GA+CIiE,wBAAyBtI,EACzBuI,gBAAiBh1B,EACjB80B,MA5CiB,KACrB,MAAMrG,EAAoB,KAAKzuB,GAC/B,IAAIlF,EAAQ,EACZnX,OAAOrD,KAAKmuC,GAAmBn1C,SAASxJ,IACtC,MAAMimD,EAC4B,eAAhCtH,EAAkB3+C,GAAKuC,MAAyD,eAAhCo8C,EAAkB3+C,GAAKuC,KAEzEo8C,EAAkB3+C,GAAKsrB,OAAS26B,EAEhCtH,EAAkB3+C,GAAKgrB,MAAQi7B,EAAiBj7B,SAAUxuB,CAAS,IAGrEogD,EAAW+B,GACX9B,EAAmB8B,GACnBqC,EAAe,GAAG,EA+BdyB,cAAeA,IAIvB,CC9JA,MAoBayD,EAA4B/rD,GAErC,kBAACgsD,GAAAA,CACCC,WAAYjsD,EAAMisD,WAClBC,UAAWlsD,EAAMksD,UACjB7qD,QAASrB,EAAMqB,QACfwR,MAAO7S,EAAM6S,MACbs5C,SAAUnsD,EAAMmsD,UAEfnsD,EAAM2C,UAKPqpD,GAA0BhsD,I,IAGaosD,EAF3C,MAAMrqD,GAAQwe,EAAAA,EAAAA,aACR6rC,EAAYhG,IACZ3lD,EArCU,EAACsB,EAAsBsqD,KAAkD,CACzFl7B,QAAQnvB,EAAAA,EAAAA,KAAI,CAEV+e,OAAQ,oBACRlW,OAAQ9I,EAAM8I,OAAOqjB,QACrBvjB,WAAY,gBAEd/H,MAAMZ,EAAAA,EAAAA,KAAI,CACRmC,SAAU,WACVmoD,UAAW,SACX/+B,WAAY,SACZliB,MAAO,OACP0V,OAAQ,OACRrW,KAAM,EACNtG,IAAK,EACLrB,OAAQ,OACR4H,WAAY0hD,QAAAA,EAAW,kBAqBV1rD,CAAUoB,OAAOM,EAA8B,QAAnB+pD,EAAAA,EAAUvG,iBAAVuG,IAAAA,GAAAA,EAAqBtG,mBAEhE,OACE,kBAACllD,MAAAA,CACCwF,aAAcpG,EAAMisD,WACpBM,aAAcvsD,EAAMksD,UACpB7qD,QAASrB,EAAMqB,QACfR,UACEurD,EAAUvG,UAAUh1B,QAAU7wB,EAAMmsD,UAAYC,EAAUvG,UAAUptB,YAAcz4B,EAAM6S,MAAM9O,MAC1F2H,EAAAA,EAAAA,IAAGjL,EAAOmC,KAAMnC,EAAO0wB,QACvB1wB,EAAOmC,MAGZ5C,EAAM2C,SAAQ,ECtDR6pD,GAAe,CAC1BvJ,UAAW,KACXwJ,UAAYjnD,IAAD,EACXiG,eAAWpJ,EACXqqD,kBAAcrqD,GAGHsqD,IAAetK,EAAAA,EAAAA,eAAgCmK,IAE/CI,GAAuB,EAClCjqD,WACAsgD,YACAwJ,YACAC,eACAjhD,eASE,kBAACkhD,GAAapH,SAAQ,CACpBj2C,MAAO,CACL2zC,YACAwJ,YACAC,eACAjhD,cAGD9I,GAKMkqD,GAAkB,KACtBlH,EAAAA,EAAAA,YAAWgH,I,eCjCpB,MA0BaG,GAAmB9sD,IAC9B,MACMS,EA5BU,EAACsB,EAAsBgrD,KAAoC,CAC3EnyB,MAAM54B,EAAAA,EAAAA,KAAI,CACRmC,SAAU,WACV6D,aAAc,MACd/F,QAAS,OACTwhC,SAAU,OACVvhC,eAAgB,eAElB8qD,eAAehrD,EAAAA,EAAAA,KAAI,CACjB+I,UAAWhJ,EAAMiJ,QAAQ4mB,GACzB3vB,QAAS,OACT0I,WAAY5I,EAAMwC,OAAOoG,WAAWlG,UACpCoD,QAAS,QACT7D,WAAyB,WAAb+oD,EAAwB,WAAQ1qD,IAE9C4qD,UAAUjrD,EAAAA,EAAAA,KAAI,CACZsF,SAAU,OACVQ,aAAc,WACdT,OAAQ,UACRU,YAAa,MACbC,aAAc,MACd/F,QAAS,OACTqH,WAAY,aAMC3I,EADD4f,EAAAA,EAAAA,aACkBvgB,EAAM+sD,WAChC,UAAEN,GAAcI,KAEtB,OACE,kBAACj/B,OAAAA,CAAK/sB,UAAWJ,EAAOm6B,MACtB,kBAAChN,OAAAA,CAAK/sB,UAAWJ,EAAOusD,eACD,YAApBhtD,EAAMqpC,WACL,oCACE,kBAACzoC,MAAAA,CACCC,UAAWJ,EAAOwsD,SAClB5rD,QAAS,KACPorD,EAAU,CACR5mD,IAAK7F,EAAMkK,MACXoF,MAAOtP,EAAMsP,MACbG,SAAU6B,GAAAA,GAASC,OACnB,GAGJ,kBAACzN,EAAAA,KAAIA,CAACpC,MAAO,gBAAiBR,KAAM,KAAM6C,KAAM,iBAElD,kBAACnD,MAAAA,CACCC,UAAWJ,EAAOwsD,SAClB5rD,QAAS,KACPorD,EAAU,CACR5mD,IAAK7F,EAAMkK,MACXoF,MAAOtP,EAAMsP,MACbG,SAAU6B,GAAAA,GAAS2tB,UACnB,GAGJ,kBAACn7B,EAAAA,KAAIA,CAACpC,MAAO,sBAAuBR,KAAM,KAAM6C,KAAM,mBAK3D/D,EAAMktD,YACL,kBAACtsD,MAAAA,CAAIc,MAAO,aAAcL,QAASrB,EAAMktD,WAAYrsD,UAAWJ,EAAOwsD,UACrE,kBAACpP,MAAAA,CAAIxyC,MAAM,KAAK0V,OAAO,KAAK+8B,QAAQ,YAAY78C,KAAK,OAAO88C,MAAM,8BAChE,kBAACoP,OAAAA,CACCC,SAAS,UACTC,SAAS,UACTC,EAAE,srBACFrsD,KAAK,UACLssD,YAAY,MAEd,kBAACJ,OAAAA,CACCG,EAAE,6xBACFrsD,KAAK,UACLssD,YAAY,QAMnBvtD,EAAM+4B,OACL/4B,EAAM+4B,MAAMpzB,KAAKd,I,IASEA,EARjB,OACE,kBAACjE,MAAAA,CACCC,UAAWJ,EAAOwsD,SAClB5rD,QAAS,KACP2F,OAAOwuB,KAAK3wB,EAAKtB,KAAM,SAAS,EAElCsC,IAAKhB,EAAKtB,MAEV,kBAACO,EAAAA,KAAIA,CAACpC,MAAiB,QAAVmD,EAAAA,EAAKnD,aAALmD,IAAAA,EAAAA,EAAc,OAAQgB,IAAKhB,EAAKtB,KAAMrC,KAAM,KAAM6C,KAAM,S,KAG3E,ECjHGypD,GAAa,iBC8DbC,GAAeztD,IAC1B,MAAM,MAAEkK,EAAK,MAAEoF,GAAUtP,EACnB+B,GAAQwe,EAAAA,EAAAA,cACR,UAAEslC,GAAcO,IACtB,IAAIjV,EAEJ,GAAIjnC,IAAUsjD,GAAY,CACxB,MAAME,EAAWC,KAAmBj/C,QACf,iBAAVY,GAAsBA,KAASo+C,IACxCvc,EAAauc,EAASp+C,GAAOhL,MAEjC,CAEA,MAAMspD,EAAe/H,EAAUh1B,QAAU7wB,EAAMmsD,UAAYnsD,EAAM6S,MAAM9O,OAAS8hD,EAAUptB,UAEpFh4B,EA1DU,EAACsB,EAAsBovC,KAAyB,CAChE0c,gBAAgB7rD,EAAAA,EAAAA,KAAI,CAAC,GACrB8rD,UAAU9rD,EAAAA,EAAAA,KAAI,CACZqJ,MAAO,SAET0iD,MAAM/rD,EAAAA,EAAAA,KAAI,CACR2F,OAAQ,aAAa5F,EAAMwC,OAAOoD,OAAOkqB,OACzC,UAAW,CACTlqB,OAAQ,aAAa5F,EAAMwC,OAAOoD,OAAOw/B,UAE3CrV,YAAa,MACbvmB,UAAW,MACXvH,WAAY,MACZ6D,QAAS,UACT1D,SAAU,WACVlC,QAAS,cACToI,cAAe,cACf5C,gBAAiB,cAEjBM,YAAaopC,EAAa,GAAGpvC,EAAMmC,QAAQ,OAAU,MAErD,WAAY,CACVwqC,QAAS,KACTvqC,SAAU,WACVuG,KAAM,EACNtG,IAAK,EACL2c,OAAQ,OACR1V,MAAO,GAAGtJ,EAAMmC,QAAQ,OACxBuD,gBAAiB0pC,KAGrBvW,MAAM54B,EAAAA,EAAAA,KAAI,CACRqJ,MAAO,SAET4hD,UAAUjrD,EAAAA,EAAAA,KAAI,CACZsF,SAAU,OACVQ,aAAc,aAEhBkmD,cAAchsD,EAAAA,EAAAA,KAAI,CAChBqJ,MAAO,OACPpJ,QAAS,mBAkBItB,CAAUoB,EAAOovC,GAChC,OACE,kBAACvwC,MAAAA,CAAIC,WAAW6K,EAAAA,EAAAA,IAAGjL,EAAOqtD,SAAUF,EAAentD,EAAOotD,oBAAiBxrD,MACtEiN,GACD,oCACE,kBAACse,OAAAA,CAAK/sB,UAAWJ,EAAOstD,MACtB,oCAAGz+C,IAEJs+C,GAAiC,iBAAVt+C,GAAsBtP,EAAM6S,MAAMzK,OAAS6lD,EAAAA,UAAUC,MAC3E,kBAACpB,GAAeA,CAAC5iD,MAAOlK,EAAMkK,MAAOoF,MAAOA,EAAOy9C,SAAU,Y,4BC7ClE,SAASoB,GAAgBnuD,G,IAIhBijD,EAHd,MACMxiD,EAnCiB,CAACsB,IAA4C,CACpEqsD,iBAAiBpsD,EAAAA,EAAAA,KAAI,CACnB6F,QAAS,EACTkZ,OAAQ,OACRstC,WAAY,IACZhjD,MAAO,SAETijD,eAAetsD,EAAAA,EAAAA,KAAI,CACjBC,QAAS,cACTssD,cAAe,SACfxrD,OAAQ,EACRuE,SAAU,SACVnF,aAAc,QAEhBqsD,aAAaxsD,EAAAA,EAAAA,KAAI,CACf+e,OAAQ,OACR5c,SAAU,SACVuG,KAAM,EACNzI,QAAS,OACT0I,WAAY5I,EAAMwC,OAAOoG,WAAWlG,UACpCoD,QAAS,KAAK9F,EAAMmC,QAAQ,MAC5B2G,OAAQ,EACRE,UAAWhJ,EAAMiJ,QAAQyjD,KAE3BC,SAAS1sD,EAAAA,EAAAA,KAAI,CACX6F,QAAS,UAET,UAAW,CACTvD,MAAOvC,EAAMwC,OAAOC,KAAKK,KACzBwC,OAAQ,eAMG1G,EADD4f,EAAAA,EAAAA,eAER,UAAE0iC,EAAS,UAAEx3C,GAAcohD,KAC3B8B,EAAQ1L,SAAkB,QAAlBA,EAAAA,EAAW2L,eAAX3L,IAAAA,OAAAA,EAAAA,EAAoBz0C,OAAOxO,EAAMmsD,UACzC0C,EAAY5L,aAAAA,EAAAA,EAAW4B,UAAUr2C,OAAOxO,EAAMmsD,WAC7C2C,EAAcC,IAAmB3pD,EAAAA,EAAAA,WAAS,GAC3C4pD,GAAU/P,EAAAA,EAAAA,cAAY,IACtBxzC,GACKwjD,EAAAA,GAAAA,IAAqB,eAAgB,CAAE/2B,GAAIy2B,EAAOO,IAAKlvD,EAAMmsD,UAAY1gD,GAE3E,IACN,CAACkjD,EAAO3uD,EAAMmsD,SAAU1gD,IAC3B,OACE,oCACE,kBAAC7K,MAAAA,CAAIC,UAAWJ,EAAO+tD,aACrB,kBAAC5tD,MAAAA,CAAIC,UAAWJ,EAAOiuD,SACrB,kBAAC5gC,EAAAA,WAAUA,CACTxsB,cAAaC,GAAAA,EAAQ4tD,MAAMC,YAC3BvuD,UAAWJ,EAAO6tD,cAClBpgC,QAAQ,gBACRltB,QAAQ,YACRwF,aAAW,gBACX6oD,iBAAiB,MACjBnuD,KAAK,KACL6C,KAAK,MACL1C,QAAS,IAAM0tD,GAAgB,GAC/BO,SAAU,KAGd,kBAAC1uD,MAAAA,CAAIC,UAAWJ,EAAOiuD,SACrB,kBAACa,EAAAA,gBAAeA,CACd1uD,UAAWJ,EAAO2tD,gBAClBp7B,KAAK,YACLhyB,QAAQ,YACRC,KAAK,OACLC,KAAK,KACLgtB,QAAQ,wBACRmhC,iBAAiB,MACjBC,SAAU,EACVN,QAASA,MAIf,oCACGF,GACC,kBAACU,EAAAA,MAAKA,CAACC,UAAW,IAAMV,GAAgB,GAAQ5kC,QAAQ,EAAMzoB,MAAM,iBAClE,kBAACguD,MAAAA,KAAKb,GACN,kBAACW,EAAAA,MAAMG,UAAS,KACd,kBAACJ,EAAAA,gBAAeA,CAACv8B,KAAK,OAAOg8B,QAAS,IAAMhvD,EAAMsP,OAAiB,wBASjF,CCtFA,MA0BasgD,GAAwB5vD,I,IAWV6vD,EAVzB,IAAIvgD,EAAQtP,EAAMsP,MAClB,MAAMuD,EAAQ7S,EAAM6S,MACdi9C,EAAej9C,EAAM5Q,QAASqN,GAE9B7O,EA/BU,EAACsB,EAAsBsnC,KAA2B,CAClE9/B,UAAUvH,EAAAA,EAAAA,KAAI,CACZC,QAAS,OACTqH,WAAY,aACZe,cAAeg/B,IAAc4kB,EAAAA,UAAU8B,OAAS,cAAgB,MAChE7uC,UAAWmoB,IAAc4kB,EAAAA,UAAU8B,OAAS,QAAU,SAExDrhB,SAAS1sC,EAAAA,EAAAA,KAAI,CACXmC,SAAU,WACVmD,SAAU,SACVrF,QAAS,OACT8e,OAAQ,SAEVivC,aAAahuD,EAAAA,EAAAA,KAAI,CACfsC,MAAOvC,EAAMwC,OAAOC,KAAKK,KACzB0G,UAAW,MACXvH,WAAY,MACZ,UAAW,CACT2qC,eAAgB,iBAaLhuC,EADD4f,EAAAA,EAAAA,aACkBvgB,EAAM6S,MAAMzK,OACtC,WAAEu6C,GAAe+C,KACjB,UAAEG,EAAS,mBAAEE,GAAuBK,IAGpC8I,EAAM,CAAEr+B,MAAO7wB,EAAMmsD,UACrB8D,EAAWp0C,QAAkCqzC,QAA1BW,GAAAA,EAAAA,EAAAA,cAAa7vD,EAAM6S,MAAOq8C,UAA1BW,IAAAA,OAAAA,EAAAA,EAAgCtqD,QAEzD,GAAc,OAAV+J,EACF,OAAO,qCAIPA,EADE4gD,IAAAA,eAAqBlwD,EAAMsP,OACrBtP,EAAMsP,MACY,iBAAVA,EACRY,KAAKC,UAAUnQ,EAAMsP,QAErB6gD,EAAAA,EAAAA,wBAAuBL,GAejC,OACE,kBAAC/D,EAAwBA,CACvB1qD,QAAS,IACHrB,EAAMmsD,WAAatG,EAAUh1B,OAAS7wB,EAAM6S,MAAM9O,OAAS8hD,EAAUptB,UAChEstB,EAAmB,CAAEl1B,MAAO,OAE9Bk1B,EAAmB,CAAEl1B,MAAO7wB,EAAMmsD,SAAU1zB,UAAWz4B,EAAM6S,MAAM9O,KAAM+hD,kBAAmB,IAErGjzC,MAAO7S,EAAM6S,MACbs5C,SAAUnsD,EAAMmsD,UAEhB,kBAACvrD,MAAAA,CAAIC,UAAWJ,EAAOiuC,SACC,IAArB1uC,EAAMowD,YAAoB,kBAACjC,GAAeA,CAAC7+C,MAAOA,EAAO68C,SAAUnsD,EAAMmsD,WAC1E,kBAACvrD,MAAAA,CAAIC,UAAWJ,EAAO8I,YAErB0mD,GA3BY,EAAC3gD,EAAwCpF,IAEzD,kBAACujD,GAAWA,CACV56C,MAAO7S,EAAM6S,MACbs5C,SAAUnsD,EAAMmsD,SAChBkE,YAAa,IAAM1N,GAAW,GAC9Bz4C,MAAOA,EACPoF,MAAOA,IAoBOghD,CAAYhhD,EAAOuD,EAAM9O,MAEtCksD,GAAYp9C,EAAM09C,UACjB,kBAACC,EAAAA,qBAAoBA,CAACz3B,MAAO,K,IAAM82B,E,OAAoBX,QAApBW,GAAAA,EAAAA,EAAAA,cAAah9C,EAAOq8C,UAApBW,IAAAA,EAAAA,EAA4B,EAAE,IAC7DY,GACIA,EAAIC,SAEJ,kBAAC9vD,MAAAA,CAAIC,UAAWJ,EAAOuvD,YAAa3uD,QAASovD,EAAIC,UAC/C,oCAAGphD,IAKL,kBAAC1O,MAAAA,CAAIC,UAAWJ,EAAOuvD,aACrB,oCAAG1gD,OAIX,E,44BC3CZ,SAASqhD,GAAiB3wD,GASxB,MAAM+B,GAAQwe,EAAAA,EAAAA,aAEd,IAAI4wB,EACJ,GAAInxC,EAAMkK,QAAUsjD,GAAY,CAC9B,MAAME,EAAWC,KAAmBj/C,QAChC1O,EAAMsP,SAASo+C,IACjBvc,EAAauc,EAAS1tD,EAAMsP,OAAOhL,MAEvC,CAEA,MAAM7D,EAzDU,EAACsB,EAAsBovC,KAAyB,CAChE4c,MAAM/rD,EAAAA,EAAAA,KAAI,CACR0B,KAAM,WACNM,WAAYjC,EAAMmC,QAAQ,IAC1B4tB,YAAa/vB,EAAMmC,QAAQ,IAC3B2D,QAAS,GAAG9F,EAAMmC,QAAQ,QAASnC,EAAMmC,QAAQ,OACjDC,SAAU,WACVlC,QAAS,cACToI,cAAe,SACfkB,UAAWxJ,EAAMmC,QAAQ,MAE3B0sD,YAAY5uD,EAAAA,EAAAA,KAAI,CAAC,GACjB6uD,WAAW7uD,EAAAA,EAAAA,KAAI,CACb2F,OAAQ,aAAa5F,EAAMwC,OAAOoG,WAAWlG,YAC7CsG,UAAW,oBAAoBhJ,EAAMwC,OAAOoG,WAAWlG,YACvDgD,gBAAiB,cACjBJ,OAAQ,UACRlD,SAAU,WAEV6D,aAAc,GAAGjG,EAAMmC,QAAQ,MAC/B6D,YAAaopC,EAAa,GAAGpvC,EAAMmC,QAAQ,OAAU,GAAGnC,EAAMmC,QAAQ,MAEtE,WAAY,CACVwqC,QAAS,KACTvqC,SAAU,WACVuG,KAAM,EACNtG,IAAK,EACL2c,OAAQ,OACR1V,MAAO,GAAGtJ,EAAMmC,QAAQ,OACxBuD,gBAAiB0pC,GAGnB,UAAW,CACTxpC,OAAQ,aAAa5F,EAAMwC,OAAOoD,OAAOw/B,cAwB9BxmC,CAAUoB,EAAOovC,GAEhC,OACE,kBAACvjB,OAAAA,CAAK/sB,WAAW6K,EAAAA,EAAAA,IAAGjL,EAAOstD,KAAM/tD,EAAM8wD,WAAarwD,EAAOmwD,gBAAavuD,GAAYhB,QAASrB,EAAMqB,SACjG,kBAACusB,OAAAA,CAAK/sB,UAAWJ,EAAOowD,WACrB7wD,EAAMkK,MAAM,IAAElK,EAAMsP,OAEtBtP,EAAM8wD,YACL,kBAAChE,GAAeA,CACdC,SAAU,UACV1jB,UAAWrpC,EAAMqpC,UACjBtQ,MAAO/4B,EAAM+4B,MACb7uB,MAAOlK,EAAMkK,MACboF,MAAOtP,EAAMsP,MACb49C,WAAYltD,EAAM+wD,aAK5B,CAEO,MAAMC,GAAehxD,IAC1B,MAAM,MAAEkK,GAAUlK,GACZ,UAAE6lD,EAAS,mBAAEE,GAAuBK,KACpC,QAAErwB,EAAO,WAAE0sB,GAAeiD,IAC1Bp2C,EAAQtP,EAAMsP,MACd2hD,GAAcC,EAAAA,EAAAA,kBACdhiD,GAAUiiD,EAAAA,EAAAA,UAAQ,IAAMF,EAAY/hD,QAAQ/B,KAAK8jD,IAAc,CAACA,IAGhEp+C,EAAQ7S,EAAM6S,MAEpB,IAAKA,IAASA,aAAAA,EAAAA,EAAOzK,QAAS6lD,EAAAA,UAAUmD,MACtC,OAAO,KAET,MAAMlC,EAAM,CAAEr+B,MAAO7wB,EAAMmsD,UAEvBnsD,EAAMqxD,eAAiBrxD,EAAMsxD,gBAAkBtxD,EAAMuxD,gBACvDvxD,EAAMqxD,cAAcd,UAAWiB,EAAAA,EAAAA,kBAAiBxxD,EAAMuxD,cAAevxD,EAAMqxD,cAAe,CAAC,EAAGniD,IAGhG,MAAM6pB,EAAQ/4B,EAAMqxD,gBAAiBxB,EAAAA,EAAAA,cAAa7vD,EAAMqxD,cAAenC,GA4BvE,OACE,kBAACyB,GAAAA,CACCtvD,QAAS,IAELrB,EAAMmsD,WAAatG,EAAUh1B,OAC7Bhe,EAAM9O,OAAS8hD,EAAUptB,WACzBvuB,IAAU27C,EAAU4L,aAEb1L,EAAmB,CAAEl1B,MAAO,OAG9Bk1B,EAAmB,CACxBl1B,MAAO7wB,EAAMmsD,SACb1zB,UAAW5lB,EAAM9O,KACjB0tD,aAAcvnD,EACd47C,kBAAmB9lD,EAAMsxD,eAAiB,EAAI,IAGlDR,WACEjL,EAAUh1B,QAAU7wB,EAAMmsD,UAAYtG,EAAUptB,YAAc5lB,EAAM9O,MAAQ8hD,EAAU4L,eAAiBvnD,EAEzGm/B,UAAWrpC,EAAMsxD,eAAiB,eAAYjvD,EAC9C6H,MAAOA,EACPoF,MAAOA,EACPyhD,WAAY,IA7CU,CAACt4B,IACzB,MAAMwsB,EAAiB,MAAKlvB,GAEtBxwB,EAASmU,OAAOrD,KAAK0f,GAASvwB,QAAQ+lD,GAAMx1B,EAAQw1B,GAAGp6B,SAAQ5rB,OACjE0/C,EAAexsB,GAAWtH,OAC5B8zB,EAAexsB,GAAa,SACvBwsB,EAAexsB,IAAU,CAC5BtH,QAAQ,EACRN,WAAOxuB,IAGT4iD,EAAexsB,GAAa,SACvBwsB,EAAexsB,IAAU,CAC5BtH,QAAQ,EACRN,MAAOtrB,IAIXk9C,EAAWwC,EAAe,EA2BNyM,CAAkBxnD,GACpC6uB,MAAOA,G,EC9IP44B,GAAcz5B,I,IAEVA,EADRA,EAAAA,SAAW,QAAXA,EAAAA,EAAI8iB,eAAJ9iB,IAAAA,GAAAA,EAAa05B,SAAS,CACpBlnD,KAAgB,QAAVwtB,EAAAA,EAAG8iB,eAAH9iB,IAAAA,OAAAA,EAAAA,EAAY25B,YAClB,EAmBG,SAASC,IAAWC,YAAazX,IACtC,MACM75C,EAxDU,CAACsB,IAA0B,CAC3CiwD,SAAUhwD,EAAAA,GAAG;;;;;;;;;;;;IAab6vD,WAAY7vD,EAAAA,GAAG;;kBAECD,EAAMwC,OAAOoG,WAAWgnB;;;oBAGtB5vB,EAAMwC,OAAOoG,WAAWlG;;IAG1CwtD,YAAajwD,EAAAA,GAAG;;kBAEAD,EAAMwC,OAAOoG,WAAWgnB;;;oBAGtB5vB,EAAMwC,OAAOoG,WAAWlG;;MA6B3B9D,EADD4f,EAAAA,EAAAA,cAEd,OACE,kBAAC3f,MAAAA,CAAIC,UAAWJ,EAAOuxD,UACrB,kBAACpkC,OAAAA,CAAKskC,cAAe,KArBZ,IAACh6B,EACdA,EAAAA,OADcA,EAqBwBoiB,IApB3B,QAAXpiB,EAAAA,EAAI8iB,eAAJ9iB,IAAAA,GAAAA,EAAa05B,SAAS,CACpBxtD,IAAK,EACLsG,KAAM,EACNynD,SAAU,UAiB8B,EAAEC,YAAa,IAAMT,GAAWrX,GAAMz5C,UAAWJ,EAAOoxD,YAC5F,kBAAC/tD,EAAAA,KAAIA,CAACC,KAAM,gBAEd,kBAAC6pB,OAAAA,CAAKskC,cAAe,KAhBX,IAACh6B,EACfA,EAAAA,OADeA,EAgBwBoiB,IAf5B,QAAXpiB,EAAAA,EAAI8iB,eAAJ9iB,IAAAA,GAAAA,EAAa05B,SAAS,CACpBxtD,IAAK,EACLsG,KAAMwtB,EAAG8iB,QAAQqX,YACjBF,SAAU,UAY+B,EAAEC,YAAa,IAAMT,GAAWrX,GAAMz5C,UAAWJ,EAAOwxD,aAC7F,kBAACnuD,EAAAA,KAAIA,CAACC,KAAM,iBAIpB,CClEO,SAASuuD,GAAetyD,GAC7B,MAAM+B,GAAQwe,EAAAA,EAAAA,aACR9f,EAASE,GAAUoB,GACzB,OACE,kBAACnB,MAAAA,CAAIU,cAAaC,GAAAA,EAAQ4tD,MAAMoD,WAAY1xD,UAAWJ,EAAO8xD,YAC5D,oCAAGvyD,EAAMsP,OAGf,CAEO,MAAM3O,GAAY,CAACoB,EAAsBsqD,KAAsB,CACpEkG,YAAYvwD,EAAAA,EAAAA,KAAI,CACdoF,WAAYrF,EAAM4C,WAAW6tD,oBAC7BzxC,OAAQ,OACRstC,WAAY,OACZrmD,aAAcjG,EAAMmC,QAAQ,KAC5B6D,YAAahG,EAAMmC,QAAQ,GAC3BQ,SAAU3C,EAAM4C,WAAWC,UAAUF,aCG5B+tD,GAAwBzyD,IACnC,IAAIsP,EAAQtP,EAAMsP,MAClB,MAAMuD,EAAQ7S,EAAM6S,MACdi9C,EAAej9C,EAAM5Q,QAASqN,GAC9BvN,GAAQwe,EAAAA,EAAAA,aACR9f,EAASE,GAAUoB,IACnB,QAAEg0B,EAAO,WAAE4sB,EAAU,UAAEC,GAAc8C,KACrC,UAAEzC,GAAc4J,MACf6F,EAASC,IAAcvtD,EAAAA,EAAAA,WAAS,GACjCk1C,GAAMf,EAAAA,EAAAA,QAA8B,MAGxCjqC,EADE4gD,IAAAA,eAAqBlwD,EAAMsP,OACrBtP,EAAMsP,MACY,iBAAVA,EACRY,KAAKC,UAAUnQ,EAAMsP,QAErB6gD,EAAAA,EAAAA,wBAAuBL,GAOjC,MAoFM17B,EApFe,CAACA,GACK1a,OAAOrD,KAAK0f,GAElCvwB,QAAQzB,GAASA,KAASshD,EAAAA,EAAAA,IAAYpC,KACtCnxC,MAAK,CAACzO,EAAG0O,IAEJ1O,IAAMmqD,IACA,EAENz7C,IAAMy7C,GACD,EAGe,eAApBz3B,EAAQ1yB,GAAG+E,MACL,EAEc,eAApB2tB,EAAQhkB,GAAG3J,KACN,EAIF2tB,EAAQ1yB,GAAG4mC,YAAclU,EAAQhkB,GAAGk4B,aAAe,EAAI,IAGhCzkC,QAC/B0E,IAEE6rB,EAAQ7rB,GAAOinB,QAEhB4E,EAAQ7rB,GAAO+/B,YAAc,IAI9BtkC,KAAKuE,I,IAEuB+4C,EAD3B,MAAMjuB,EAAaZ,EAAOlqB,GACpB0oD,EAAqB3P,SAAc,QAAdA,EAAAA,EAAWljC,WAAXkjC,IAAAA,OAAAA,EAAAA,EAAgBjvC,OAAOyc,MAAM5d,GAAUA,EAAM9O,OAASmG,IAC3E2oD,EAAWhgD,aAAAA,EAAAA,EAAOrE,OAAOxO,EAAMmsD,UAC/B2G,GAAa99B,KAAgB69B,EAGnC,GAAI79B,EACF,OACE,kBAACg8B,GAAWA,CACVO,mBAAelvD,EACfwQ,MAAOA,EACPkjB,QAASA,EACTo2B,SAAUnsD,EAAMmsD,SAChB30B,MAAOx3B,EAAMw3B,MACb64B,YAAa,IAAM1N,GAAW,GAC9B98C,IAAKqE,EACLA,MAAOA,EACPonD,gBAAgB,EAChBhiD,MAAO0lB,IAMb,GAAI89B,IAAaF,aAAAA,EAAAA,EAAoB7uD,MAAM,CACzC,MAAMgvD,EAAqBH,aAAAA,EAAAA,EAAoBpkD,OAAOxO,EAAMmsD,UAC5D,IAAIyG,aAAAA,EAAAA,EAAoBxqD,QAAS6lD,EAAAA,UAAU+E,QAAUD,EACnD,OACE,kBAAC/B,GAAWA,CACVO,cAAetO,aAAAA,EAAAA,EAAWljC,IAC1BsxC,cAAeuB,EACf//C,MAAOA,EACPvD,MAAOyjD,EACPh9B,QAASA,EACTo2B,SAAUnsD,EAAMmsD,SAChB30B,MAAOx3B,EAAMw3B,MACb64B,YAAa,IAAM1N,GAAW,GAC9B98C,IAAK+sD,EAAmB7uD,KACxBmG,MAAO0oD,EAAmB7uD,KAC1ButD,gBAAgB,GAIxB,CAEA,OAAO,IAAI,IAEZ9rD,QAAQmK,GAAMA,IAGJsjD,CAAajzD,EAAMo0B,QAC5B8+B,EAAStQ,IAAcT,EAAagR,KACpCC,EAAYh/B,EAAO7uB,OAAS,EAElC,OACE,kBAACwmD,EAAwBA,CACvBG,UAAW,KACTyG,GAAW,EAAK,EAElB1G,WAAY,KACV0G,GAAW,EAAM,EAEnBxG,SAAUnsD,EAAMmsD,SAChBt5C,MAAO7S,EAAM6S,OAEb,kBAACwgD,EAAAA,eAAcA,CAAChK,SAAU/O,EAAKrnC,MAAM,cACnC,kBAACrS,MAAAA,CAAIC,UAAWJ,EAAOiuC,SAEC,IAArB1uC,EAAMowD,YAAoB,kBAACjC,GAAeA,CAAChC,SAAUnsD,EAAMmsD,SAAU78C,MAAOA,IAE5E4jD,GAAUE,GAAa,oCAAGh/B,GAC1BwuB,IAAcT,EAAa/tB,QAAUg/B,GAAa,oCAAGh/B,GACrDwuB,IAAcT,EAAa/tB,SAAWg/B,GAAa,kBAACd,GAAcA,CAAChjD,MAAOA,IAG1E4jD,IAAWE,GAAa,kBAACd,GAAcA,CAAChjD,MAAOA,IAC/CszC,IAAcT,EAAa39C,MAAQ,kBAAC8tD,GAAcA,CAAChjD,MAAOA,IAE1DojD,GAAW,kBAACZ,GAAQA,CAACC,YAAazX,M,EAOhC35C,GAAaoB,IAA0B,CAClD2sC,QAAS1sC,EAAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;6EAsB+DD,EAAMwC,OAAOoG,WAAWgnB;;25BC3KrG,MAiDa2hC,GAAmBtzD,IAC9B,MAAM,oBAAEumD,EAAmB,mBAAED,GAAuBI,KAC9C,UAAEzD,GAAc4J,KAChBzR,GAAmB7B,EAAAA,EAAAA,QAAiC,MAEpD94C,EAtDU,EAACsB,EAAsBwxD,EAAwBC,KAAqB,CACpFC,eAAezxD,EAAAA,EAAAA,KAAI,CACjBgC,WAAY,QAEd0vD,iBAAiB1xD,EAAAA,EAAAA,KAAI,CACnBkI,MAAO,kBACPmB,MAAO,OACPo4B,SAAU,QACV1iB,OAAQ,OACR0xB,UAAW,QACXhrC,gBAAiB1F,EAAMwC,OAAOoG,WAAWgnB,QACzChqB,OAAQ,aAAa5F,EAAMwC,OAAOoD,OAAOkqB,OACzChqB,QAAS9F,EAAMmC,QAAQ,GACvBnB,OAAQhB,EAAMmC,QAAQ,EAAG,GACzB6G,UAAWhJ,EAAMiJ,QAAQ4mB,GACzBzvB,aAAcJ,EAAMO,MAAMC,OAAOC,UAEnCmxD,WAAW3xD,EAAAA,EAAAA,KAAI,CACbkI,MAAO,aACPjI,QAAS,OACToJ,MAAO,sBAETm4B,aAAaxhC,EAAAA,EAAAA,KAAI,CACfgC,WAAY,QAEd4vD,YAAY5xD,EAAAA,EAAAA,KAAI,CACdkI,MAAO,cACPjI,QAAS,OACT6vB,YAAa,QAEfluB,SAAS5B,EAAAA,EAAAA,KAAI,CACXkI,MAAO,UACPjI,QAAS,OACT+B,WAAYuvD,EAAgB,OAAS,MAErCloD,MAAOmoD,EAAS,mBAAqB,OAGrCpxD,YAAa,aAAaL,EAAMwC,OAAOoD,OAAOkqB,OAC9CC,YAAa,SAEf+hC,uBAAuB7xD,EAAAA,EAAAA,KAAI,CACzBS,WAAY8wD,EAAgB,aAAaxxD,EAAMwC,OAAOoD,OAAOkqB,OAAS,OACtE7tB,WAAYuvD,EAAgB,OAAS,EACrCxrD,YAAawrD,EAAgB,OAAS,EACtCtxD,QAAS,WASItB,EADD4f,EAAAA,EAAAA,aACuC,IAArBvgB,EAAMowD,WAAkBpwD,EAAM6S,MAAM9O,QAASshD,EAAAA,EAAAA,IAAYpC,KACnF,eAAEX,EAAc,kBAAEC,EAAiB,aAAEM,EAAY,UAAED,GAAc8C,IACjEoO,EAAc9zD,EAAM6S,MAAM9O,QAASshD,EAAAA,EAAAA,IAAYpC,GAE/C8Q,EAAkB,KACtBlR,EAAaD,IAAcT,EAAa39C,KAAO29C,EAAa/tB,OAAS+tB,EAAa39C,KAAK,EAGzF,OACE,kBAACopB,OAAAA,CAAK/sB,UAAWJ,EAAOmD,SACtB,kBAACgqB,OAAAA,CAAK/sB,UAAWJ,EAAOkzD,WACtB,kBAAC/lC,OAAAA,CAAK/sB,UAAWJ,EAAOozD,uBAAwB7zD,EAAMg0D,gBACrD1R,GAAkBC,QAA4DlgD,KAAvCigD,aAAAA,EAAAA,EAAiBtiD,EAAM6S,MAAM9O,QACnE,kBAAC+pB,EAAAA,WAAUA,CACTI,QAAS,qBACTmhC,iBAAkB,MAClBxuD,UAAWJ,EAAO+iC,YAClBh9B,aAAY,qBACZzC,KAAM,IACN1C,QAAS,KACP,MAA6C,E,uUAAA,IAAKihD,GAAzCtiD,EAAAA,EAAM6S,MAAM9O,MAAb,CAAC/D,GAAmBmoD,GAAiB,EAARxiD,EAAAA,GAAQ,GAApC3F,G,SACTuiD,SAAAA,EAAoB58C,EAAI,IAI7BmuD,GACC,oCACGlR,IAAcT,EAAa39C,KAC1B,kBAACspB,EAAAA,WAAUA,CACTuhC,iBAAkB,MAClBnhC,QAAS,kBACT1nB,aAAY,kBACZnF,QAAS0yD,EACTlzD,UAAWJ,EAAOgzD,cAClB1vD,KAAM,iBACN7C,KAAM,OAGR,kBAAC4sB,EAAAA,WAAUA,CACTuhC,iBAAkB,MAClBnhC,QAAS,gBACT1nB,aAAY,gBACZnF,QAAS0yD,EACTlzD,UAAWJ,EAAOgzD,cAClB1vD,KAAM,cACN7C,KAAM,SAMhB,kBAAC0sB,OAAAA,CAAK/sB,UAAWJ,EAAOmzD,YACtB,kBAAC9lC,EAAAA,WAAUA,CACTI,QAAS,QAAQluB,EAAM6S,MAAM9O,YAC7BsrD,iBAAkB,MAClB/U,IAAKc,EACL50C,aAAY,QAAQxG,EAAM6S,MAAM9O,YAChC1C,QAAUiP,IACRi2C,GAAqBD,EAAmB,EAE1CviD,KAAM,gBAITq3C,EAAiBJ,SAEhB,kBAACC,EAAAA,QAAOA,CACNC,KAAMoL,EACN5X,QACE,kBAACiH,EAAAA,oBAAmBA,CAACt0C,QAAS,IAAMklD,GAAoB,GAAQ3Q,YAAY,GAC1E,kBAACh1C,MAAAA,CAAIC,UAAWJ,EAAOizD,iBAAkB1zD,EAAM2C,WAGnDy4C,iBAAkBA,EAAiBJ,U,2HCxItC,SAASiZ,GAAoBj0D,GAUlC,MAAM,oBAAEumD,GAAwBG,KAC1B,QAAE3wB,EAAO,WAAE0sB,EAAU,UAAEG,EAAS,aAAEC,GAAiB6C,KACnD,UAAEzC,GAAc4J,KAChBpsD,EAASE,KAETuzD,GAAajV,EAAAA,EAAAA,cAChBpsC,IACC,MAAMshD,E,uUAAqB,IAAKp+B,GAEGrc,OAAOrD,KAAK89C,GAC5C3uD,QAAQw/C,IACP,MAAMoP,EAAcD,EAAmBnP,GAAKn0B,MACtCu/B,EAAa+D,EAAmBthD,EAAM9O,MAAM8sB,MAClD,OAAOsjC,EAAmBnP,GAAK7zB,QAAUi/B,GAAcgE,GAAeA,EAAchE,CAAU,IAE/FzqD,KAAK0uD,GAASF,EAAmBE,KAEThlD,SAAS21C,SAChB3iD,IAAd2iD,EAAIn0B,OACNm0B,EAAIn0B,OACN,IAGFsjC,EAAmBthD,EAAM9O,MAAMotB,QAAS,EACxCgjC,EAAmBthD,EAAM9O,MAAM8sB,WAAQxuB,EACvCogD,EAAW0R,EAAmB,GAEhC,CAACp+B,EAAS0sB,IAGNqR,EAAc9zD,EAAMs0D,YAAYzhD,MAAM9O,QAASshD,EAAAA,EAAAA,IAAYpC,GAEjE,OACE,kBAACqQ,GAAoBtzD,EAAMs0D,YACzB,kBAAC1zD,MAAAA,CAAIC,UAAWJ,EAAO8zD,UACrB,kBAAClxD,IAAAA,CACCxC,UAAWJ,EAAOoE,KAClBxD,QAAS,KACPrB,EAAMw0D,6BACNjO,GAAoB,EAAM,GAG5B,kBAACziD,EAAAA,KAAIA,CAACjD,UAAWJ,EAAOuyB,KAAMjvB,KAAM,UAAW7C,KAAM,OAAQ,mBAIjE,kBAACN,MAAAA,CAAIC,UAAWJ,EAAO8zD,UACrB,kBAAClxD,IAAAA,CAAExC,UAAWJ,EAAOoE,KAAMxD,QAAS,IAAM6yD,EAAWl0D,EAAMs0D,YAAYzhD,QACrE,kBAACgrC,MAAAA,CACCE,MAAM,6BACND,QAAQ,YACRzyC,MAAM,KACN0V,OAAO,KACPlgB,UAAU,mBAEV,kBAACssD,OAAAA,CACCC,SAAS,UACTC,SAAS,UACTC,EAAE,+sBACFrsD,KAAK,UACLssD,YAAY,MAEd,kBAACJ,OAAAA,CACCG,EAAE,iwCACFrsD,KAAK,UACLssD,YAAY,OAEV,kBAITvtD,EAAMy0D,WACL,kBAAC7zD,MAAAA,CAAIC,UAAWJ,EAAO8zD,UACrB,kBAAClxD,IAAAA,CAAExC,UAAWJ,EAAOoE,KAAMxD,QAAS,K,IAAMrB,E,OAAe,QAAfA,EAAAA,EAAMy0D,iBAANz0D,IAAAA,OAAAA,EAAAA,EAAAA,KAAAA,EAAkB+1B,EAAQ,GAClE,kBAACjyB,EAAAA,KAAIA,CAACjD,WAAW6K,EAAAA,EAAAA,IAAGjL,EAAOuyB,KAAMvyB,EAAOi0D,SAAU3wD,KAAM,mBAAoB7C,KAAM,OAAQ,cAK/FlB,EAAM20D,YACL,kBAAC/zD,MAAAA,CAAIC,UAAWJ,EAAO8zD,UACrB,kBAAClxD,IAAAA,CAAExC,UAAWJ,EAAOoE,KAAMxD,QAAS,K,IAAMrB,E,OAAgB,QAAhBA,EAAAA,EAAM20D,kBAAN30D,IAAAA,OAAAA,EAAAA,EAAAA,KAAAA,EAAmB+1B,EAAQ,GACnE,kBAACjyB,EAAAA,KAAIA,CAACjD,UAAWJ,EAAOuyB,KAAMjvB,KAAM,mBAAoB7C,KAAM,OAAQ,eAK3E4yD,GACC,kBAAClzD,MAAAA,CAAIC,UAAWJ,EAAO8zD,UACrB,kBAAClxD,IAAAA,CACCxC,UAAWJ,EAAOoE,KAClBxD,QAAS,KACHuhD,IAAcT,EAAa39C,KAC7Bq+C,EAAaV,EAAa/tB,QAE1ByuB,EAAaV,EAAa39C,KAC5B,GAGDo+C,IAAcT,EAAa39C,KAC1B,kBAACV,EAAAA,KAAIA,CAACjD,UAAWJ,EAAOuyB,KAAMjvB,KAAM,iBAAkB7C,KAAM,OAE5D,kBAAC4C,EAAAA,KAAIA,CAACjD,UAAWJ,EAAOuyB,KAAMjvB,KAAM,cAAe7C,KAAM,OAG1D0hD,IAAcT,EAAa39C,KAAO,cAAgB,kBAKxDxE,EAAM40D,kBACL,kBAACh0D,MAAAA,CAAIC,UAAWJ,EAAO8zD,UACrB,kBAAClxD,IAAAA,CAAExC,UAAWJ,EAAOoE,KAAMxD,QAAS,K,IAAMrB,E,OAAsB,QAAtBA,EAAAA,EAAM40D,wBAAN50D,IAAAA,OAAAA,EAAAA,EAAAA,KAAAA,EAAAA,GACxC,kBAAC8D,EAAAA,KAAIA,CAACjD,UAAWJ,EAAOuyB,KAAMjvB,KAAM,WAAY7C,KAAM,OAAQ,wBAO1E,CAEA,MAAMP,GAAY,KACT,CACL+zD,SAAS1yD,EAAAA,EAAAA,KAAI,CACX6yD,UAAW,eAEbhwD,MAAM7C,EAAAA,EAAAA,KAAI,CACR4sC,WAAY,MACZ1c,cAAe,QAEjBc,MAAMhxB,EAAAA,EAAAA,KAAI,CACR8vB,YAAa,SAEfyiC,UAAUvyD,EAAAA,EAAAA,KAAI,CAAC,K,qhCC9FnB,SAAS8yD,GAAgB90D,GAQvB,OACE,kBAAC+0D,EAAAA,MAAYA,CACXC,eAAgBh1D,EAAMi1D,SACtBC,cAAe,CAAC,CAAE38B,aAAa2sB,EAAAA,EAAAA,IAAYllD,EAAMijD,WAAYkS,MAAM,IACnEC,gBAAiBp1D,EAAM0sD,aACvB2I,WAAYC,EAAAA,GAAgBC,GAC5Bp+B,KAAMn3B,EAAMm3B,KACZpW,OAAQ/gB,EAAM+gB,OACd1V,MAAOrL,EAAMqL,MACbmqD,cAAe,CAAEta,MAAM,EAAMua,QAAS,CAAC,SAAUC,WAAW,IAGlE,CAEO,MAAMC,GAAS31D,IACpB,MAAM,OAAE+gB,EAAM,SAAE60C,EAAQ,UAAE3S,EAAS,MAAE53C,EAAK,OAAE+oB,GAAWp0B,EACjD+B,GAAQwe,EAAAA,EAAAA,aACR9f,EArCiB,CACvBo1D,SAAS7zD,EAAAA,EAAAA,KAAI,CACXmC,SAAU,aAEZ2xD,WAAW9zD,EAAAA,EAAAA,KAAI,CACb,eAAgB,CAEdC,QAAS,uBAgCN8zD,EAAYC,IAAiB5wD,EAAAA,EAAAA,eAAgC/C,IAC9D,QACJ0zB,EAAO,QACPvK,EAAO,WACPm3B,EAAU,mBACVD,EAAkB,WAClBD,EAAU,kBACVK,EAAiB,eACjBR,EAAc,kBACdC,GACEmD,KAEE,aAAEgH,GAAiBG,MAGlBoJ,IAAqB7wD,EAAAA,EAAAA,UAASsnD,GAE/BpE,EAAgB0C,EAAiBvI,GAEjCwO,GAAcC,EAAAA,EAAAA,kBACdhiD,GAAUiiD,EAAAA,EAAAA,UAAQ,IAAMF,EAAY/hD,QAAQ/B,KAAK8jD,IAAc,CAACA,IAEhEiF,GAAoBjX,EAAAA,EAAAA,cACvBznB,IACC,IAAKA,EAAMjyB,OACT,OAAOiyB,EAGT,MAAO2+B,IAAsBC,EAAAA,EAAAA,qBAAoB,CAC/Cj/B,KAAM,CAACK,GACPo+B,SAAUA,EACV7zD,MAAOA,EACPs0D,iBAAkBnnD,EAClB8oB,YAAa,CACXs+B,SAAU,CACRC,OAAQ,CAAC,GAEXn+B,UAAW,MAKf,IAAK,MAAOvH,EAAOhe,KAAUsjD,EAAmBniD,OAAO2F,UAAW,C,IAG5B68C,EAgC9BlU,EAjCNzvC,EAAMzK,KACJyK,EAAMzK,OAAS6lD,EAAAA,UAAU+E,OAAoCngD,QAA3B2jD,EAAAA,GAA2B3jD,UAA3B2jD,IAAAA,EAAAA,EAAqCvI,EAAAA,UAAU+E,OAASngD,EAAMzK,KAElGyK,EAAMkX,OAAS,SACVlX,EAAMkX,QAAM,CAEfwsC,OAAQ,IACN7H,SAAS,EACT+H,YAAY,EACZC,gBAAkB12D,GAChB,kBAACwmD,EAA0BA,KACzB,kBAACyN,GAAmBA,CAClBK,YAAa,SAAKt0D,GAAAA,CAAOowD,WAAYv/B,IACrC2jC,2BAA4B,IAAM7R,GAAW,GAC7C8R,UACY,IAAV5jC,EAAewjC,GAA6B/L,EAAc+L,EAAMxjC,EAAOA,EAAQ,QAAKxuB,EAEtFsyD,WACE9jC,IAAU2G,EAAMxjB,OAAOzO,OAAS,EAC3B8uD,GAA6B/L,EAAc+L,EAAMxjC,EAAOA,EAAQ,QACjExuB,EAENuyD,iBACEl7C,OAAOrD,KAAKisC,GAAgB/8C,OAAS,EACjC,KACEg9C,EAAkB,CAAC,EAAE,OAEvBlgD,KAKZgJ,MAC4B,QAA1Bi3C,EAAAA,EAAezvC,EAAM9O,aAArBu+C,IAAAA,EAAAA,EACAqU,GAAqB9jD,EAAOge,EAAOkF,EAAS1qB,EAAO8qD,EAAmBniD,OAAOzO,OAAQ09C,GACvF2T,YAAaC,GAAoBhkD,EAAOge,EAAOuD,EAAQ6uB,IACpDpwC,EAAMkX,OAAOwsC,QAIlBE,YAAY,GAEhB,CAEA,OAAON,CAAkB,GAK3B,CAACP,EAAU7zD,EAAOqyB,EAAQ/oB,EAAO6D,EAASyzC,EAAYL,KAIxDjD,EAAAA,EAAAA,YAAU,KACR,MAAMyX,EAAAA,W,WAAU,YACd,MAAM70B,GA6N8B8K,EA5NlCkW,EAAUljC,KA6NC/L,OACdxO,QAAQqN,I,IAELA,EAEAk6B,EAE6DA,EAL/D,MAAMgqB,EACsB,qBAAZ,QAAdlkD,EAAAA,EAAMmkD,gBAANnkD,IAAAA,OAAAA,EAAAA,EAAgB2kB,QACD,WAAf3kB,EAAM9O,OACNgpC,SAAe,QAAfA,EAAAA,EAAWj9B,YAAXi9B,IAAAA,OAAAA,EAAAA,EAAiB3kC,QAAS6uD,EAAAA,cAAcC,SACpCC,EACW,WAAftkD,EAAM9O,MAAqB8O,EAAMzK,OAAS6lD,EAAAA,UAAUmD,QAASrkB,SAAe,QAAfA,EAAAA,EAAWj9B,YAAXi9B,IAAAA,OAAAA,EAAAA,EAAiB3kC,QAAS6uD,EAAAA,cAAcC,SACvG,OAAOH,GAAqBI,CAAsB,IAEnDC,SAASvkD,GACD,CACL,CACEqlB,GAAI,gBACJxpB,QAAS,CACP2oD,OAAQ,OACRC,UAAU,EACVpoD,SAAS,EACT8uB,OAAQnrB,EAAM9O,UAnBnB,IAAmCgpC,EAvNpC,MAAMwqB,EAoMZ,SAAoCC,GAClC,IAAIC,EAAkD,CAAC,EAEvD,IAAK,MAAM5xD,KAAO2xD,EAChBC,EAAoB5xD,IAAO,EAG7B,OAAI6T,OAAOrD,KAAKmhD,GAAcjyD,OAAS,EAC9B,CACL2yB,GAAI,WACJxpB,QAAS,CACPgpD,YAAaF,EACbG,cAAeF,IAId,IACT,CArNoCG,CAoLpC,SAA8B7M,GAE5B,IAAIyM,EAA0C,CAAC,EAW/C,OAVA99C,OAAOrD,KAAK00C,GACTvlD,QAAQK,GAAQklD,EAAgBllD,GAAKsrB,SACrC9hB,SAASxJ,IACR,MAAMgrB,EAAQk6B,EAAgBllD,GAAKgrB,WAErBxuB,IAAVwuB,IACF2mC,EAAa3xD,GAAOgrB,EACtB,IAGG2mC,CACT,CApMyBK,CAAqB9hC,IAGxC,GAAIwhC,EACFt1B,EAAgBryB,KAAK2nD,OAChB,CACL,MAAMO,EAAgB,CACpB5J,KAAMjL,EAAU2B,UAChBp3C,KAAMy1C,EAAU4B,UAChBkT,YAAa9U,EAAU8U,aAErBD,QAAwCz1D,IAAvBy1D,EAActqD,WAA6CnL,IAAvBy1D,EAAc5J,MACrEjsB,EAAgBryB,KAqF1B,SAAgDkoD,GAC9C,MAAO,CACL5/B,GAAI,WACJxpB,QAAS,CACPgpD,YAAa,CACX,CAACI,EAAc5J,KAAKnqD,MAAO,EAC3B,CAAC+zD,EAActqD,KAAKzJ,MAAO,GAE7B4zD,cAAe,CACb,CAACG,EAActqD,KAAKzJ,OAAO,EAC3B,CAAC+zD,EAAc5J,KAAKnqD,OAAO,IAInC,CAlGYi0D,CACEF,GAOR,CAEA,GAAI71B,EAAgB18B,OAAS,EAAG,CAC9B,MAAM0yD,QAA0CC,EAAAA,EAAAA,gBAE9CC,EAAAA,EAAAA,oBAAmBl2B,EAAiB,CAACghB,EAAUljC,OAE3Cg2C,EAAaG,EAAkB+B,EAAqB,IAC1DjC,EAAcD,EAChB,MACEC,EAAcE,EAAkBjT,EAAUljC,KAE9C,E,mOAtCM+2C,GAuCNA,GAAS,GACR,CAAC7T,EAAUljC,IAAKkjC,EAAU4B,UAAW5B,EAAU2B,UAAW3B,EAAU8U,YAAa7B,EAAmBngC,KAGvGspB,EAAAA,EAAAA,YAAU,KACJ4W,GAAqBvJ,GACvB5J,GAEF,GACC,CAACmT,EAAmBnT,EAAmB4J,IAE1C,MAAMkC,EAAU3L,EAAUljC,IAAI/L,OAAOyc,MAAM5d,GAAUA,EAAM9O,QAASq0D,EAAAA,EAAAA,IAAUnV,KACxEoV,EAAYzJ,aAAAA,EAAAA,EAASpgD,OAAO0jC,WAAWviC,GAAMA,KAAMsmD,aAAAA,EAAAA,EAAmB/9B,MACtEogC,EAAiBD,IAA4B,IAAfA,EAAmBA,OAAYh2D,EAEnE,IAAK0zD,EACH,OAAO,qCAeT,OACE,kBAACn1D,MAAAA,CAAIU,cAAaC,GAAAA,EAAQ4tD,MAAMvrD,QAAS/C,UAAWJ,EAAOo1D,SACxDrqC,GACC,kBAAC+sC,EAAAA,OAAMA,CACLr3D,KAAM,KACNs3D,QAAS,KACP7V,GAAW,GACXD,EAAmB3sB,EAAQ,GAG7B,kBAACo1B,EAAyBA,OAI9B,kBAACvqD,MAAAA,CAAIC,UAAWJ,EAAOq1D,WACrB,kBAAC9P,EAAwBA,KACvB,kBAACyS,EAAAA,WAAUA,CAACliB,YAAY,EAAMmiB,UAAU,EAAOC,cAAc,GAC3D,kBAAC7D,GAAAA,CACC7R,UAAWA,EACXyJ,aAAc4L,EACdnhC,KAAM4+B,EACNh1C,OAAQA,EACR1V,MAAOA,EACP4pD,UAAUjlC,EAAAA,GAAAA,WAnCL,CAAC4oC,EAA0BvtD,KAC1C,MAAMxF,EAAM6T,OAAOrD,KAAK0f,GACrBvwB,QAAQK,GAAQkwB,EAAQlwB,GAAKsrB,SAC7BV,MAAM5qB,GAAQA,IAAQ+yD,IAEzB,GAAI/yD,GAAOwF,EAAQ,EAAG,CACpB,MAAM1F,EAAM,MAAK28C,GACjB38C,EAAIE,GAAOwF,EACXk3C,EAAkB58C,EACpB,IA0BuC,U,EAyB3C,SAAS6wD,GAA2B3jD,GAElC,GAAIA,EAAM9O,KAAM,CACd,MAAMA,EAAO8O,EAAM9O,KAAK2R,cACxB,GAAa,SAAT3R,GAA4B,SAATA,EACrB,OAAOkqD,EAAAA,UAAUC,IAErB,CAGA,IAAK,IAAIh5C,EAAI,EAAGA,EAAIrC,EAAMrE,OAAOjJ,OAAQ2P,IAAK,CAC5C,MAAMvF,EAAIkD,EAAMrE,OAAO0G,GACvB,GAAS,MAALvF,EACF,OAAOkpD,GAA2BlpD,EAEtC,CAIF,CAEO,MAAMg+C,GAAmB,KACvB,CACLj/C,QAAS,CACPoqD,SAAU,CACRx0D,MAAO,UACPusB,MAAO,GAETkoC,KAAM,CACJz0D,MAAO,UACPusB,MAAO,GAETxiB,MAAO,CACL/J,MAAO,UACPusB,MAAO,GAEToW,IAAK,CACH3iC,MAAO,UACPusB,MAAO,GAETmoC,KAAM,CACJ10D,MAAO,UACPusB,MAAO,GAETyqB,QAAS,CACPh3C,MAAO,UACPusB,MAAO,GAETljB,KAAM,CACJrJ,MAAO,UACPusB,MAAO,GAET9V,KAAM,CACJzW,MAAO,UACPusB,MAAO,GAETooC,MAAO,CACL30D,MAAO,UACPusB,MAAO,GAETqoC,MAAO,CACL50D,MAAO,UACPusB,MAAO,IAGXzoB,KAAM+wD,EAAAA,YAAYC,cAiEtB,SAASvC,GACPhkD,EACAu9C,EACAh8B,EACA6uB,GAEA,OAAIpwC,EAAM9O,QAASshD,EAAAA,EAAAA,IAAYpC,GACtB,CACLoW,cAAgBr5D,GACd,kBAACyyD,GAAoBA,GAAAA,GAAAA,CAAAA,EAAKzyD,GAAAA,CAAOowD,WAAYA,EAAYh8B,OAAQA,EAAOp0B,EAAMmsD,aAEhF/jD,KAAMkxD,EAAAA,qBAAqB9lC,QAIxB,CACL6lC,cAAgBr5D,GAAU,kBAAC4vD,GAAoBA,GAAAA,GAAAA,CAAAA,EAAK5vD,GAAAA,CAAOowD,WAAYA,KACvEhoD,KAAMkxD,EAAAA,qBAAqB9lC,OAE/B,CAEA,SAASmjC,GACP9jD,EACAu9C,EACAr6B,EACAwjC,EACAC,EACAvW,G,IAmCYpwC,EAAAA,EAjCZ,MAGMtF,EAAWisD,GAAkB,EAAID,EAAazyD,KAAKg1C,IAAIyd,EAAa,GAGpEE,EAA8B,IAAfrJ,EAAmB,GAAK,EAG7C,GAAIv9C,EAAMzK,OAAS6lD,EAAAA,UAAUC,KAC3B,OAAO,IAAMuL,EAGf,MAAMC,EAAa3jC,EAAQljB,EAAM9O,MAEjC,QAAmB1B,IAAfq3D,EACF,O,IAGyBA,EAA3B,MAAMC,EAAY7yD,KAAKuS,IAAwB,QAApBqgD,EAAAA,EAAWC,iBAAXD,IAAAA,EAAAA,EAAwB,EAAG7mD,EAAM9O,KAAKwB,QAEjE,OAAIm0D,EAAWC,UAGN7yD,KAAKg1C,IAAIh1C,KAAKuS,IAAgB,IAAZsgD,EAAkB,GAAKF,EAxBjC,GAwB0DA,GAAelsD,GAGtFsF,EAAM9O,QAASshD,EAAAA,EAAAA,IAAYpC,GAKxBn8C,KAAKg1C,IACVh1C,KAAKuS,IAAwC,KAAV,QAAzBxG,EAAY,QAAZA,EAAAA,EAAMrE,cAANqE,IAAAA,GAAiB,QAAjBA,EAAAA,EAAe,UAAfA,IAAAA,OAAAA,EAAAA,EAAmBtN,cAAnBsN,IAAAA,EAAAA,EAA6B,IAAY,GAAK4mD,EAjCzC,GAiCkEA,GACjFlsD,QAPF,E,IAMYsF,CAGd,C,eCjeA,MAAM+mD,GAAe,2EAmBRC,GAAa75D,IACxB,MAAM,UAAEijD,GAAc4J,MAEfiN,EAAeC,IAAoB30D,EAAAA,EAAAA,UAAS,CAAEiG,MAAO,EAAG0V,OAAQ,KAGvEi5C,EAAAA,GAAAA,GAAkB,CAChB1f,IAAKt6C,EAAMi6D,UACXhF,SAAU,KACR,MAAMz+C,EAAUxW,EAAMi6D,UAAUjf,QAC5BxkC,IACEsjD,EAAczuD,QAAUmL,EAAQ0jD,aAAeJ,EAAc/4C,SAAWvK,EAAQ2jD,cAClFJ,EAAiB,CACf1uD,MAAOmL,EAAQ0jD,YACfn5C,OAAQvK,EAAQ2jD,eAGtB,IAIJ,MAAM15D,EA3BiB,CACvBo1D,SAAS7zD,EAAAA,EAAAA,KAAI,CACXmC,SAAU,cA0BNyxD,GAAWwE,EAAAA,EAAAA,eAIXC,GAAsBpb,EAAAA,EAAAA,cACzBqb,IACC,MAAMC,EAAqBv6D,EAAMg2B,WAUjC,OATIukC,aAAAA,EAAAA,EAAoBh1D,SACtBmU,OAAOlL,OAAO+rD,GAAoBlrD,SAAQ,CAACxJ,EAAKgrB,KAC1CypC,EAAWz0D,KACby0D,EAAWz0D,GAAKsrB,QAAS,EACzBmpC,EAAWz0D,GAAKgrB,MAAQA,EAC1B,IAIGypC,CAAU,GAEnB,CAACt6D,EAAMg2B,aAIT,IAAKitB,IAAcA,EAAUljC,IAAIxa,OAC/B,OAAO,K,IAGM09C,EAAf,MAAM7uB,EAA4C,QAAnC6uB,EAAAA,EAAUuX,mCAAVvX,IAAAA,EAAAA,EAAyC,GAClDwX,EAAmBxX,EAAYA,EAAUljC,IAAIxa,OAAS,EAG5D,IAAIi/C,EAgGN,SAAiCzX,EAAsB3Y,GACrD,IAAIowB,EAAwC,CAAC,EAG7C,MAAMkW,EAAW,IAAI1wB,IACfC,EA9CD,SAAqC7V,GAC1C,MAAM6U,EAAiB,IAAIe,IAwB3B,OAvBA5V,EAAO/kB,SAASsrD,IACKjhD,OAAOrD,KAAKskD,GACpBtrD,SAAS0lB,IAClB,GAAIkU,EAAej3B,IAAI+iB,GAAY,CACjC,MAAM6lC,EAAS3xB,EAAe/6B,IAAI6mB,GAC5BvmB,EAASosD,aAAAA,EAAAA,EAAQC,SACjBlB,EAAYiB,aAAAA,EAAAA,EAAQjB,UAEtBnrD,KAAWA,aAAAA,EAAAA,EAAQwD,IAAI2oD,EAAY5lC,OACrCvmB,SAAAA,EAAQgU,IAAIm4C,EAAY5lC,IACpB4kC,GAAagB,EAAY5lC,GAAWxvB,OAASo0D,GAC/C1wB,EAAeiB,IAAInV,EAAW,CAAE4kC,UAAWgB,EAAY5lC,GAAWxvB,OAAQs1D,SAAUrsD,IAG1F,MACEy6B,EAAeiB,IAAInV,EAAW,CAC5B4kC,UAAWgB,EAAY5lC,GAAWxvB,OAClCs1D,SAAU,IAAIhpD,IAAI,CAAC8oD,EAAY5lC,MAEnC,GACA,IAGGkU,CACT,CAoBsB6xB,CAA4B1mC,GAC1CqmC,EAAmB1tB,EAAYA,EAAUxnC,OAAS,GAEpD6uB,aAAAA,EAAAA,EAAQ7uB,SAAUk1D,IAEpBrmC,EAAO/kB,SAAS+kB,IACM1a,OAAOrD,KAAK+d,GAEpB/kB,SAASnF,I,IAEM++B,EADzB,MAAMA,EAAiBgB,EAAY/7B,IAAIhE,G,IACd++B,EAAzB,MAAM8xB,EAAiD,QAA9B9xB,EAAAA,SAAwB,QAAxBA,EAAAA,EAAgB4xB,gBAAhB5xB,IAAAA,OAAAA,EAAAA,EAA0B/nC,YAA1B+nC,IAAAA,EAAAA,EAAkC,EAE3D,GAAIyxB,EAAS1oD,IAAI9H,GAAQ,CACvB,MAAMoF,EAAQorD,EAASxsD,IAAIhE,GAEvBoF,KACEA,aAAAA,EAAAA,EAAO6hB,QACTupC,EAASxwB,IAAIhgC,EAAO,CAClBi7C,wBAAyB71C,EAAM61C,wBAA0B,EACzDh0B,QAAQ,EACRN,MAAOvhB,EAAMuhB,MACboZ,YAAa8wB,EACbpB,UAAW1wB,aAAAA,EAAAA,EAAgB0wB,YAG7Be,EAASxwB,IAAIhgC,EAAO,CAClBi7C,wBAAyB71C,EAAM61C,wBAA0B,EACzDh0B,QAAQ,EACRN,WAAOxuB,EACP4nC,YAAa8wB,EACbpB,UAAW1wB,aAAAA,EAAAA,EAAgB0wB,YAKnC,MACEe,EAASxwB,IAAIhgC,EAAO,CAClBi7C,wBAAyB,EACzBh0B,QAAQ,EACRN,WAAOxuB,EACP4nC,YAAa8wB,EACbpB,UAAW1wB,aAAAA,EAAAA,EAAgB0wB,WAE/B,GACA,IAIJnV,EAAoB9qC,OAAOshD,YAAYN,GAGvChhD,OAAOrD,KAAKmuC,GAAmBn1C,SAASxJ,IACtC2+C,EAAkB3+C,GAAKs/C,wBAA0B8V,GAC/CzW,EAAkB3+C,GAAKs/C,wBACvBsV,EAAAA,KAIN,OAAOjW,CACT,CAhK0B0W,CAAwBjY,EAAUljC,IAAKqU,GAC/D,MAAM0jC,EAAgB,CACpB5J,KAAMjL,EAAU2B,UAChBp3C,KAAMy1C,EAAU4B,UAChBkT,YAAa9U,EAAU8U,aAIzB,GAAID,EAAe,EAgKrB,SACEqD,EACA3W,EACAiW,GAEAU,EAAkB9rD,SAASwD,I,IAIR2xC,EACHA,EAJd,IAAK3xC,EACH,OAEF,MAAM8K,EAAwC,QAA7B6mC,EAAAA,EAAkB3xC,EAAM9O,aAAxBygD,IAAAA,OAAAA,EAAAA,EAA+BrzB,OAC1CN,EAAqC,QAA7B2zB,EAAAA,EAAkB3xC,EAAM9O,aAAxBygD,IAAAA,OAAAA,EAAAA,EAA+B3zB,MAE3C2zB,EAAkB3xC,EAAM9O,MADtB4Z,QAAsBtb,IAAVwuB,EACkB,CAC9Bs0B,wBAAyB8V,GACvBpoD,EAAMrE,OAAOhJ,QAAQ8J,GAAUA,UAAuC/J,OACtEk1D,GAEFtpC,QAAQ,EACRN,MAAOA,EACPoZ,YAAawwB,GAGiB,CAC9BtV,wBAAyB8V,GACvBpoD,EAAMrE,OAAOhJ,QAAQ8J,GAAUA,UAAuC/J,OACtEk1D,GAEFtpC,QAAQ,EACRN,WAAOxuB,EACP4nC,YAAawwB,EAEjB,GAIJ,CAlMIW,CACE,CAACtD,EAAc5J,KAAM4J,EAActqD,QAASsqD,EAAcC,aAC1DvT,EACAiW,GAGFjW,EAAoB6V,EAAoB7V,IA8L5C,SACErzB,EACA2mC,EACAtT,G,IAcIsT,EAA4BA,EAXhC,GAAsB,IAAlB3mC,EAAO5rB,OAAc,C,IACnBuyD,EAIAA,EAHgBA,EACAA,EAGAA,EACAA,EANpB,GAAsB,QAAlBA,EAAAA,EAActqD,YAAdsqD,IAAAA,OAAAA,EAAAA,EAAoB/zD,KACtBygD,EAAoC,QAAlBsT,EAAAA,EAActqD,YAAdsqD,IAAAA,OAAAA,EAAAA,EAAoB/zD,MAAMotB,QAAS,EACrDqzB,EAAoC,QAAlBsT,EAAAA,EAActqD,YAAdsqD,IAAAA,OAAAA,EAAAA,EAAoB/zD,MAAM8sB,MAAQ,EAEtD,GAAsB,QAAlBinC,EAAAA,EAAc5J,YAAd4J,IAAAA,OAAAA,EAAAA,EAAoB/zD,KACtBygD,EAAoC,QAAlBsT,EAAAA,EAAc5J,YAAd4J,IAAAA,OAAAA,EAAAA,EAAoB/zD,MAAMotB,QAAS,EACrDqzB,EAAoC,QAAlBsT,EAAAA,EAAc5J,YAAd4J,IAAAA,OAAAA,EAAAA,EAAoB/zD,MAAM8sB,MAAQ,CAExD,CAEA,IAAsB,QAAlBinC,EAAAA,EAAc5J,YAAd4J,IAAAA,OAAAA,EAAAA,EAAoB/zD,QAA0B,QAAlB+zD,EAAAA,EAActqD,YAAdsqD,IAAAA,OAAAA,EAAAA,EAAoB/zD,MAAM,C,IACtC+zD,EACAA,EADlBtT,EAAoC,QAAlBsT,EAAAA,EAActqD,YAAdsqD,IAAAA,OAAAA,EAAAA,EAAoB/zD,MAAMqE,KAAO,aACnDo8C,EAAoC,QAAlBsT,EAAAA,EAAc5J,YAAd4J,IAAAA,OAAAA,EAAAA,EAAoB/zD,MAAMqE,KAAO,YACrD,CAEI0vD,EAAcC,YAAYxyD,QAC5BuyD,EAAcC,YAAY1oD,SAASwD,I,IAChBA,GAAkB,QAAlBA,EAAAA,EAAMkX,OAAOgP,aAAblmB,IAAAA,OAAAA,EAAAA,EAAoBtN,UAEnCi/C,EAAkB3xC,EAAM9O,MAAMqE,KAAO,aACvC,GAGN,CAtNIizD,CAHe3hD,OAAOrD,KAAKmuC,GAAmBh/C,QAAQK,GAAQ2+C,EAAkB3+C,GAAKsrB,SAGzD2mC,EAAetT,EAC7C,CAEA,OACE,kBAACqR,UAAAA,CAAQh1D,UAAWJ,EAAOo1D,SACzB,kBAAC9S,EAA0BA,CACzBI,qBAAsBnjD,EAAMmjD,qBAC5BF,UAAWA,EACXD,eAAgBwB,EAChBtB,cAAeljD,EAAMkjD,cACrBJ,kBAAmB9iD,EAAM8iD,kBACzBM,kBAAmBpjD,EAAMojD,kBACzBC,2BAA4BrjD,EAAMqjD,2BAClCC,yBAA0BtjD,EAAMsjD,0BAEhC,kBAACqS,GAAKA,CACJ1S,UAAWA,EACX2S,SAAUA,EACV70C,OAAQ+4C,EAAc/4C,OAAS,GAC/B1V,MAAOyuD,EAAczuD,MAAQ,GAC7B+oB,OAAQA,K,EAOZ6mC,GAAY,CAAC3rD,EAAegsD,IACzBx0D,KAAKy0D,KAAK,IAAOjsD,EAASgsD,GAsC5B,SAASzC,GAA2BvpD,GACzC,IAAI+5B,GAAYmyB,EAAAA,EAAAA,yBAAwBlsD,GAKxC,MAJgC,WAAd+5B,GAA0BuwB,GAAa9kD,KAAKxF,KAE5D+5B,EAAY4kB,EAAAA,UAAUC,MAEjB7kB,CACT,CC/JO,MAAMoyB,GAAgB,EAC3B1uB,YACAmW,gBACAltB,aACAy2B,YACAC,eACAjhD,YACAwuD,YACAnX,oBACAK,uBACAC,oBACAC,6BACAC,+BAEA,IAAKvW,EACH,OAAO,KAGT,MAAMkW,GAAYyY,EAAAA,EAAAA,IAAe3uB,GACjC,OAAKkW,EAKH,kBAAC2J,GAAoBA,CAACH,UAAWA,EAAWC,aAAcA,EAAcjhD,UAAWA,EAAWw3C,UAAWA,GACvG,kBAAC4W,GAASA,CACRzW,kBAAmBA,EACnBF,cAAeA,EACfC,qBAAsBA,EACtBntB,WAAYA,EACZikC,UAAWA,EACXnX,kBAAmBA,EACnBO,2BAA4BA,EAC5BC,yBAA0BA,KAbvB,I,opBCzBX,IAAIqY,GblB+B,CAAC,YAAa,OAAQ,OAAQ,QawB1D,MAAMC,WAAuB72D,EAAAA,GAa3BmH,UAAAA,GACLG,KAAKN,SAAS,CACZ6uB,KAAM,IAAIjB,GAAAA,GAAU,CAAEI,uBAAuB,MAE/C1tB,KAAKwvD,6CACP,CAEQC,cAAAA,GACN,OAAO52D,EAAAA,GAAWwE,YAAY2C,KAAM00C,GACtC,CArBAh0C,WAAAA,CAAYzH,GACV0H,MAAM,G,uUAAA,IAAK1H,GAAAA,CAAOg+C,0BAA0B,KAK9C,QAAOD,8BAA8B1lC,IACnCtR,KAAKN,SAAS,CACZu3C,yBAA0B3lC,GAC1B,IAeJk+C,GAAAA,KAAAA,+CAA8C,KAC5C,MACME,EADe,IAAIx1C,gBAAgBrI,EAAAA,gBAAgBoI,cAAcE,QAClCtY,IAAI,cACnC8tD,GAAgBC,EAAAA,EAAAA,IAAmBF,GACnCG,EAAc7vD,KAAKyvD,iBAEzBH,GAAoBK,GAChB3vD,KAAK8vD,wBAAwBH,GAC3B3vD,KAAK+vD,wBAAwBJ,GAE/BL,GACgBA,GAAkBp2D,OACtC22D,EAAYnwD,SAAS,CACnBiqB,WAAY3jB,MAAMkS,KAAK,IAAI1S,IAAI,IAAI8pD,MAAsBO,EAAY52D,MAAMqwB,oBAC3E,IAIJ0mC,GAAAA,KAAAA,yBAAyBrmC,IACvB,MAAMkmC,EAAc7vD,KAAKyvD,iBAEzBH,GAAoBtvD,KAAK+vD,wBAAwBpmC,GAGjD,MAAMsmC,EAAqBjqD,MAAMkS,KAAK,IAAI1S,IAAI,IAAKmkB,GAAc,MAAOxwB,QACrEqN,IAAW8oD,GAAkBj2D,SAASmN,KAGzCqpD,EAAYnwD,SAAS,CACnB4pB,gBAAiB2mC,KAGnBC,EAAAA,GAAAA,IAAmBlwD,KAAM6vD,EAAY52D,MAAMqwB,gBAAgB,IAI7DwmC,GAAAA,KAAAA,2BAA2BnmC,GAClB2lC,GAAkB3qD,MAAMg0C,GAAQhvB,EAAWtwB,SAASs/C,OAI7DoX,GAAAA,KAAAA,2BAA2BpmC,IACzB2lC,GAAoBA,GAAkB9iB,QAAiB,CAACC,EAAKkM,KAE3D,GAAIhvB,EAAWtwB,SAASs/C,GAAM,CAE5BlM,EADiB9iB,EAAWta,QAAQspC,IACpBA,CAClB,CACA,OAAOlM,CAAG,GACT,IAEI6iB,MAxEPtvD,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA0EA,GA/EWuvD,GA+EG71D,aAAY,EAAGf,YAC3B,MAAMvE,GAASC,EAAAA,EAAAA,YAAWC,IAEpBu7D,EAAch3D,EAAAA,GAAWwE,YAAY1E,EAAO+7C,KAC5C,KAAE5pB,GAASjyB,EAAAA,GAAWkyB,QAAQpyB,GAAOI,YACrC,aAAEsnD,EAAY,WAAE12B,EAAU,kBAAE2rB,EAAiB,kBAAE6a,GAAsBN,EAAY92D,YACjF,KAAEw1B,EAAI,yBAAE0oB,GAA6Bt+C,EAAMI,WAG3CqG,EAAYvG,EAAAA,GAAWqZ,aAAavZ,IAClCsK,MAAOmtD,GAAmBhxD,EAAUrG,WAEtC2nC,GAAY0L,EAAAA,GAAAA,IAAkBthB,GAS9B8iC,GAAY1gB,EAAAA,EAAAA,QAAuB,MAqBzC,OACE,kBAAC34C,MAAAA,CAAIC,UAAWJ,EAAOq9B,aAAcwc,IAAK2f,GAExC,kBAACyC,EAAAA,YAAWA,CACVC,aAAcxlC,aAAAA,EAAAA,EAAM7xB,MACpB5D,MAAO,OACPk5B,KAAMA,EAAO,kBAACA,EAAK70B,UAAS,CAACf,MAAO41B,SAAWv4B,EAC/Cu6D,gBAAgB,EAChBC,QACE,oCACE,kBAAC97D,EAAAA,OAAMA,CAACM,QAAS,IAAM2D,EAAMq+C,4BAA2B,GAAOriD,QAAS,YAAaE,KAAM,MAAM,kBAGjG,kBAAC8gD,GAAAA,EAAsBA,CAACC,QAASN,EAAmB/0B,SAAUsvC,EAAYY,yBAI7E/vB,GACC,kBAAC0uB,GAAaA,CACZxB,UAAWA,EACXxN,UA/CSjnD,IACjB,MAAMuI,GAAegvD,EAAAA,GAAAA,IAAoBhwB,EAAWvnC,EAAOK,IAAKb,IAChEk5B,EAAAA,GAAAA,IAAe14B,EAAQ02D,EAAanuD,EAAa,EA8CzCtC,UAAWgxD,EACX/P,aAAcA,EACd12B,WAAYA,QAAAA,EAAc,GAC1BktB,cA1CaltB,KAChBgnC,EAAAA,GAAAA,GAAuBhnC,EAAYkmC,EAAY52D,MAAM0wB,cACxDkmC,EAAYnwD,SAAS,CAAEiqB,eAEvBhxB,EAAMq3D,sBAAsBrmC,GAC9B,EAsCQ+W,UAAWA,EACX+V,kBAhCgB,KACpBoZ,EAAY52D,MAAMonD,cACpBwP,EAAYpZ,mBACd,EA8BQK,qBArCoBkB,IAC5B6X,EAAYnwD,SAAS,CAAEywD,kBAAmBnY,GAAe,EAqCjDjB,kBAAmBoZ,EACnBnZ,2BAA4Br+C,EAAMq+C,2BAClCC,yBAA0BA,K,IASxC,MAAM3iD,GAAaoB,IAA0B,CAC3C+7B,cAAc97B,EAAAA,EAAAA,KAAI,CAChBqJ,MAAO,OACP0V,OAAQ,OACR7W,MAAO,0B,wMCjKJ,MAAM+yD,WAAwBl4D,EAAAA,GA2CnC,iBACmBm4D,EAAAA,GAAAA,IAAsB7wD,MAC9B8W,cAAc,GAAI,CACzBwI,aAAa,IAEftf,KAAKN,SAAS,CACZ+iB,WAAY,IAEhB,CAIA,cACE,GAAIziB,KAAK/G,MAAM4pB,OAAS7iB,KAAK/G,MAAM8qB,UACjC,OAAOhC,GAAAA,GAAaE,cAEtB,GAAIjiB,KAAK/G,MAAM4pB,QAAU7iB,KAAK/G,MAAM8qB,UAClC,OAAOhC,GAAAA,GAAac,MAEtB,IAAK7iB,KAAK/G,MAAM4pB,OAAS7iB,KAAK/G,MAAM8qB,UAClC,OAAOhC,GAAAA,GAAaC,cAEtB,IAAKhiB,KAAK/G,MAAM4pB,QAAU7iB,KAAK/G,MAAM8qB,UACnC,OAAOhC,GAAAA,GAAaa,MAGtB,MAAM,IAAI3gB,MAAM,6CAClB,CAQA,eACE,OAAOjC,KAAK/G,MAAM+pB,cAAgBC,GAAAA,GAAwBD,cAAgBC,GAAAA,GAAwBC,eACpG,CAKA,YAEE,OAD2B2tC,EAAAA,GAAAA,IAAsB7wD,MACvB/G,MAAM6F,QAAQ,EAC1C,CAeAojB,YAAAA,CAAaO,EAAoBJ,GAAY,GAC3CriB,KAAK8wD,iBAAiBruC,GAClBJ,EACFriB,KAAKuiB,wBAAwBE,GAE7BziB,KAAK+wD,eAAetuC,EAExB,CAEAquC,gBAAAA,CAAiBruC,GACfziB,KAAKN,SAAS,CACZ+iB,cAEJ,CA9GA/hB,WAAAA,CAAYzH,G,IAEIA,EACGA,EACRA,EACIA,EAJb0H,M,uUAAM,EACJ8hB,WAA6B,QAAjBxpB,EAAAA,aAAAA,EAAAA,EAAOwpB,kBAAPxpB,IAAAA,EAAAA,EAAqB,GACjC+pB,cAAmC,QAApB/pB,EAAAA,aAAAA,EAAAA,EAAO+pB,qBAAP/pB,IAAAA,EAAAA,GAAwB+3D,EAAAA,GAAAA,KAAkB,GACzDnuC,MAAmB,QAAZ5pB,EAAAA,aAAAA,EAAAA,EAAO4pB,aAAP5pB,IAAAA,EAAAA,GAAgBg4D,EAAAA,GAAAA,KAAmB,GAC1CltC,UAA2B,QAAhB9qB,EAAAA,aAAAA,EAAAA,EAAO8qB,iBAAP9qB,IAAAA,EAAAA,GAAoBi4D,EAAAA,GAAAA,KAAuB,IACnDj4D,IAQP,QAAQ4G,cAAa,KACnB,MAAM1G,EAAS6G,KAAKorB,YAEpB,GAAKjyB,EAWL,OAPA6G,KAAKN,SAAS,CACZ+iB,WAAYtpB,EAAO8J,MACnB4f,MAAO1pB,EAAOiK,WAAa2e,GAAAA,GAAac,OAAS1pB,EAAOiK,WAAa2e,GAAAA,GAAaE,cAClFe,cAAe7pB,EAAOK,MAAQypB,GAAAA,GAAwBD,cACtDe,UAAW5qB,EAAOiK,WAAa2e,GAAAA,GAAaC,eAAiB7oB,EAAOiK,WAAa2e,GAAAA,GAAaE,gBAGzF,KAELjiB,KAAK02B,aAAa,CACnB,IAwDHA,GAAAA,KAAAA,eAAc,KACZ12B,KAAKuiB,wBAAwB4uC,SAC7BnxD,KAAKkiB,aAAa,IAAI,EAAM,IA0B9BY,GAAAA,KAAAA,qBAAqBiB,KACnBqtC,EAAAA,GAAAA,IAAuBrtC,GACvB/jB,KAAKN,SAAS,CACZqkB,cAGF/jB,KAAKkiB,aAAaliB,KAAK/G,MAAMwpB,YAAY,EAAM,IAOjD4wB,GAAAA,KAAAA,sBAAqB,MACnBn3C,EAAAA,GAAAA,MACA8D,KAAKkiB,aAAaliB,KAAK/G,MAAMwpB,YAAY,GAEzCziB,KAAKuiB,wBAAwB8uC,QAE7B,MAAMj1C,GAAsBiH,EAAAA,GAAAA,IAAuBrjB,MAC7CuE,EAAkB6X,EAAoBnjB,MAAM6F,QAC5CwyD,EAAatxD,KAAKorB,YAExBhP,EAAoBtF,cAAc,IAAIvS,EAAiB+sD,IACvDtxD,KAAKuxD,eAAe,IAMtBC,GAAAA,KAAAA,gBAAgBvtD,IACdjE,KAAK8wD,iBAAiB7sD,EAAEhN,OAAOgM,MAAM,IAMvCuf,GAAAA,KAAAA,eAAeve,IACC,UAAVA,EAAEzK,KAAmBwG,KAAK/G,MAAMwpB,YAClCziB,KAAKqzC,oBACP,IAMFtwB,GAAAA,KAAAA,yBAAyB1M,IACvB,MAAM2M,EAAgB3M,IAAa4M,GAAAA,GAAwBD,cAG3DhjB,KAAKN,SAAS,CACZsjB,mBAIFyuC,EAAAA,GAAAA,IAAkBzuC,GAElBhjB,KAAKkiB,aAAaliB,KAAK/G,MAAMwpB,YAAY,EAAM,IAMjDC,GAAAA,KAAAA,iBAAiBrM,IACf,MAAMwM,EAAqB,UAAbxM,EAGdrW,KAAKN,SAAS,CACZmjB,WAIF6uC,EAAAA,GAAAA,IAAmB7uC,GAEnB7iB,KAAKkiB,aAAaliB,KAAK/G,MAAMwpB,YAAY,EAAM,IAMjDF,GAAAA,KAAAA,0BAA0BoB,MAAUxJ,IAClCna,KAAK+wD,eAAe52C,EAAO,GAC1B,MAMH42C,GAAAA,KAAAA,kBAAkB52C,IAChBna,KAAKuiB,wBAAwB8uC,QAC7B,MAAMj4D,GAAWy3D,EAAAA,GAAAA,IAAsB7wD,MACjChH,GAAYqqB,EAAAA,GAAAA,IAAuBrjB,MACnC7G,EAAS,CACbK,IAAKwG,KAAK2xD,eAEVpuC,SAAUvqB,EAAUC,MAAM6F,QAAQ5F,OAAOoM,WACzClC,SAAUpD,KAAK4xD,cACf3uD,MAAOkX,GAGT/gB,EAAS0d,cAAc,CAAC3d,KAExBiD,EAAAA,GAAAA,IACEC,GAAAA,GAAkBC,gBAClBC,GAAAA,GAAoBD,gBAAgBu1D,8BACpC,CACEpuC,kBAAmBtJ,EAAOjhB,OAC1BwqB,cAAevJ,EAAO9Q,cAAchQ,SAAS,SAC7C+J,SAAUjK,EAAOiK,SACjB4f,cAAe7pB,EAAOK,KACxB,IAzNFwG,KAAKa,qBAAqBb,KAAKH,WACjC,E,kkBAdA,GADW+wD,GACJl3D,aA2OT,UAA6B,MAAEf,IAC7B,MAAM,WAAE8pB,EAAU,cAAEO,EAAa,MAAEH,EAAK,UAAEkB,GAAcprB,EAAMI,YACvDqoB,EAAOC,IAAYtoB,EAAAA,EAAAA,WAAS,GACnC,OAAO4oB,EAAAA,GAAAA,GAAiB,CACtBoC,YACAtB,aACAO,gBACAH,QACAwwB,mBAAoB16C,EAAM06C,mBAC1B7wB,YAAa7pB,EAAM6pB,YACnBW,cAAexqB,EAAM64D,aACrBtvC,aAAcvpB,EAAMupB,aACpBa,sBAAuBpqB,EAAMoqB,sBAC7BL,cAAe/pB,EAAM+pB,cACrBsB,aAAcrrB,EAAMmqB,kBACpBwwB,kBAAmB36C,EAAM+9B,YACzBtV,QACAC,WACAtlB,KAAM,UAEV,ICjPO,MAAM24C,WAAsBh8C,EAAAA,GAejC8hB,WAAAA,G,IACqB,EAAnB,MAAMmP,EAAkC,QAArB,EAAA3pB,KAAK/G,MAAM0wB,kBAAX,QAAyB,GACtC02B,EAAergD,KAAK/G,MAAMonD,aAC1B/K,EAAoBt1C,KAAK/G,MAAMq8C,kB,IACb,IAAxB,MAAMhsB,EAAuE,QAArD,EAA0B,QAA1B,EAAAtpB,KAAK/G,MAAMqwB,uBAAX,SAA8BC,EAAAA,GAAAA,IAAmBvpB,aAAjD,QAA0D,GAClF,MAAO,CACL2pB,WAAY9lB,KAAKC,UAAU6lB,GAC3B02B,aAAcx8C,KAAKC,UAAUu8C,GAC7B/K,kBAAmBzxC,KAAKC,UAAUwxC,GAClChsB,gBAAiBzlB,KAAKC,UAAUwlB,GAChC6mC,kBAAmBtsD,KAAKC,UAAU9D,KAAK/G,MAAMk3D,mBAEjD,CAEA11C,aAAAA,CAActY,GACZ,MAAM4S,EAA2C,CAAC,EAClD,IACE,GAAiC,iBAAtB5S,EAAOwnB,WAAyB,CACzC,MAAMmoC,GAA8BloC,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAM3R,EAAOwnB,aACnEmoC,IAAsB9xD,KAAK/G,MAAM0wB,aACnC5U,EAAY4U,WAAamoC,EAE7B,CACA,GAAmC,iBAAxB3vD,EAAOk+C,aAA2B,CAC3C,MAAM0R,GAAkBC,EAAAA,EAAAA,IAAuBnuD,KAAKiQ,MAAM3R,EAAOk+C,eACjE,GAAI0R,EAAiB,CACnB,MAAME,EAA4CF,EAC9CE,IAA4BjyD,KAAK/G,MAAMonD,eACzCtrC,EAAYsrC,aAAe4R,EAE/B,CACF,CACA,GAAwC,iBAA7B9vD,EAAOmzC,kBAAgC,CAChD,MAAM4c,GAA2BC,EAAAA,EAAAA,IAA4BtuD,KAAKiQ,MAAM3R,EAAOmzC,oBAC3E4c,GAA4BA,IAA6BlyD,KAAK/G,MAAMq8C,oBACtEvgC,EAAYugC,kBAAoB4c,EAEpC,CACA,GAAsC,iBAA3B/vD,EAAOmnB,gBAA8B,CAC9C,MAAMA,GAAkBM,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAM3R,EAAOmnB,kBACvDA,GAAmBA,EAAgBpwB,SACrC6b,EAAYuU,gBAAkBA,EAElC,CACA,GAAwC,iBAA7BnnB,EAAOguD,kBAAgC,CAChD,MAAMA,EAAoBtsD,KAAKiQ,MAAM3R,EAAOguD,mBACxCA,IAAsBra,EAAa/tB,QAAUooC,IAAsBra,EAAa39C,OAClF4c,EAAYo7C,kBAAoBA,EAEpC,CACF,CAAE,MAAOlsD,GAEP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,iDACzB,CAEIqJ,OAAOrD,KAAK+K,GAAa7b,QAC3B8G,KAAKN,SAASqV,EAElB,CAEA0hC,iBAAAA,GACEz2C,KAAKN,SAAS,CACZ2gD,kBAAcrqD,GAElB,CASO6J,UAAAA,GACL,MAAMuyD,EAAe,IAAIl4C,gBAAgBrI,EAAAA,gBAAgBoI,cAAcE,QACvEna,KAAKqyD,gBAAgBD,GAEhBpyD,KAAK/G,MAAMuyB,OACdxrB,KAAKsyD,kBAGPtyD,KAAKkW,MAAMC,IACTnW,KAAKoW,kBAAiB,CAACC,EAAUmB,KAC3BnB,EAASi/B,oBAAsB99B,EAAU89B,mBAC3Ct1C,KAAKsyD,iBACP,IAGN,CAEQD,eAAAA,CAAgBD,GACtB,MAAMG,EAAkBH,EAAavwD,IAAI,gBACnC8tD,EAAgByC,EAAavwD,IAAI,cACjC2wD,EAAaJ,EAAavwD,IAAI,qB,IACTuwD,EAA3B,MAAMK,EAAsC,QAAjBL,EAAAA,EAAavwD,IAAI,0BAAjBuwD,IAAAA,EAAAA,EAAuCvuD,KAAKC,WAAUylB,EAAAA,GAAAA,IAAmBvpB,OAC9FmwD,EAAoBiC,EAAavwD,IAAI,qBAE3C7B,KAAKya,cAAc,CACjB4lC,aAAckS,EACd5oC,WAAYgmC,EACZ/Z,QAAS4c,EACTlpC,gBAAiBmpC,EACjBtC,qBAEJ,CA8CQuC,WAAAA,GAGN,OAFA1yD,KAAK2yD,eAAiB,IAAIhe,GAAAA,EAAe,CAAC,GAEnC,IAAIp1C,EAAAA,GAAgB,CACzByT,UAAW,SACX1c,SACmC,SAAjC0J,KAAK/G,MAAMq8C,kBACP,CACE,IAAI/1C,EAAAA,GAAgB,CAClBjJ,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAIyvD,GAAgB,CAAEnuC,WAAYziB,KAAK/G,MAAMwpB,aACnDmwC,QAAS,YAIf,IAAIt1C,EAAAA,GAAc,CAChB5I,OAAQ,sBACRvT,KAAMnB,KAAK2yD,kBAGf,CACE,IAAIr1C,EAAAA,GAAc,CAChBnc,KAAM,IAAIyvD,GAAgB,CAAEnuC,WAAYziB,KAAK/G,MAAMwpB,aACnDmwC,QAAS,SAEX,IAAIt1C,EAAAA,GAAc,CAChB5I,OAAQ,sBACRvT,KAAM,IAAIouD,GAAe,CAAC,OAIxC,CAhMA7uD,WAAAA,CAAYzH,GACV0H,MAAM,G,uUAAA,IACD1H,GAAAA,CACHq8C,mBAAmB7rB,EAAAA,GAAAA,MACnBH,gBAAiB,MARrB,QAAUrL,WAAW,IAAIC,EAAAA,GAAyBle,KAAM,CACtDgK,KAAM,CAAC,aAAc,eAAgB,oBAAqB,kBAAmB,wBAE/E,QAAQ2oD,sBAAkC38D,GA6E1C4+C,GAAAA,KAAAA,wBAAuB,KACrB50C,KAAKN,SAAS,CAAE4pB,gBAAiB,KAC7BtpB,KAAK2yD,gBACP3yD,KAAK2yD,eAAe/d,sBACtB,IAoCF,QAAON,oBAAmB,CAACjyC,EAA4B,CAAC,KAClDrC,KAAK2yD,gBACP3yD,KAAK2yD,eAAere,iBAAiBjyC,EACvC,IAGF,QAAOiwD,mBAAkB,KAMvB,GALAtyD,KAAKN,SAAS,CACZ8rB,MAAOxrB,KAAK0yD,gBAIV1yD,KAAK/G,MAAMuyB,MAAO,CACpB,MAAMqnC,EAAmBh6D,EAAAA,GAAWy7B,gBAAgBt0B,KAAK/G,MAAMuyB,MAAOolC,IACtE,GAAIiC,EAAiB35D,OAAQ,CAC3B,MAAM45D,EAAkBD,EAAiB,GACzC7yD,KAAKkW,MAAMC,IACT28C,EAAgB18C,kBAAiB,CAACC,EAAUmB,KACtCnB,EAASoM,aAAejL,EAAUiL,YACpCziB,KAAKN,SAAS,CACZ+iB,WAAYpM,EAASoM,YAEzB,IAGN,CACF,KAGF,QAAOguC,wBAAwB10D,IAC7BiE,KAAKN,SAAS,CACZ41C,kBAAmBv5C,KAGrBK,EAAAA,GAAAA,IACEC,GAAAA,GAAkBC,gBAClBC,GAAAA,GAAoBD,gBAAgBy2D,0BACpC,CACEvpC,kBAAmBztB,KAGvBi3D,EAAAA,GAAAA,IAAyBj3D,EAAK,IAtJ9BiE,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA0LA,GAvMW00C,GAuMGh7C,aAAY,EAAGf,YAC3B,MAAM,MAAE6yB,GAAU7yB,EAAMI,WAExB,GAAKyyB,EAIL,OACE,kBAACj3B,MAAAA,CAAIC,UAAWJ,GAAOq9B,cACrB,kBAACjG,EAAM9xB,UAAS,CAACf,MAAO6yB,I,IAMhC,MAAMp3B,GAAS,CACbq9B,cAAc97B,EAAAA,EAAAA,KAAI,CAEhB,yCAAyCA,EAAAA,EAAAA,KAAI,CAE3Cs9D,QAAS,OAETh4D,SAAU,W,oKChQT,MAAMi4D,EAAiB,EAAGl+D,cAC/B,MAAOm+D,EAAQC,IAAar6D,EAAAA,EAAAA,WAAS,IAErCi6C,EAAAA,EAAAA,YAAU,KACR,IAAIqgB,EAQJ,OANIF,IACFE,EAAYllD,YAAW,KACrBilD,GAAU,EAAM,GACf,MAGE,KACLllD,aAAamlD,EAAU,CACxB,GACA,CAACF,IAEJ,MAAMG,GAAc1gB,EAAAA,EAAAA,cAClB,CAAC7pC,EAAgC85C,KAC/B7tD,EAAQ+T,EAAO85C,GACfuQ,GAAU,EAAK,GAEjB,CAACp+D,IAGH,OACE,kBAACysB,EAAAA,WAAUA,CACTtnB,aAAYg5D,EAAS,SAAW,wBAChCtxC,QAASsxC,EAAS,SAAW,wBAC7BnQ,iBAAiB,MACjBruD,QAASw+D,EAAS,UAAY,YAC9Bt+D,KAAK,KACL6C,KAAMy7D,EAAS,QAAU,YACzBn+D,QAASs+D,G,wGChCR,MAAMC,EAAiB,EAAGxhC,eAAc/vB,WAE3C,kBAAC3L,EAAAA,EAASA,KACR,kBAAC9B,MAAAA,KACC,kBAACwI,IAAAA,KAAGiF,GACJ,kBAACtN,EAAAA,OAAMA,CAACC,QAAQ,YAAYK,QAAS+8B,GAAc,mB,g6BCqCpD,MAAM4iB,UAAuBj8C,EAAAA,GAgB1B25D,eAAAA,GACN,MAAMD,EAAe,IAAIl4C,gBAAgBrI,EAAAA,gBAAgBoI,cAAcE,QAEvEna,KAAKya,cAAc,CACjBg6B,UAAW2d,EAAavwD,IAAI,aAC5BsyC,eAAgBie,EAAavwD,IAAI,mBAErC,CAEA2Y,WAAAA,GACE,MAAO,CACLi6B,UAAW5wC,KAAKC,UAAU9D,KAAK/G,MAAMw7C,WACrCN,eAAgBtwC,KAAKC,UAAU9D,KAAK/G,MAAMk7C,gBAE9C,CAEA15B,aAAAA,CAActY,GACZ,MAAM4S,EAA4C,CAAC,EACnD,IACE,GAAgC,iBAArB5S,EAAOsyC,WAA0BtyC,EAAOsyC,UAAW,CAC5D,MAAMU,GAAmBC,EAAAA,EAAAA,IAAoBvxC,KAAKiQ,MAAM3R,EAAOsyC,YAC3DU,IACFpgC,EAAY0/B,UAAYU,EACxBn1C,KAAKs0C,iBAAiB,CAAEG,UAAWU,IAEvC,CAEA,GAAqC,iBAA1BhzC,EAAOgyC,gBAA+BhyC,EAAOgyC,eAAgB,CACtE,MAAMqf,EAAwB3vD,KAAKiQ,MAAM3R,EAAOgyC,gBACX,kBAA1Bqf,IACTz+C,EAAYo/B,eAAiBqf,EAC7BxzD,KAAKs0C,iBAAiB,CAAEH,eAAgBqf,IACxCxzD,KAAKs0C,iBAAiB,CAAEC,mBAAoBif,IAEhD,CACF,CAAE,MAAOvvD,GAEP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,mDACzB,CAEIqJ,OAAOrD,KAAK+K,GAAa7b,QAC3B8G,KAAKN,SAAS,KAAKqV,GAEvB,CAEOlV,UAAAA,GAELG,KAAKqyD,kBAEAryD,KAAK/G,MAAMkI,MACdnB,KAAKN,SAAS,CACZyB,KAAMnB,KAAKyzD,aAAa,CACtBtf,eAAgBn0C,KAAK/G,MAAMk7C,eAC3BI,mBAAoBv0C,KAAK/G,MAAMk7C,eAC/BM,UAAWz0C,KAAK/G,MAAMw7C,cAK5B,MAAM3W,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAClDtV,KAAKkW,MAAMC,IACT2nB,EAAa1nB,kBAAiB,CAACC,EAAUmB,K,IACnCnB,EAAAA,EAGFA,EAAAA,EACkBA,EAHGA,GADL,QAAdA,EAAAA,EAAS4Y,aAAT5Y,IAAAA,GAA0B,QAA1BA,EAAAA,EAAgBpd,MAAM6xB,YAAtBzU,IAAAA,OAAAA,EAAAA,EAA4Bpd,SAAU29B,EAAAA,aAAa30B,MACrDjC,KAAK0zD,gBAA8B,QAAdr9C,EAAAA,EAAS4Y,aAAT5Y,IAAAA,OAAAA,EAAAA,EAAgBpd,MAAM6xB,OAE7B,QAAdzU,EAAAA,EAAS4Y,aAAT5Y,IAAAA,GAA0B,QAA1BA,EAAAA,EAAgBpd,MAAM6xB,YAAtBzU,IAAAA,OAAAA,EAAAA,EAA4Bpd,SAAU29B,EAAAA,aAAaC,OACnD88B,EAAAA,EAAAA,IAAgC,QAAdt9C,EAAAA,EAAS4Y,aAAT5Y,IAAAA,OAAAA,EAAAA,EAAgBpd,MAAM6xB,KAAKY,QAE7C1rB,KAAK4zD,eACI5zD,KAAK/G,MAAM+I,OACpBhC,KAAK6zD,iBAEHx9C,EAASy9C,YAAct8C,EAAUs8C,YAC9B9zD,KAAK/G,MAAMkI,KASdnB,KAAK/G,MAAMkI,KAAKzB,SAAS,CACvBrK,MAAO2K,KAAK+zD,SAAS19C,EAASy9C,aAThC9zD,KAAKN,SAAS,CACZyB,KAAMnB,KAAKyzD,aAAa,CACtBtf,eAAgBn0C,KAAK/G,MAAMk7C,eAC3BI,mBAAoBv0C,KAAK/G,MAAMk7C,eAC/BM,UAAWz0C,KAAK/G,MAAMw7C,cAQ9B,IAGN,CAEAif,eAAAA,CAAgB5oC,G,IACAA,EAAd,MAAM9oB,GAAmB,QAAX8oB,EAAAA,EAAK6P,cAAL7P,IAAAA,OAAAA,EAAAA,EAAa5xB,QAAS4xB,EAAK6P,OAAO,GAAK7P,EAAK9oB,MACpDgyD,EAAgBhyD,aAAAA,EAAAA,EAAOvL,Q,IAIjBuL,EACFA,EAJNgyD,GACF3yD,EAAAA,EAAOW,MAAM,IAAIC,MAAM,oBAAqB,CAC1C+B,IAAKgwD,EACLn5B,OAAwB,QAAhB74B,EAAAA,EAAMiyD,kBAANjyD,IAAAA,EAAAA,EAAoB,MAC5BjG,KAAgB,QAAViG,EAAAA,EAAMjG,YAANiG,IAAAA,EAAAA,EAAc,QAIxB,IAAIywC,EAAe,wFACfuhB,aAAAA,EAAAA,EAAe36D,SAAS,gBAC1Bo5C,EACE,2GACOuhB,aAAAA,EAAAA,EAAe36D,SAAS,gDACjCo5C,EACE,6GAGJzyC,KAAKk0D,cAAczhB,EACrB,CAEAmhB,YAAAA,GACE5zD,KAAKk0D,cAAc,uFACrB,CAEAA,aAAAA,CAAclyD,G,IACuB,EAAnC,MAAMmyD,EAAkE,QAArC,EAAAn0D,KAAK/G,MAAMk7D,kCAAX,UAA0CC,EAAAA,EAAAA,IAAoB,aAIjG,GAFAp0D,KAAKN,SAAS,CAAEsC,QAAOmyD,+BAEnBA,EAA4B,C,IAE9BE,EAAsB,QAAtBA,EADmBx7D,EAAAA,GAAWoc,iBAAiBjV,KAAMs0D,EAAAA,EAAoBC,EAAAA,GAC9Dt7D,MAAMuyB,aAAjB6oC,IAAAA,GAAAA,EAAwB30D,SAAS,CAAE8uB,WAAW,GAChD,CACF,CAEAqlC,cAAAA,GACE,GAAI7zD,KAAK/G,MAAMk7D,2BAA4B,C,IAEzCE,EAAsB,QAAtBA,EADmBx7D,EAAAA,GAAWoc,iBAAiBjV,KAAMs0D,EAAAA,EAAoBC,EAAAA,GAC9Dt7D,MAAMuyB,aAAjB6oC,IAAAA,GAAAA,EAAwB30D,SAAS,CAAE8uB,WAAW,GAChD,CAEAxuB,KAAKN,SAAS,CAAEsC,WAAOhM,EAAWm+D,gCAA4Bn+D,GAChE,CAwCAs+C,gBAAAA,CAAiBjyC,EAA4B,CAAC,GAC5C,GAAKrC,KAAK/G,MAAMkI,KAAhB,CAGA,GAAI,cAAekB,GAAWA,EAAQoyC,YAAcz0C,KAAK/G,MAAMkI,KAAKlI,MAAMoJ,QAAQoyC,UAAW,CAC3F,MAAMxlB,EAAQp2B,EAAAA,GAAWkyB,QAAQ/qB,MAC3BgrB,EACJiE,aAAiB/D,EAAAA,GAAmB+D,EAAQp2B,EAAAA,GAAWy7B,gBAAgBrF,EAAO/D,EAAAA,IAAkB,GAC9FF,GACFA,EAAYsP,YAEhB,CACAt6B,KAAK/G,MAAMkI,KAAKmS,gBAAgBjR,EAThC,CAUF,CAYQotD,cAAAA,GACN,OAAO52D,EAAAA,GAAWwE,YAAY2C,KAAM00C,EAAAA,EACtC,CAEQqf,QAAAA,CAASD,G,IAGsDU,EAFrE,MAAMC,GAAiBC,EAAAA,EAAAA,gBAAe,SAChCF,OAA+Bx+D,IAAd89D,EAA0BW,EAAeX,EAAW,QAAK99D,EAChF,YAA0BA,IAAnBw+D,EAA+B,SAASA,EAAer8D,OAA4B,QAArBq8D,EAAAA,EAAeptB,cAAfotB,IAAAA,OAAAA,EAAAA,EAAuBG,UAAY,MAC1G,CAEQlB,YAAAA,CAAapxD,GACnB,MAAMwtD,EAAc7vD,KAAKyvD,iBACnBna,EAAoBua,EAAY52D,MAAMq8C,kBACtCxX,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,I,IAYxBjT,EACKA,EAG3BA,EAfJ,OAAO8sB,EAAAA,GAAczH,OAClB+H,SAASzvB,KAAK+zD,SAASj2B,EAAa7kC,MAAM66D,YAC1Cc,UAAU,YAAY,GACtBA,UAAU,qBAAsB50D,KAAK60D,wBACrCD,UAAU,wBAAyB50D,KAAK80D,2BACxCF,UAAU,sBAAuB50D,KAAK+0D,2BACtCH,UAAU,sBAAuB50D,KAAKg1D,yBACtCJ,UAAU,yBAA0B50D,KAAKi1D,4BACzCL,UAAU,mBAAoB50D,KAAKk1D,kBACnCN,UAAU,mBAAoB50D,KAAKm1D,kBACnCP,UAAU,kBAAmB/E,EAAY52D,MAAMqwB,iBAC/CsrC,UAAU,YAA8B,QAAjBvyD,EAAAA,EAAQoyC,iBAARpyC,IAAAA,EAAAA,GAAqByyC,EAAAA,EAAAA,OAC5C8f,UAAU,iBAAwC,QAAtBvyD,EAAAA,EAAQ8xC,sBAAR9xC,IAAAA,EAAAA,EAA0BmN,SAAQulC,EAAAA,EAAAA,IAAsB,kBAAkB,KACtG6f,UACC,qBAC0B,QAA1BvyD,EAAAA,EAAQkyC,0BAARlyC,IAAAA,EAAAA,EAA8BmN,SAAQulC,EAAAA,EAAAA,IAAsB,kBAAkB,KAE/EvlB,QACC,IAAIlC,EAAAA,GAAU,CACZW,qBAAsB,CAAElyB,KAAM,OAAQmyB,aAAc,IAAM,UAASknC,EAAAA,EAAAA,IAAmBt3B,SAGzF82B,UAAU,wBAAwB,GAClCt5B,mBAAkB,GAClBs5B,UAAU,2BAA2B,GACrCA,UAAU,oBAAqB50D,KAAKq1D,oBACpCT,UAAU,uBAAwB,CAAC,kBAAC1B,EAAcA,CAACl+D,QAASgL,KAAKs1D,wBAAyB97D,IAAK,MAC/Fk2B,iBACC,IAAIskB,EAAAA,GAAgB,CAAEsB,oBAAmBD,0BAA2Bwa,EAAYY,wBAEjF7gC,OACL,CAoIQ2lC,iBAAAA,CAAkB/7D,EAAayJ,EAAekoB,EAA8B/nB,GAClF,MAAM1B,GAAegvD,EAAAA,EAAAA,IAAoBvlC,EAAO3xB,EAAKwG,OACrD8xB,EAAAA,EAAAA,IAAat4B,EAAKyJ,EAAOG,EAAUpD,KAAM0B,IAEzCtF,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBk5D,2BACpC,CACE7hC,WAAYjyB,EACZlI,MACAiQ,OAAQrG,GAGd,CAlZA1C,WAAAA,CAAYzH,GACV0H,MAAM,GACJ8zC,WAAWK,EAAAA,EAAAA,MACXX,eAAgB3kC,SAAQulC,EAAAA,EAAAA,IAAsB,kBAAkB,IAChE/yC,WAAOhM,GACJiD,IATP,OAAUglB,WAAW,IAAIC,EAAAA,GAAyBle,KAAM,CACtDgK,KAAM,CAAC,YAAa,qBAwJtBkrD,EAAAA,KAAAA,oBAAoB1uD,IAClB,MAAMohB,EAAS5nB,KAAKyvD,iBAGpB,IAAe,IAFD7nC,EAAO3uB,MAAMqwB,gBAAgBja,QAAQ7I,IAE/BxG,KAAK/G,MAAMkI,KAAM,CACnC,MAAMmoB,EAAkB,IAAI1B,EAAO3uB,MAAMqwB,gBAAiB9iB,GAC1DxG,KAAKs0C,iBAAiB,CACpBhrB,oBAEF1B,EAAOloB,SAAS,CAAE4pB,qBAClB4mC,EAAAA,EAAAA,IAAmBlwD,KAAM4nB,EAAO3uB,MAAMqwB,kBAEtCltB,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBm5D,4BAExC,KAGFN,EAAAA,KAAAA,oBAAoB3uD,IAClB,MAAMohB,EAAS5nB,KAAKyvD,iBAGpB,GAFc7nC,EAAO3uB,MAAMqwB,gBAAgBja,QAAQ7I,IAEtC,GAAKxG,KAAK/G,MAAMkI,KAAM,CACjC,MAAMmoB,EAAkB1B,EAAO3uB,MAAMqwB,gBAAgBnwB,QAAQu8D,GAAmBlvD,IAAUkvD,IAC1F11D,KAAKs0C,iBAAiB,CACpBhrB,oBAEF1B,EAAOloB,SAAS,CAAE4pB,qBAClB4mC,EAAAA,EAAAA,IAAmBlwD,KAAM4nB,EAAO3uB,MAAMqwB,kBAEtCltB,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgBm5D,4BAExC,KAkBF7gB,EAAAA,KAAAA,wBAAuB,KAChB50C,KAAK/G,MAAMkI,OAGhBnB,KAAKs0C,iBAAiB,CACpBhrB,gBAAiB,MAEnB4mC,EAAAA,EAAAA,IAAmBlwD,KAAM,IAAG,IAkD9B,OAAQq1D,sBAAsBM,I,IAOxB73B,EAAAA,EALJ,MAAMA,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAClDwoB,EAAap+B,SAAS,CACpBo0D,UAAW6B,EAAQ,GAAGz8D,UAGI,QAAxB4kC,EAAAA,EAAa7kC,MAAMg2B,aAAnB6O,IAAAA,GAAoC,QAApCA,EAAAA,EAA0B7kC,MAAM6xB,YAAhCgT,IAAAA,OAAAA,EAAAA,EAAsCpS,SAExCoS,EAAa7kC,MAAMg2B,MAAMvvB,SAAS,OAC7Bo+B,EAAa7kC,MAAMg2B,MAAMh2B,OAAK,CACjC6xB,KAAM,OACDgT,EAAa7kC,MAAMg2B,MAAMh2B,MAAM6xB,MAAI,CACtCY,OAAQiqC,OAKU98D,EAAAA,GAAWoc,iBAAiBjV,KAAMs0D,EAAAA,EAAoBC,EAAAA,GAC9Dc,mBAAmBM,EAAQ,IAG7C,OAAQL,2BAA0B,CAACvsD,EAAgC85C,KACjE,IAAIA,aAAAA,EAAAA,EAAK+S,QAAS51D,KAAK/G,MAAMkI,KAAM,CACjC,MAAMymB,EAAS5nB,KAAKyvD,iBACdrwD,GAAYy2D,EAAAA,EAAAA,IAA8BhT,IAChDiT,EAAAA,EAAAA,KACElT,EAAAA,EAAAA,IACE,aACA,CACEl7B,KAAM,CAAEmE,GAAIg3B,EAAIx2B,IAAK/C,gBAAiB1B,EAAO3uB,MAAMqwB,kBAErDlqB,GAGN,KAGF,OAAQy1D,0BAAyB,CAACr7D,EAAayJ,EAAekoB,KAC5DnrB,KAAKu1D,kBAAkB/7D,EAAKyJ,EAAOkoB,EAAO,SAAS,IAGrD,OAAQ2pC,6BAA4B,CAACt7D,EAAayJ,EAAekoB,KAC/DnrB,KAAKu1D,kBAAkB/7D,EAAKyJ,EAAOkoB,EAAO,UAAU,IAGtD,OAAQ4pC,6BAA4B,CAACv7D,EAAayJ,KAChD,MAAM8kB,GAAS8L,EAAAA,EAAAA,IAAwB5Y,EAAAA,GAAYjb,MAC7C2H,GAASksB,EAAAA,EAAAA,IAAwB7d,EAAAA,GAAYhW,MAC7CigB,GAAS4T,EAAAA,EAAAA,IAAwBjxB,EAAAA,GAAY5C,MAC7C+1D,GAAWliC,EAAAA,EAAAA,IAAwBra,EAAAA,GAAcxZ,MAEjDg2D,EAAqB78D,GAEvBA,GACAA,EAAOF,MAAM6F,QAAQ+mC,WAClB1sC,GAA+B,MAApBA,EAAOiK,UAAoBjK,EAAOK,MAAQA,GAAOL,EAAO8J,QAAUA,KAC3E,EAiBT,OACE+yD,EAAkBjuC,IAbW,CAAC5uB,IAC9B,GAAIA,EAAQ,CACV,MAAM88D,EAAc98D,EAAOF,MAAM6F,QAAQslB,MAAMjrB,GAA+B,MAApBA,EAAOiK,UAAoBjK,EAAOK,MAAQA,IAEpG,GAAIy8D,EAAa,CAEf,OADmBryD,EAAAA,EAAAA,IAAyBqyD,EAAaz8D,GACvCyJ,QAAUA,CAC9B,CACF,CACA,OAAO,CAAK,EAKZizD,CAAuBvuD,IACvBquD,EAAkB/1C,IAClB+1C,EAAkBD,EAAS,IAI/B,OAAQd,8BAA8BhyD,IACpC,MAAMkzD,GAAiB9yC,EAAAA,EAAAA,IAAuBrjB,MAC1Cm2D,IACFA,EAAez2D,SAAS,CACtBZ,QAAS,IACJq3D,EAAel9D,MAAM6F,QACxB,CACEsE,SAAU2e,EAAAA,GAAaC,cACvB/e,QACAzJ,IAAKypB,EAAAA,GAAwBD,cAC7BO,SAAU4yC,EAAel9D,MAAM6F,QAAQ5F,OAAOoM,gBAIpDlJ,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgB85D,yBACpC,CACEC,gBAAiBpzD,EAAM/J,SAG7B,IAGF,OAAQ87D,2BAA2B/xD,IACjC,MAAMkzD,GAAiB9yC,EAAAA,EAAAA,IAAuBrjB,MAC1Cm2D,IACFA,EAAez2D,SAAS,CACtBZ,QAAS,IACJq3D,EAAel9D,MAAM6F,QACxB,CACEsE,SAAU2e,EAAAA,GAAaa,MACvB3f,QACAzJ,IAAKypB,EAAAA,GAAwBD,cAC7BO,SAAU4yC,EAAel9D,MAAM6F,QAAQ5F,OAAOoM,gBAIpDlJ,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgB85D,yBACpC,CACEC,gBAAiBpzD,EAAM/J,SAG7B,IA1XA8G,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA2YA,EAzZW20C,EAyZGj7C,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,EAAI,MAAEa,GAAUrJ,EAAMI,WACxB3E,GAASC,EAAAA,EAAAA,YAAWm9B,EAAAA,IAC1B,OAAIrwB,EAEA,kBAACogB,OAAAA,CAAK/sB,UAAWJ,EAAOq9B,eACpBzvB,GAAS,kBAACb,EAAKzH,UAAS,CAACf,MAAOwI,IACjCa,GAAS,kBAACuxD,EAAcA,CAACvxD,MAAOA,EAAO+vB,aAAc,KAAM+O,EAAAA,EAAAA,IAAe3/B,MAI1E,kBAACyd,EAAAA,mBAAkBA,CAACzmB,KAAM,c,0PC5c9B,MAAMm+D,UAA0B59D,EAAAA,I,EAevC,UAAmB,MAAEC,IACnB,MAAQ+0C,UAAW6oB,EAAyB,UAAEr3C,IAAcs3C,EAAAA,EAAAA,oBAC1D,oDAGIt/C,GAAY2c,EAAAA,EAAAA,IAAwB5Y,EAAAA,GAAYtiB,IAChD,QAAEmG,GAAYoY,EAAUne,WACxB09D,EAAiB33D,EAAQxF,KAAI,EAAGE,MAAK4J,WAAUH,YAAkC,CAAEzJ,MAAK4J,WAAUH,YAElGyzD,GAAgB50D,EAAAA,EAAAA,IAAcnJ,GAEpC,OAAIumB,IAAcq3C,EACT,KAIP,kBAACA,EAAAA,CACCG,cAAeA,EACfD,eAAgBA,EAChBE,aAAc,CAAC,cAAe,iBAAkB,iBAGtD,G,EApCSj9D,e,EADI48D,G,s/BCuBN,MAAMhC,EAAqB,oBAC3B,MAAMC,UAAwB77D,EAAAA,GAW3BmH,UAAAA,GACN,IAAKG,KAAK/G,MAAMuyB,MAAO,CACrB,MAAMA,EAAQxrB,KAAK0yD,cACnB1yD,KAAKN,SAAS,CACZ8rB,UAEFxrB,KAAK42D,sBAAsBprC,EAC7B,CAEA,MAAMzD,GAAS5Q,EAAAA,EAAAA,IAAkBnX,MAC3B2H,GAASmO,EAAAA,EAAAA,IAAkB9V,MAGjCA,KAAKkW,MAAMC,IACT4R,EAAO3R,kBAAiB,CAACC,EAAUmB,MAC5B2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKN,SAAS,CACZ8rB,MAAOxrB,KAAK0yD,eAEhB,KAKJ1yD,KAAKkW,MAAMC,IACTxO,EAAOyO,kBAAiB,CAACC,EAAUmB,MAC5B2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKN,SAAS,CACZ8rB,MAAOxrB,KAAK0yD,eAEhB,KAKJ1yD,KAAKkW,MAAMC,IACTnW,KAAKuW,iBAAiBmb,EAAAA,IAAiB3oB,IACrC,GAAIA,EAAMvP,MAAQiN,EAAAA,GAAsB,CACtC,MAAMsZ,EAAsBlnB,EAAAA,GAAWuY,WAAWpR,MAAOggB,GAAQA,aAAe9f,EAAAA,KAChF,GAAI6f,aAA+B7f,EAAAA,GAAqB,CACtD,MAAM8e,GAAY/I,EAAAA,EAAAA,IAAkBjW,MACpCgf,EAAUtf,SAAS,CAAEZ,QAASkgB,EAAU/lB,MAAM6F,SAChD,CACF,KAGN,CAEQi1D,QAAAA,CAAS8C,EAAoC/C,G,IAElC12D,EAW6B05D,E,IAX7B15D,EAAjB,MAAM25D,EAAwC,QAA7B35D,EAAmB,QAAnBA,EADEvE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,GACpBrE,MAAM0lB,UAAjBvhB,IAAAA,OAAAA,EAAAA,EAAqB25D,gBAArB35D,IAAAA,EAAAA,EAAiC45D,EAAAA,GAC5CvC,GAAiBC,EAAAA,EAAAA,gBAAe,SAChCoC,OAAyC9gE,IAAnB6gE,EAA+BpC,EAAeoC,EAAgB,QAAK7gE,EAE/F,QAAuBA,IAAnB6gE,QAA8C7gE,IAAd89D,GAA2BA,EAAYiD,EAAU,C,IAG1CvC,EAFzC,MAAMA,EAAiBC,EAAeX,EAAW,GACjD,YAA0B99D,IAAnBw+D,EACH,eAAeA,EAAer8D,OAA4B,QAArBq8D,EAAAA,EAAeptB,cAAfotB,IAAAA,OAAAA,EAAAA,EAAuBG,UAC5D,YACN,CACA,YAA+B3+D,IAAxB8gE,EACH,eAAeA,EAAoB3+D,OAAiC,QAA1B2+D,EAAAA,EAAoB1vB,cAApB0vB,IAAAA,OAAAA,EAAAA,EAA4BnC,UACtE,YACN,CAEQjC,WAAAA,G,IAoCJlnC,EAcAsS,EAjDF,MAAMA,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,EAAAA,IAC5CwY,EAAMqB,EAAAA,GAAcC,aACvBK,SAASzvB,KAAK+zD,SAASj2B,EAAa7kC,MAAM49D,eAAgB/4B,EAAa7kC,MAAM66D,YAC7Ec,UAAU,SAAU,CAAEvhD,YAAY,EAAM4jD,MAAO,CAAC,OAAQC,YAAaC,EAAAA,kBAAkBC,OACvFC,QAAQ,SACR7nC,QAAQ,IAAIlC,EAAAA,GAAU,CAAEW,qBAAsB,CAAEvF,UAAW,YAC3Dod,gBAAe,GACfC,cAAaquB,EAAAA,EAAAA,IAAoB,cACjC1kC,iBAAiB,IAAI4mC,EAAkB,CAAC,IACxCh7B,mBAAkB,GAClB3L,SACC2J,EAAAA,EAAAA,IAAe,EACbU,EAAAA,EAAAA,IAAes9B,EAAAA,EAAAA,GAAkBt3D,KAAMyG,EAAAA,IAAsB,GAAQ,CACnE6kB,aAAc,KAAK7kB,EAAAA,aAK3B8wD,EAAAA,EAAAA,IAA0BzpC,GAE1B,MAAMtC,EAAQsC,EAAI8B,QAoDlB,OAnDApE,EAAM9rB,SAAS,CACbwmC,mBAAoB,CAACj+B,EAAG2iB,IAAY5qB,KAAKmmC,0BAA0Bvb,KAGrE5qB,KAAKkW,MAAMC,IACTqV,EAAMpV,kBAAiB,CAACC,EAAUmB,KAC5BnB,EAASmY,YAAchX,EAAUgX,YACnCxuB,KAAK42D,sBAAsBprC,IAC3BgsC,EAAAA,EAAAA,IAAoB,YAAanhD,EAASmY,UAAY,YAASx4B,GACjE,KAIJgK,KAAKkW,MAAMC,IACQ,QAAjBqV,EAAAA,EAAMvyB,MAAMg2B,aAAZzD,IAAAA,OAAAA,EAAAA,EAAmBpV,kBAAkBC,I,IAC/BA,EAGAynB,EAAAA,EAAsEznB,EAH1E,IAAiB,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KAA1C,C,IAI0BiH,EAAAA,EAD1B,IAA4B,QAAxBA,EAAAA,EAAa7kC,MAAMg2B,aAAnB6O,IAAAA,GAAoC,QAApCA,EAAAA,EAA0B7kC,MAAM6xB,YAAhCgT,IAAAA,OAAAA,EAAAA,EAAsC7kC,SAAU29B,EAAAA,aAAaC,OAAkC,QAAzBxgB,EAAAA,EAASyU,KAAK2sC,mBAAdphD,IAAAA,OAAAA,EAAAA,EAA2Bnd,QAGnG8G,KAAK03D,2BAFL13D,KAAKq1D,mBAA2C,QAAxBv3B,EAAAA,EAAa7kC,MAAMg2B,aAAnB6O,IAAAA,GAAoC,QAApCA,EAAAA,EAA0B7kC,MAAM6xB,YAAhCgT,IAAAA,OAAAA,EAAAA,EAAsCpS,SAIhE2a,EAAAA,EAAAA,IAAwB7a,EAAOnV,EAASyU,KAAKY,OAAQ1rB,KANrD,CAM0D,KAI9DA,KAAKkW,MAAMC,IACe,QAAxB2nB,EAAAA,EAAa7kC,MAAMg2B,aAAnB6O,IAAAA,OAAAA,EAAAA,EAA0B1nB,kBAAkBC,I,IACtCA,GAAa,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,MACxC72B,KAAKq1D,mBAAmBh/C,EAASyU,KAAKY,OACxC,KAIJ1rB,KAAKkW,MAAMC,IACT2nB,EAAa1nB,kBAAiB,CAACC,EAAUmB,KACnCnB,EAASwgD,iBAAmBr/C,EAAUq/C,qBAAyC7gE,IAAvBqgB,EAASy9C,YAC9D9zD,KAAK/G,MAAMuyB,MAKdxrB,KAAK/G,MAAMuyB,MAAM9rB,SAAS,CACxBrK,MAAO2K,KAAK+zD,SAAS19C,EAASwgD,eAAgBxgD,EAASy9C,aALzD9zD,KAAKN,SAAS,CACZ8rB,MAAOxrB,KAAK0yD,gBAOlB,KAIGlnC,CACT,CAEOorC,qBAAAA,CAAsBprC,GAC3B,MAAMmsC,EAAkB9+D,EAAAA,GAAWwE,YAAYmuB,EAAOjsB,EAAAA,IAChDmV,EAAS8W,EAAMvyB,MAAMu1B,UAAY,GAAK/zB,KAAKuS,IAAIvS,KAAKC,MAA2B,GAArBC,OAAOi9D,aAAoB,KAC3FD,EAAgBj4D,SAAS,CACvBuB,UAAWyT,EACXA,OAAQA,EACR0xB,UAAW1xB,GAEf,CAEO2gD,kBAAAA,CAAmBvqC,EAAoB,IAC5C9qB,KAAK63D,iBAAmB/sC,EACxB9qB,KAAK03D,qBACP,CAEQA,mBAAAA,G,IAIHlsC,EACDA,EAJF,MAAMA,EAAQxrB,KAAK/G,MAAMuyB,MACzB,IACGA,KACiB,QAAjBA,EAAAA,EAAMvyB,MAAMg2B,aAAZzD,IAAAA,OAAAA,EAAAA,EAAmBvyB,MAAM6xB,QACT,QAAjBU,EAAAA,EAAMvyB,MAAMg2B,aAAZzD,IAAAA,OAAAA,EAAAA,EAAmBvyB,MAAM6xB,KAAK7xB,SAAU29B,EAAAA,aAAaC,OACpD72B,KAAK63D,iBAEN,OAEF,MAAMC,GAAeC,EAAAA,EAAAA,IAAsB/3D,KAAK63D,kBAChD73D,KAAK63D,iBAAmB,KACxBrsC,EAAMvyB,MAAMg2B,MAAMvvB,SAAS,CACzBorB,KAAM,OACDU,EAAMvyB,MAAMg2B,MAAMh2B,MAAM6xB,MAAI,CAC/B2sC,YAAa,EAACO,EAAAA,EAAAA,IAAqBF,EAAa3wD,MAAO2wD,EAAa1wD,SAG1E,CAvLA1G,WAAAA,CAAYzH,GACV0H,MAAM,OACD1H,GAAAA,CACHO,IAAK86D,KAJT,OAAQuD,mBAAuC,MA0L/C,OAAQ1xB,6BAA6Bvb,IACnC,MAAMqtC,GAAchiD,EAAAA,EAAAA,IAAkBjW,MACtCA,KAAKkW,MAAMC,IACT8hD,aAAAA,EAAAA,EAAa7hD,kBAAiB,K,IAEvBoV,EAAAA,EAI0BA,EAAAA,EAL/B,MAAMA,EAAQxrB,KAAK/G,MAAMuyB,OACpBA,SAAkB,QAAlBA,EAAAA,EAAOvyB,MAAMg2B,aAAbzD,IAAAA,GAA8B,QAA9BA,EAAAA,EAAoBvyB,MAAM6xB,YAA1BU,IAAAA,OAAAA,EAAAA,EAAgCE,UAIrC2a,EAAAA,EAAAA,IAAwB7a,EAAOA,SAAkB,QAAlBA,EAAAA,EAAOvyB,MAAMg2B,aAAbzD,IAAAA,GAA8B,QAA9BA,EAAAA,EAAoBvyB,MAAM6xB,YAA1BU,IAAAA,OAAAA,EAAAA,EAAgCE,OAAQ1rB,KAAK,KAIhF4qB,EAAQkc,yBAA2B,CAACjpC,EAAeyhC,KACjD,MAAM71B,GAASs9B,EAAAA,EAAAA,IAAsBlpC,EAAOmC,MAC5CA,KAAKuS,aAAa,IAAImf,EAAAA,GAAe,SAAU,UAAWjrB,EAAAA,GAAsB5I,IAAQ,IAExFzB,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgB47D,6BACpC,CACE5sD,MAAOzN,EACP4L,UACF,CAEH,IA5MDzJ,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA8MA,EAvNWu0D,EAuNG76D,aAAY,EAAGf,YAC3B,MAAM,MAAE6yB,GAAU7yB,EAAMI,WACxB,IAAKyyB,EACH,OAEF,MAAMp3B,GAASC,EAAAA,EAAAA,YAAWm9B,EAAAA,IAE1B,OACE,kBAACjQ,OAAAA,CAAK/sB,UAAWJ,EAAOq9B,cACtB,kBAACjG,EAAM9xB,UAAS,CAACf,MAAO6yB,I,stBC1NzB,MAAM2sC,UAAyBz/D,EAAAA,GAK7B0/D,SAAAA,CAAUt6C,GACf9d,KAAKN,SAAS,CAAEoe,UAClB,CAEOu6C,UAAAA,CAAWC,EAAkBC,EAAkB5mD,GAChD2mD,GACFE,EAAuB7mD,GAAO8mD,EAAAA,EAAOz+C,SAAS9iB,OAC9C2jD,EAAAA,EAAAA,mBAAkB,yCAA0C,CAAE6d,eAAgBH,OAE9EzC,EAAAA,EAAAA,SACU9/D,IAAR2b,EACI,GAAGhX,OAAOqf,SAAS2+C,aAAah+D,OAAOqf,SAAS4+C,OAAOl7C,EAAAA,OAAO6M,YAAY5Y,IAC1E8mD,EAAAA,EAAOz+C,SAAS9iB,MAGlB8I,KAAK/G,MAAMo/D,YACbr4D,KAAK/G,MAAMo/D,WAAWC,EAASC,EAAS5mD,GAG9C,CAvBAjR,WAAAA,CAAYzH,GACV0H,M,sUAAM,EAAEmd,QAAQ,EAAO+6C,aAAcC,GAAgB7/D,GACvD,EAuBA,EA1BWk/D,EA0BJY,eAAc,EAAGpgE,YACtB,MAAMqgE,EAAoC,CACxC,CACEx/D,IAAK,SACLqE,MAAO,mBACP4vB,MAAO,CACL,CACEj0B,IAAK,sBACLmtB,KAAM,OACN9oB,MAAO,qBACPo7D,OAAQ,KAAe,EACvBX,SAAS,EACTC,SAAS,GAEX,CACE/+D,IAAK,YACLmtB,KAAM,OACN9oB,MAAO,WACPo7D,OAAQ,KAAe,EACvBX,SAAS,EACTC,SAAS,KAIf,CACE/+D,IAAK,WACLqE,MAAO,qDACP4vB,MAAO,CACL,CACEj0B,IAAK,2BACLmtB,KAAM,aACN9oB,MAAO,8BACPy6D,SAAS,EACTW,OAAQ,IACCC,OAC6BljE,IAAlC2C,EAAMM,MAAMkgE,kBACRxgE,EAAMM,MAAMkgE,oBACZtgE,EAAAA,GAAWqZ,aAAavZ,IAGhC4/D,SAAS,GAEX,CACE/+D,IAAK,qBACLmtB,KAAM,aACN9oB,MAAO,oBACPy6D,SAAS,EACTW,OAAQ,IACCC,OAC6BljE,IAAlC2C,EAAMM,MAAMkgE,kBACRxgE,EAAMM,MAAMkgE,oBACZtgE,EAAAA,GAAWqZ,aAAavZ,IAGhC4/D,SAAS,MAMjB,OACE,kBAACa,EAAAA,KAAIA,KACFJ,EAAY1/D,KAAK+/D,GAEd,kBAACC,EAAAA,UAASA,CAAC9/D,IAAK6/D,EAAY7/D,IAAKqE,MAAOw7D,EAAYx7D,OACjDw7D,EAAY5rC,MAAMn0B,KAAK6O,GAEpB,kBAACixD,EAAAA,KAAKG,KAAI,CACR//D,IAAK2O,EAAO3O,IACZqE,MAAOsK,EAAOtK,MACd8oB,KAAMxe,EAAOwe,KACb3xB,QAAS,KACP,MAAM2c,EAAMxJ,EAAO8wD,SACnBtgE,EAAM0/D,WAAWlwD,EAAOmwD,QAASnwD,EAAOowD,QAAS5mD,GACjDhZ,EAAM+G,SAAS,CACbm5D,aAAc1wD,GACd,SAOhB,IAKN,EAlHWgwD,EAkHJz+D,aAAY,EAAGf,YACpB,MAAM,aAAEkgE,EAAY,OAAE/6C,GAAWnlB,EAAMI,WAEvC,OACE,kBAAC+0C,EAAAA,YAAWA,KACV,kBAACpnB,EAAAA,cAAaA,CACZ7E,QAASg3C,EAAah7D,MACtB8oB,KAAMkyC,EAAalyC,KACnBhyB,QAAS,SACT6kE,QAAQ,EACRxkE,QAAS,KACP,MAAM2c,EAAMknD,EAAaI,SACzBtgE,EAAM0/D,WAAWQ,EAAaP,QAASO,EAAaN,QAAS5mD,EAAI,EAEnExX,aAAY,sBAEZ,kBAAConB,OAAAA,KAAK,UAER,kBAAC+E,EAAAA,SAAQA,CACPC,QAAS,kBAAC4xC,EAAiBY,YAAW,CAACpgE,MAAOA,IAC9C6tB,UAAU,aACVC,gBAAiB9tB,EAAMy/D,UAAUt3D,KAAKnI,IAEtC,kBAAC+tB,EAAAA,cAAaA,CAAC8yC,QAAQ,EAAM7kE,QAAS,SAAUmpB,OAAQA,EAAQ3jB,aAAY,4B,IAOtF,MAAM2+D,EAAqC,CACzCt/D,IAAK,YACLqE,MAAO,qBACP8oB,KAAM,YACNsyC,OAAQ,KAAe,EACvBX,SAAS,EACTC,SAAS,GAQX,SAASkB,EAAmB9nD,GAC1B,IAAImvC,EAAOnvC,EAAI9O,QAJR,GAAGlI,OAAOqf,SAAS2+C,aAAah+D,OAAOqf,SAAS4+C,OAAOl7C,EAAAA,OAAO6M,YAI9B,IACvC,OAAOu2B,EAAKvzC,WAAW,KAAOuzC,EAAKhmD,UAAU,EAAGgmD,EAAK5nD,QAAU4nD,CACjE,CAEO,MAAM4Y,EAAAA,W,MAAkB,aAAgB5Y,GAC7C,MAAMxwC,GAAYC,EAAAA,EAAAA,gBAClB,IAIE,aAHwBopD,EAAAA,EAAAA,iBAAgBC,KAAK,kBAAmB,CAC9D9Y,KAAM2Y,EAAmB3Y,MAEVnvC,GACnB,CAAE,MAAOipB,GACPhzB,QAAQ5F,MAAM,uCAAwC44B,GAEtDtqB,EAAU6B,QAAQ,CAChBpW,KAAMuc,EAAAA,UAAU4sB,WAAWxtC,KAC3BqZ,QAAS,CAAC,oCAEd,CACF,I,gBAf+C+vC,G,gCAAlC4Y,GAiBAlB,EAAAA,W,MAAyB,aAAO1X,GAC3C,MAAMxwC,GAAYC,EAAAA,EAAAA,gBACZspD,QAAkBH,EAAgB5Y,GACpC+Y,IACF/D,EAAAA,EAAAA,IAAS+D,GACTvpD,EAAU6B,QAAQ,CAChBpW,KAAMuc,EAAAA,UAAUwhD,aAAapiE,KAC7BqZ,QAAS,CAAC,yCAGZT,EAAU6B,QAAQ,CAChBpW,KAAMuc,EAAAA,UAAU4sB,WAAWxtC,KAC3BqZ,QAAS,CAAC,oCAGhB,I,gBAf6C+vC,G,gCAAhC0X,GAqBPU,EAAwB95D,IAC5B,MAAM8Y,GAAO6hD,EAAAA,EAAAA,OAAM36D,EAAUnG,MAAMgK,MAAMiV,MACnCF,GAAK+hD,EAAAA,EAAAA,OAAM36D,EAAUnG,MAAMgK,MAAM+U,IACjCgC,EAAWnI,EAAAA,gBAAgBoI,cAC3Bm4C,EAAehqC,EAAAA,QAAQ4xC,qBAG7B,OAFA5H,EAAmB,KAAIl6C,EAAK+hD,cAC5B7H,EAAiB,GAAIp6C,EAAGiiD,cACjB7xC,EAAAA,QAAQC,UAAUrO,EAASkgD,SAAU9H,EAAa,E,wLC1OpD,SAAS+H,EAAexmE,G,IAgBCymE,EACAA,EAhB9B,MAAQh9D,WAAYi9D,EAAU,QAAEzgE,EAAO,KAAEmC,G,sUAAS,IAAKpI,GAEjDyJ,EAAavE,EAAAA,GAAWwE,YAAYg9D,EAAY/8D,EAAAA,GAEtD,IAAKF,EAEH,YADAiE,EAAAA,EAAOC,KAAK,qCAIdpF,EAAAA,EAAAA,MACA,MAAM,SAAEL,EAAW,IAAOuB,EAAWnE,MAG/BmhE,EAAmBv+D,EAAS1C,QAAQgD,GAAQA,EAAIvC,UAAYA,I,IAEpCwgE,EAA9B,MAAM39D,EAAoF,QAA5D29D,EAA0C,QAA1CA,EAAAA,EAAiBjhE,QAAQ4D,GAAiB,YAAXA,EAAEhB,cAAjCq+D,IAAAA,OAAAA,EAAAA,EAAsDlhE,cAAtDkhE,IAAAA,EAAAA,EAAgE,E,IAChEA,EAA9B,MAAM19D,EAAoF,QAA5D09D,EAA0C,QAA1CA,EAAAA,EAAiBjhE,QAAQ4D,GAAiB,YAAXA,EAAEhB,cAAjCq+D,IAAAA,OAAAA,EAAAA,EAAsDlhE,cAAtDkhE,IAAAA,EAAAA,EAAgE,GAC9Fh+D,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkBC,gBAAiBC,EAAAA,GAAoBD,gBAAgBg+D,iBAAkB,CAC5Gv+D,KAAMA,EACNU,sBAAuBA,GAAkC,YAATV,EAAqB,EAAI,GACzEW,sBAAuBA,GAAkC,YAATX,EAAqB,EAAI,KAI9D,SAATA,EACFqB,EAAWsC,SAAS,CAClB7D,SAAUu+D,IAIZh9D,EAAWsC,SAAS,CAClB7D,SAAU,IAAIu+D,EAAkB,CAAExgE,QAASA,EAASmC,KAAMA,KAGhE,C,wBC5CA,MAAMzH,EAAaoB,IAA0B,CAC3C6kE,cAAc5kE,EAAAA,EAAAA,KAAI,CAChBe,OAAQ,GAAGhB,EAAMmC,QAAQ,cAE3B2iE,oBAAoB7kE,EAAAA,EAAAA,KAAI,CACtBsC,MAAOvC,EAAMwC,OAAOotB,QAAQntB,KAC5BL,SAAU,aAEZ2iE,mBAAmB9kE,EAAAA,EAAAA,KAAI,CACrBC,QAAS,OACTgf,aAAc,QAEhB8lD,mBAAmB/kE,EAAAA,EAAAA,KAAI,CACrB0B,KAAM,EACNoE,aAAc,WACdR,SAAU,WAEZ0/D,mBAAmBhlE,EAAAA,EAAAA,KAAI,CACrBkf,UAAW,QACXld,WAAYjC,EAAMmC,QAAQ,OAE5B+iE,qBAAqBjlE,EAAAA,EAAAA,KAAI,CACvBkf,UAAW,QACXld,WAAYjC,EAAMmC,QAAQ,KAC1BmH,MAAOtJ,EAAMmC,QAAQ,OAEvBgjE,iBAAiBllE,EAAAA,EAAAA,KAAI,CACnB+e,OAAQhf,EAAMmC,QAAQ,IACtBoD,SAAU,SACVqD,WAAY5I,EAAMwC,OAAOC,KAAKolB,WAEhCu9C,sBAAsBnlE,EAAAA,EAAAA,KAAI,CACxB+e,OAAQhf,EAAMmC,QAAQ,IACtBoD,SAAU,SACVqD,WAAY5I,EAAMwC,OAAOotB,QAAQjqB,SAWxB0/D,EAA4B,EAAGj2C,SAAQk2C,QAAOC,aAAYh4D,YACrE,MAAMi4D,GAAQ7mE,EAAAA,EAAAA,YAAWC,GACnB6mE,EAAU,GAAG1gE,KAAKC,MAAmB,IAAbugE,MACxBG,EAAW,CAAEp8D,MAAOm8D,GAE1B,OACE,kBAAC5mE,MAAAA,CAAIC,UAAWswB,EAAS,GAAGo2C,EAAMX,gBAAgBW,EAAMV,qBAAuBU,EAAMX,cACnF,kBAAChmE,MAAAA,CAAIC,UAAW0mE,EAAMT,mBACpB,kBAAClmE,MAAAA,CAAIC,UAAW0mE,EAAMR,kBAAmBrlE,MAAO4N,GAC7CA,GAEH,kBAAC1O,MAAAA,CAAIC,UAAW0mE,EAAMP,mBAAoBK,GAC1C,kBAACzmE,MAAAA,CAAIC,UAAW0mE,EAAMN,qBAAsBO,IAE9C,kBAAC5mE,MAAAA,CAAIC,UAAW0mE,EAAML,iBACpB,kBAACtmE,MAAAA,CAAIC,UAAW0mE,EAAMJ,qBAAsBI,MAAOE,K,kkBCzD3D,MAEM9mE,EAAaoB,IAA0B,CAC3C2lE,WAAW1lE,EAAAA,EAAAA,KAAI,CACb2I,WAAY,UACZrG,MAAOvC,EAAMwC,OAAOC,KAAKmtB,QACzBg2C,UAAW,YACXt8D,MAAO,cACPonC,UAAW,OACX+X,UAAW,OACXj/C,UAAWxJ,EAAMmC,QAAQ,KAE3B0jE,iBAAiB5lE,EAAAA,EAAAA,KAAI,CACnBooD,aAAc,aAAaroD,EAAMwC,OAAOoD,OAAOkgE,SAC/C5lE,QAAS,SAEX6lE,gBAAgB9lE,EAAAA,EAAAA,KAAI,CAClBgwB,WAAYjwB,EAAM4C,WAAWstB,iBAC7BjqB,aAAcjG,EAAMmC,QAAQ,GAC5BjC,QAAS,eACTsrB,WAAY,SACZzlB,aAAc,WACduF,SAAU,IAEZ06D,gBAAgB/lE,EAAAA,EAAAA,KAAI,CAClBqF,OAAQ,YAEV2gE,eAAehmE,EAAAA,EAAAA,KAAI,CACjB6F,QAAS,cASAogE,EAA0BjoE,IACrC,MAAMunE,GAAQ7mE,EAAAA,EAAAA,YAAWC,IAEnB,MAAEunE,EAAK,MAAE54D,GAAUtP,EAEnBmoE,EAAUD,EAAMzuD,MAAM,EA1CN,IA2CtB,IAAI2uD,EAAYD,EAAQ13C,MAAMy+B,GAAQA,EAAI5/C,QAAUA,IAChD+4D,EAAYH,EAAMzuD,MA5CA,KA6CG2uD,IAIvBA,EAAYC,EAAU53C,MAAMy+B,GAAQA,EAAI5/C,QAAUA,IAClD+4D,EAAYA,EAAU7iE,QAAQ0pD,GAAQA,EAAI5/C,QAAUA,KAGtD,MAAMg5D,EAAaD,EAAUxvB,QAAO,CAACgD,EAAKqT,IAAQrT,EAAMqT,EAAImY,OAAO,GAE7D/L,EADW6M,EAAQtvB,QAAO,CAACgD,EAAKqT,IAAQrT,EAAMqT,EAAImY,OAAO,GACtCiB,EAGzB,IAAIC,EAAe,IAAIJ,GAUvB,OAPIG,EAAa,GACfC,EAAa34D,KAAK,CAAEN,MAAO,QAAS+3D,MAAOiB,EAAYhB,WAAYgB,EAAahN,IAIlFiN,EAAaz2D,MAAK,CAACzO,EAAG0O,IAAMA,EAAEs1D,MAAQhkE,EAAEgkE,QAGtC,kBAACzmE,MAAAA,CAAIC,UAAW0mE,EAAMG,WACpB,kBAAC9mE,MAAAA,CAAIC,UAAW0mE,EAAMK,iBACpB,kBAAChnE,MAAAA,CAAIC,UAAW0mE,EAAMO,gBAAgB,oBAAkBxM,EAAM,gBAEhE,kBAAC16D,MAAAA,CAAIC,UAAW0mE,EAAMS,eACnBO,EAAa5iE,KAAK6iE,GACjB,kBAACpB,EAAyBA,E,sUAAAA,CAAAA,CAACvhE,IAAK2iE,EAAKl5D,OAAWk5D,GAAAA,CAAMr3C,OAAQq3C,EAAKl5D,QAAUA,Q,yIClEhF,MAAMm5D,EAAmB,EAAGC,cAAaziE,UAASm9D,eACvD,MAAMuF,EA6HR,SAA+B1iE,GAC7B,MAAM2iE,EAAoB,GAC1B,IAAIC,EAAe5iE,EAAQyV,QAAQ,OAEnC,MAAyB,IAAlBmtD,GACLD,EAAQh5D,KAAKi5D,GACbA,EAAe5iE,EAAQyV,QAAQ,MAAOmtD,EAAe,GAEvD,OAAOD,CACT,CAtIyBE,CAAsB7iE,IACtCiiE,EAAOa,IAAY3jE,EAAAA,EAAAA,eAA6C/C,IAChE2mE,EAAYC,IAAiB7jE,EAAAA,EAAAA,WAAS,GACvC3E,GAASC,EAAAA,EAAAA,YAAWC,GAGpBuoE,GAAmB3vB,EAAAA,EAAAA,QAAsB,MACzC4vB,GAAuB5vB,EAAAA,EAAAA,QAAyB,MAEhD6vB,EAAAA,W,WAAqB,aACzB3gE,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkBC,gBAAiBC,EAAAA,GAAoBD,gBAAgB0gE,uBAC5F,MAAM11D,EA8HV,SAAwB1N,EAAiB0iE,EAA0Bx9D,GACjE,IAAIilD,EAAa,EACjB,MAAMkZ,EAAmBrjE,EAAQiJ,QAAQ,QAAQ,IAAM,UAAUkhD,SAC3DlqB,EAAmB/6B,EAAQ7F,MAAM4gC,iBACjClyB,EAAS20D,EAAehjE,KAAI,CAAC4jE,EAAQ14C,IAAU,SAASA,EAAQ,MAAK1Y,KAAK,MAChF,MAAO,IAAI+tB,WAA0BjgC,mBAAyBqjE,cAA6Bt1D,oBAC7F,CApIkBw1D,CAAevjE,EAAS0iE,GAAgBnlD,EAAAA,EAAAA,IAAkBklD,IAClEj4D,QAAmBqa,EAAAA,EAAAA,IAAkB49C,GACrCe,EAAmBvkE,EAAAA,GAAWqZ,aAAamqD,GAAapjE,MAAMgK,MAGhE44D,GAASv0D,IAAUu1D,EAAiBluB,SAAWyuB,IAAqBN,EAAqBnuB,UAK7FkuB,EAAiBluB,QAAUrnC,EAC3Bw1D,EAAqBnuB,QAAUyuB,EAE/Bh5D,SAAAA,EACIkD,MAAM,CACN+1D,UAAW,IACX1lD,SAAU,GACV2lD,WAAY,EACZn3D,WAAY,CAAC,EACbY,MAAOq2D,EACPG,QAAS,EAACvjC,EAAAA,EAAAA,GAAe1yB,EAAO,CAAEyvD,cAClCyG,SAAU,GACVC,IAAK,GACLC,UAAW,IAEZ16D,SAASgC,I,IACmCA,EAGOA,EAH9CA,EAAO/L,QAAU29B,EAAAA,aAAaC,OAAsB,QAAb7xB,EAAAA,EAAO21B,cAAP31B,IAAAA,OAAAA,EAAAA,EAAe9L,SAG/C8L,EAAO/L,QAAU29B,EAAAA,aAAa30B,QAAsB,QAAb+C,EAAAA,EAAO21B,cAAP31B,IAAAA,OAAAA,EAAAA,EAAe9L,WAC/DwjE,OAAS1mE,GACT4mE,GAAc,KAJdF,EA0DV,SAA8B13D,EAAa24D,EAAoB5G,GAC7D,MAAM6G,EAAgB,IAAIjgC,IAG1B34B,EAAO8lB,KAAK,GAAGnjB,OAAO,GAAGxF,OAAO07D,UAAU76D,SAASC,IACjDoK,OAAOrD,KAAK/G,GAAOD,SAASxJ,I,IAIeokE,EAAzCA,EAHKA,EAAcj4D,IAAInM,IACrBokE,EAAc//B,IAAIrkC,EAAK,IAAImkC,KAEXnkC,QAAlBokE,EAAAA,EAAc/7D,IAAIrI,UAAlBokE,IAAAA,GAAAA,EAAwB//B,IAAI56B,EAAMzJ,KAAyBA,QAAlBokE,EAAAA,EAAc/7D,IAAIrI,UAAlBokE,IAAAA,OAAAA,EAAAA,EAAwB/7D,IAAIoB,EAAMzJ,MAAS,GAAK,EAAE,GAC3F,IAGJ,MAAMqiE,EAAgC,GAGtC,IAAK,IAAIhzD,EAAI,EAAGA,GAAK80D,EAAY90D,IAAK,C,IAEpC+0D,EADA,MAAME,EAAmC,GACP,QAAlCF,EAAAA,EAAc/7D,IAAI,SAASgH,EAAI,YAA/B+0D,IAAAA,GAAAA,EAAqC56D,SAAQ,CAACg4D,EAAOxhE,KACnDskE,EAAWv6D,KAAK,CAAEN,MAAOzJ,EAAKwhE,QAAOC,WAAYD,EAAQjE,GAAW,IAEtE+G,EAAWr4D,MAAK,CAACzO,EAAG0O,IAAMA,EAAEs1D,MAAQhkE,EAAEgkE,QACtCa,EAAMt4D,KAAKu6D,EACb,CAEA,OAAOjC,CACT,CApFmBkC,CAAqB/4D,EAAQs3D,EAAepjE,OAAQ69D,IAC7D6F,GAAc,GAIhB,IAEN,E,iOApCMG,GAsCAiB,GAAQlZ,EAAAA,EAAAA,UAAQ,IAAMlrD,EAAQyJ,MAAM,QAAQ,CAACzJ,IAEnD,OACE,kBAACrF,MAAAA,KACEypE,EAAM1kE,KAAI,CAAC2kE,EAAMz5C,IAChB,kBAACjD,OAAAA,CAAK/nB,IAAKgrB,GACRy5C,EACAz5C,IAAU83C,EAAepjE,QACxB,kBAACglE,EAAAA,UAASA,CACRC,OAAQpB,EACR16B,QACE,oCACGw5B,GAASA,EAAMr3C,GAAOtrB,OAAS,GAAK,kBAAC0iE,EAAsBA,CAACC,MAAOA,EAAMr3C,GAAQvhB,MAAM,KACvF44D,GAAiC,IAAxBA,EAAMr3C,GAAOtrB,QACrB,kBAAC3E,MAAAA,KAAI,gEAELsnE,GAASc,GAAc,kBAACpoE,MAAAA,KAAI,2CAC5BsnE,IAAUc,GACV,kBAACpoE,MAAAA,CAAI2mE,MAAO,CAAE1/D,QAAS,SACrB,kBAAC4iE,EAAAA,QAAOA,CAACvpE,KAAK,UAMtB,kBAAC0sB,OAAAA,CAAK/sB,UAAWJ,EAAOwF,SAAS,aAS/C,SAAStF,EAAUoB,GACjB,MAAO,CACLkE,SAASjE,EAAAA,EAAAA,KAAI,CACXqF,OAAQ,UACRI,gBAAiB1F,EAAMwC,OAAOmmE,UAAU3oE,EAAMwC,OAAOoG,WAAWgnB,QAAS,IACzE5uB,OAAQ,QAER,UAAW,CACT0E,gBAAiB1F,EAAMwC,OAAOmmE,UAAU3oE,EAAMwC,OAAOoG,WAAWgnB,QAAS,OAIjF,C,sIC7EO,MAAMg5C,UAAgC5lE,EAAAA,GAOnCmH,UAAAA,GACN,GAAIG,KAAK/G,MAAMkI,KACb,OAIF,MAAMo9D,GAAmBvkC,EAAAA,EAAAA,GAAewkC,EAAAA,IACxCx+D,KAAKy+D,uBAAuBF,GAG5B,MAAMG,GAAyBplC,EAAAA,EAAAA,IAAe,CAACilC,IAC/CG,EAAuBjgC,mBAAmB5tB,WAAW5N,IACnDjD,KAAK2+D,yBAAyB17D,EAAM,IAGtCjD,KAAKN,SAAS,CACZyB,KAAM,IAAI5B,EAAAA,GAAgB,CACxByT,UAAW,SACX1c,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,UAAMnL,EACNgJ,MAAO,OACP0V,OAAQ,IAEV,IAAI4I,EAAAA,GAAc,CAChB5I,OAAQ,IACR1V,MAAO,OACPmC,KAAMguB,EAAAA,GAAczH,OACjB4b,gBAAe,GACfsxB,UAAU,wBAAwB,GAClCA,UAAU,YAAY,GACtBjlC,QAAQ+uC,GACR9uC,cAKb,CAEQ6uC,sBAAAA,CAAuBF,GAC7B,MAAMK,EAAiC,CACrChlE,QAASoG,KAAK/G,MAAMW,QACpBmC,KAAM,WAEFse,GAAeC,EAAAA,EAAAA,GAAqB,CAACskD,IAC3CL,EAAiB/8D,KAAO+8D,EAAiB/8D,KAAKqB,QAAQg8D,EAAAA,GAAmBxkD,EAC3E,CA4BQykD,gCAAAA,GACN,MAAMC,EAAyBlmE,EAAAA,GAAWwE,YAAY2C,KAAMg/D,I,IACzBD,EAAnC,MAAME,EAAoF,QAAvDF,EAAAA,EAAuB9lE,MAAMgmE,kCAA7BF,IAAAA,EAAAA,EAA2D,GAExFv6C,EAAQy6C,EAA2Bp5B,WAAWjsC,GAAYA,IAAYoG,KAAK/G,MAAMW,WAExE,IAAX4qB,IACFy6C,EAA2B/yD,OAAOsY,EAAO,GAEzCu6C,EAAuBr/D,SAAS,CAC9Bu/D,2BAA4BA,IAGlC,CAgDQC,iBAAAA,CAAkBloC,GACxB,MAAMmoC,EAAiBn/D,KAAKo/D,oBACtBC,EAAcr/D,KAAKs/D,iBAWzB,OATIH,aAA0B7hD,EAAAA,IAC5B6hD,EAAez/D,SAAS,CACtBg/B,UAAU,EACVhqB,OAAQ,OACRvT,KAAM,IAAI41B,EAAAA,GAAiB,CACzBC,UAAWA,MAIVqoC,CACT,CAEQD,iBAAAA,GACN,MAAM9oE,EAAW0J,KAAKu/D,sBACtB,OAAOjpE,aAAAA,EAAAA,EAAW,EACpB,CACQgpE,cAAAA,GACN,MAAMhpE,EAAW0J,KAAKu/D,sBACtB,OAAOjpE,aAAAA,EAAAA,EAAW,EACpB,CAEQipE,mBAAAA,G,IACC,EAAP,OAAsB,QAAf,EAAAv/D,KAAK/G,MAAMkI,YAAX,eAAiBlI,MAAM3C,QAChC,CA2DQkpE,+BAAAA,GACN,MAAMT,EAAyBlmE,EAAAA,GAAWwE,YAAY2C,KAAMg/D,I,IAChBD,EAA5C,MAAMU,EAA6F,QAAvDV,EAAAA,EAAuB9lE,MAAMgmE,kCAA7BF,IAAAA,EAAAA,EAA2D,GAGvGA,EAAuBr/D,SAAS,CAC9Bu/D,2BAA4B,IAAIQ,EAAqCz/D,KAAK/G,MAAMW,UAEpF,CAEA,gBAAcF,EAAU,MAAEf,IACxB,MAAM,KAAEwI,GAASxI,EAAMI,WACvB,OAAIoI,EACK,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,IAEzB,IACT,CAnPAT,WAAAA,CAAYzH,GACV0H,MAAM1H,GAqDR,OAAQ84B,gBAAe,KACrB,MAAM2tC,GAAiB5pD,EAAAA,EAAAA,IAAkB9V,MACnCoc,GAAsBiH,EAAAA,EAAAA,IAAuBrjB,MAC7C0Y,GAAiBzC,EAAAA,EAAAA,IAAkBjW,MAOzC,GANA0/D,EAAehgE,SAAS,CACtBZ,QAAS,KAEX4Z,EAAehZ,SAAS,CACtBZ,QAAS,KAEPsd,EAAoBnjB,MAAM6F,QAAQ5F,OAAQ,CAC5CkjB,EAAoB1c,SAAS,CAC3BZ,QAAS,KAGX,MAAMqgE,EAAiBn/D,KAAKo/D,oBAG5BD,SAAAA,EAAgBz/D,SAAS,CACvBg/B,UAAU,IAGZ1+B,KAAK8+D,kCACP,KAsBF,OAAQa,gBAAgB18D,IACtB,GACE,EAAO6nB,KAAK7xB,QAAU29B,EAAAA,aAAaC,OACH,IAA7B5zB,EAAM6nB,KAAKY,OAAOxyB,QAAgB+J,EAAM6nB,KAAKY,OAAO2Z,OAAOla,GAA2B,IAAjBA,EAAMjyB,WAC9E+J,EAAM6nB,KAAK7xB,QAAU29B,EAAAA,aAAa30B,MAClC,CAEA,IAAI+8C,EACJ,IACEA,EAAa,CACXplD,QAASoG,KAAK/G,MAAMW,QACpBgmE,SAAU/7D,KAAKC,UAAUb,EAAM6nB,KAAK80C,UACpCC,QAASh8D,KAAKC,UAAUb,EAAM6nB,KAAK+0C,SACnC77D,IAAK,eAET,CAAE,MAAOC,GACP+6C,EAAa,CACXplD,QAASoG,KAAK/G,MAAMW,QACpBoK,IAAK,2BAET,CAGA3C,EAAAA,EAAOW,MAAM,IAAIC,MAAM,2CAA4C+8C,GAEnEh/C,KAAKk/D,kBACH,kBAACtoE,EAAAA,MAAKA,CAACE,SAAU,QAASzB,MAAO,IAAI,kCAKvC,MAAMyqE,EAAgB9/D,KAAKs/D,iBAGvBQ,aAAyBxiD,EAAAA,IAC3BwiD,EAAcpgE,SAAS,CACrBg/B,UAAU,GAGhB,KAsCF,OAAQigC,4BAA4B17D,IAClC,MAAM88D,GAAsB/lC,EAAAA,EAAAA,GAAegmC,EAAAA,IAC3ChgE,KAAKy+D,uBAAuBsB,GAE5B,MAAME,GAA4B3mC,EAAAA,EAAAA,IAAe,CAACymC,IAKlD,GAFAE,EAA0BxhC,mBAAmB5tB,UAAU7Q,KAAK2/D,cAG1D18D,EAAM6nB,KAAK7xB,QAAU29B,EAAAA,aAAaC,OACJ,IAA7B5zB,EAAM6nB,KAAKY,OAAOxyB,QAAgB+J,EAAM6nB,KAAKY,OAAO2Z,OAAOla,GAA2B,IAAjBA,EAAMjyB,UAC5E,CACA,MAAMimE,EAAiBn/D,KAAKo/D,oBACtBU,EAAgB9/D,KAAKs/D,iBAqB3B,GAlBIH,aAA0B7hD,EAAAA,IAC5B6hD,EAAez/D,SAAS,CACtBg/B,UAAU,EACVhqB,OAAQ,OACRvT,KAAM,IAAI41B,EAAAA,GAAiB,CACzBC,UACE,kBAACpgC,EAAAA,MAAKA,CAACE,SAAU,UAAWzB,MAAO,IAAI,4EAErC,kBAACX,EAAAA,OAAMA,CAACF,UAAW8iC,EAAAA,GAAiBhT,OAAQtvB,QAAS,IAAMgL,KAAK+xB,gBAAgB,sBAUtF+tC,aAAyBxiD,EAAAA,GAAe,CAC1C,MAAMkO,EAAQs0C,EAAc7mE,MAAMkI,KAC9BqqB,aAAiBja,EAAAA,KACnBia,SAAAA,EAAO9rB,SAAS,CACduvB,MAAOgxC,IAGb,CACAjgE,KAAKw/D,iCACP,CAEIv8D,EAAM6nB,KAAK7xB,QAAU29B,EAAAA,aAAa30B,OACpCjC,KAAK2/D,aAAa18D,EACpB,IA7NAjD,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EC/BK,SAASkgE,GAAyB,SAAEC,EAAQ,IAAEtd,IACnD,MAAM,aAAEud,GAAiBD,EAASpnE,WAE5BsnE,EAAWD,aAAAA,EAAAA,EAAch8C,MAAM3T,GAAUA,EAAMxX,MAAMO,MAAQqpD,EAAIjpD,UASvE,OAPAo5C,EAAAA,EAAAA,YAAU,KACR,IAAKqtB,EAAU,CACb,MAAMC,GAQmB1mE,EARiBipD,EAAIjpD,QAS3C,IAAI0kE,EAAwB,CACjC1kE,QAASA,EACTJ,IAAKI,K,IAVoCumE,EAAvCA,EAASzgE,SAAS,CAAE0gE,aAAc,IAAgC,QAA3BD,EAAAA,EAASlnE,MAAMmnE,oBAAfD,IAAAA,EAAAA,EAA+B,GAAKG,IAC7E,CAMJ,IAA+B1mE,CAN3B,GACC,CAACipD,EAAKsd,EAAUE,IAEZA,EAAW,kBAACA,EAAS3mE,UAAS,CAACf,MAAO0nE,IAAe,IAC9D,CCOA,MAAME,EAAe,CAAC,GAAI,KAAM,OAAQ,OAAQ,OAAQ,SAAU,SAAU,QAAS,SAoB9E,MAAMvB,WAA+BtmE,EAAAA,GAM1CmH,UAAAA,G,IAEmBzC,EADjB,MACM25D,EAA8B,QAAnB35D,EADEvE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,GACpBrE,MAAM0lB,UAAjBvhB,IAAAA,OAAAA,EAAAA,EAAqB25D,SACtC/2D,KAAKN,SAAS,CAAEq3D,YAClB,CAYA,aACE9H,EACAuR,EACA9qE,EACAqhE,EACAkI,GAEA,MAAM7qE,EAASqsE,GAAgB/qE,GACzB0J,EAAYvG,EAAAA,GAAWqZ,aAAalS,MAAM/G,MAAMgK,MA2GtD,MA1GsD,CACpD,CACE4oB,GAAI,iBACJpH,OAAQ,GACRi8C,KAAO/sE,IACL,MAAMgtE,EAAuB,CAC3BvhE,UAAWA,EACXssB,OAAQ,CAAC/3B,EAAM+sE,KAAK7d,IAAI+d,SAASlgC,WACjCznC,MAAO29B,EAAAA,aAAaC,MAEhBgqC,EAAW,IAAIC,EAAAA,GAAc,CACjCh2C,KAAM61C,IAGFI,EAAa5xC,EAAAA,GAAcC,aAC9BO,QAAQkxC,GACRv9B,gBAAe,GACfsxB,UAAU,UAAW,CACpBt1B,KAAM0hC,EAAAA,mBAAmBC,OAE1B5hC,qBAAqB,WAAY,CAChCjsB,QAAQ,EACRyO,SAAS,IAEVwd,qBAAqB,gBAAiB6hC,EAAAA,cAAcC,QACpDC,eAAe,eACfxxC,QAEH,OACE,kBAACr7B,MAAAA,CAAIC,UAAWJ,EAAOitE,qBACrB,kBAAC9sE,MAAAA,CAAIC,UAAWJ,EAAOktE,iBACrB,kBAACP,EAAWrnE,UAAS,CAACf,MAAOooE,K,GAMvC,CACEl1C,GAAI,QACJpH,OAAQ,QACR88C,SAAU,SACVb,KAAO/sE,IACL,MAAMsP,GAAQu+D,EAAAA,EAAAA,aAAY,IAAMjB,EAAlBiB,CAAgC7tE,EAAM+sE,KAAK7d,IAAI+d,SAASpxB,K,IAI/DvsC,EAEAA,EALP,OACE,kBAAC1O,MAAAA,CAAIC,UAAWJ,EAAOqtE,eACrB,kBAACltE,MAAAA,KACc,QAAZ0O,EAAAA,EAAMod,cAANpd,IAAAA,EAAAA,EAAgB,GAChBA,EAAM9K,KACM,QAAZ8K,EAAAA,EAAMmkC,cAANnkC,IAAAA,EAAAA,EAAgB,OAM3B,CACE4oB,GAAI,UACJpH,OAAQ,IACR88C,SAAU,SACVb,KAAO/sE,GACL,kBAACY,MAAAA,CAAIC,UAAWJ,EAAOqtE,eACrB,kBAACltE,MAAAA,MAAM,IAAOZ,EAAM+sE,KAAK7d,IAAI+d,SAASpxB,IAAOyf,GAAOyS,QAAQ,GAAG,OAIrE,CACE71C,GAAI,UACJpH,OAAQ,UACRi8C,KAAO/sE,GAEH,kBAACY,MAAAA,CAAIC,WAAW6K,EAAAA,EAAAA,IAAGsiE,KAA6BvtE,EAAOwtE,0BACrD,kBAACxF,EAAgBA,CACfC,aAAawF,EAAAA,EAAAA,IAAkB7hE,MAC/BpG,QAASjG,EAAM+sE,KAAK7d,IAAI+d,SAAShnE,QACjCm9D,SAAUA,MAMpB,CACElrC,GAAI,UACJpH,YAAQzuB,EACR8rE,aAAa,EACbpB,KAAO/sE,IACL,GAAIsrE,aAAAA,EAAAA,EAA4B5lE,SAAS1F,EAAM+sE,KAAK7d,IAAI+d,SAAShnE,SAC/D,OAGF,MAAMmoE,EAAkBvB,aAAAA,EAAAA,EAAiBp8C,MACtC49C,GAAmBA,EAAepoE,UAAYjG,EAAM+sE,KAAK7d,IAAI+d,SAAShnE,UAEnE/F,EAAuC,aAA1BkuE,aAAAA,EAAAA,EAAiBhmE,MAC9BnI,EAAuC,aAA1BmuE,aAAAA,EAAAA,EAAiBhmE,MACpC,OACE,kBAACrI,EAAAA,EAAYA,CACXE,WAAYA,EACZC,WAAYA,EACZC,UAAW,IAAMH,EAAM+sE,KAAK7d,IAAI+d,SAASqB,cACzCluE,UAAW,IAAMJ,EAAM+sE,KAAK7d,IAAI+d,SAASsB,cACzCluE,QAAS,IAAML,EAAM+sE,KAAK7d,IAAI+d,SAASuB,WACvCjuE,WAAY,W,GAOxB,CAQA,eAAsBkuE,EAA+BC,GACnD,MAAMC,EAAiBzpE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,GACpD,OAAO8kE,EACJjpE,QAAQopE,IACAF,EAAmBxtE,MAAOwtE,EAAmB18D,IAAI48D,EAAa3oE,WAEtEN,KAAKM,IACG,CACL8mC,UAAW9mC,EAAQ8mC,UACnB9mC,QAASA,EAAQA,QACjB41C,IAAK51C,EAAQ41C,IACbyyB,YAAa,IACX9H,EAAe,CACbvgE,QAASA,EAAQA,QACjBmC,KAAM,UACNqB,WAAYklE,IAEhBJ,YAAa,IACX/H,EAAe,CACbvgE,QAASA,EAAQA,QACjBmC,KAAM,UACNqB,WAAYklE,IAEhBH,SAAU,IACRhI,EAAe,CACbvgE,QAASA,EAAQA,QACjBmC,KAAM,OACNqB,WAAYklE,OAIxB,CAhLA5hE,WAAAA,CAAYzH,GACV0H,MAAM1H,GAEN+G,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,E,gBA0OK,UAAwC,MAAErH,IAC/C,MAAMyE,EAAavE,EAAAA,GAAWwE,YAAY1E,EAAO2E,EAAAA,IACzCzB,SAAU2kE,GAAoBpjE,EAAWrE,WAC3CrD,GAAQwe,EAAAA,EAAAA,aACR9f,EAASouE,GAAe9sE,GAGxB+sE,EAAqB5pE,EAAAA,GAAWwE,YAAY1E,EAAO+pE,KACnD,mBAAEL,GAAuBI,EAAmB1pE,YAG1CqpE,cAAeO,EAAgB,2BAAE1D,GAA+BtmE,EAAMI,WACxEqpE,EAAgBO,QAAAA,EAAoB,GAGpCC,EAAyB/pE,EAAAA,GAAWwE,YAAY1E,EAAOkqE,I,IAClCD,EAA3B,MAGM3T,GAH+D,QAA1C2T,EAAAA,EAAuB3pE,MAAMmpE,qBAA7BQ,IAAAA,EAAAA,EAA8C,IAGxCp2B,QAAO,CAACs2B,EAAe33C,IAC/C23C,EAAgB33C,EAAMqkB,KAC5B,GAEGuzB,EAAYpqE,EAAMqqE,eAAeZ,EAAeC,G,IAKpD1pE,EAJF,MAAM+wB,EAAU/wB,EAAMsqE,aACpBhU,EACAuR,EACA9qE,EACoB,QAApBiD,EAAAA,EAAMM,MAAM89D,gBAAZp+D,IAAAA,EAAAA,EAAwBq+D,EAAAA,GACxBiI,GAGF,OACE,kBAAC1qE,MAAAA,CAAIU,cAAaC,EAAAA,EAAQ2G,SAASqnE,aAAc1uE,UAAWJ,EAAOq1D,WACjE,kBAAC0Z,EAAAA,iBAAgBA,CACfz5C,QAASA,EACToB,KAAMi4C,EACNK,SAAWr/D,GAA6BA,EAAEnK,QAC1CypE,kBAAoBxgB,GAAQ,kBAACqd,EAAwBA,CAACC,SAAUxnE,EAAOkqD,IAAKA,MAIpF,G,GA7QgBnpD,e,GAZHslE,I,4FAoLb,MAAMtpE,GAAQgoB,EAAAA,OAAO4lD,OAEf3B,GAA4B,KACzBhsE,EAAAA,EAAAA,KAAI,CACTyhC,SAAU,QACVr8B,WAAYrF,GAAM4C,WAAW6tD,oBAC7BlrD,SAAU,SACVsoE,aAAc,eAIZf,GAAkB9sE,IACf,CACL8C,MAAM7C,EAAAA,EAAAA,KAAI,CACR2sC,eAAgB,cAElBmnB,WAAW9zD,EAAAA,EAAAA,KAAI,CAEb,QAAS,CAEP+e,OAAQ,sBACRzT,UAAW,SAGbuiE,GAAI,CACFzrE,IAAK,EACLD,SAAU,SACVsD,gBAAiB1F,EAAMwC,OAAOoG,WAAWC,OACzCC,OAAQ9I,EAAM8I,OAAOC,iBAKvBgiE,GAAmB/qE,IAChB,CACLksE,yBAAyBjsE,EAAAA,EAAAA,KAAI,CAC3BoF,WAAYrF,EAAM4C,WAAW6tD,oBAC7B/uB,SAAU,QACVl2B,SAAU,OACVjG,SAAU,SACVsoE,aAAc,aACdlrE,SAAU3C,EAAM4C,WAAWC,UAAUF,SACrCijE,UAAW,eAEbmG,eAAe9rE,EAAAA,EAAAA,KAAI,CACjBkf,UAAW,QACXxc,SAAU3C,EAAM4C,WAAWC,UAAUF,WAEvCgpE,qBAAqB1rE,EAAAA,EAAAA,KAAI,CACvBqJ,MAAO,QACPykE,cAAe,SAEjBnC,iBAAiB3rE,EAAAA,EAAAA,KAAI,CACnB+e,OAAQ,OACRzZ,SAAU,a,k4BCnQhB,MAAMyoE,GAAUhmD,EAAAA,OAAO4lD,OAAOK,cAAcD,QAQrC,MAAMhB,WAA2BhqE,EAAAA,GAyB9BmH,UAAAA,GACNG,KAAKghC,aAGLhhC,KAAKkW,MAAMC,IACTtd,EAAAA,GAAWwE,YAAY2C,KAAMsV,IAAcc,kBAAiB,CAACC,EAAUmB,K,IACpDnB,EAAAA,EAAAA,EACCmB,EAAAA,EAAAA,EADlB,MAAMosD,EAAWvtD,SAAuB,QAAvBA,EAAAA,EAAUwtD,qBAAVxtD,IAAAA,GAA8B,QAA9BA,EAAAA,EAAyBpd,aAAzBod,IAAAA,GAAoC,QAApCA,EAAAA,EAAgCyU,YAAhCzU,IAAAA,OAAAA,EAAAA,EAAsCqV,OACjDo4C,EAAYtsD,SAAwB,QAAxBA,EAAAA,EAAWqsD,qBAAXrsD,IAAAA,GAA+B,QAA/BA,EAAAA,EAA0Bve,aAA1Bue,IAAAA,GAAqC,QAArCA,EAAAA,EAAiCsT,YAAjCtT,IAAAA,OAAAA,EAAAA,EAAuCkU,OAEzD,KAAKvN,EAAAA,EAAAA,GAAeylD,EAAUE,GAAY,CACxC,MAAMlB,EAAyB/pE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IAC5D7iE,KAAK2V,eAAeitD,EAAuB3pE,MAAMmpE,eAGjDQ,EAAuBljE,SAAS,CAC9B06D,sBAAkBpkE,GAEtB,MAKJgK,KAAKkW,MAAMC,IACTtd,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IAAwBzsD,kBAAiB,CAACC,EAAUmB,KAC/E,MAAMorD,EAAyB/pE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IACxDxsD,EAAS+jD,oBAAqBj8C,EAAAA,EAAAA,GAAe9H,EAAS+jD,iBAAkB5iD,EAAU4iD,kBACpFp6D,KAAK2V,eAAeitD,EAAuB3pE,MAAMmhE,kBAG5CwI,EAAuB3pE,MAAM8qE,eAChC/jE,KAAK2V,eAAeitD,EAAuB3pE,MAAMmpE,cAErD,IAGN,CAEczsD,cAAAA,CAAeysD,EAAgC,I,kBAA7D,gB,IAEE,EAAe,QAAf,IAAKnpE,MAAMkI,YAAX,SAAiB6iE,cAAcxvC,IACzBA,aAAiBjjB,EAAAA,IACnBijB,EAAM90B,SAAS,CACbuvB,MAAO,EAAKg1C,sBAAsB7B,KAGlC5tC,aAAiBwqC,IACnBxqC,EAAM90B,SAAS,CACb0iE,iBAEJ,GAEJ,GAdA,E,CAgBcphC,UAAAA,G,kBAAd,gB,IAMuBlD,EAAAA,EALrB,MACMskC,EADyBvpE,EAAAA,GAAWwE,YAAY,EAAMwlE,IACf5pE,MAAMmpE,eAIE,QAAhCtkC,EAFAjlC,EAAAA,GAAWwE,YAAY,EAAMiY,IAEhBrc,MAAM4qE,qBAAnB/lC,IAAAA,GAA4C,QAA5CA,EAAAA,EAAkC7kC,MAAM6xB,YAAxCgT,IAAAA,OAAAA,EAAAA,EAA8CpS,SAC7C02C,EAKtB,EAAK1iE,SAAS,CACZyB,KAAM,EAAK+iE,sBACX7B,mBAAoB,IAAI78D,IACxBu6B,SAAS,IAPT1+B,EAAAA,EAAOC,KAAK,2CAShB,GAjBA,E,CAmBQ6kC,yBAAAA,CAA0Bh1B,EAAoByZ,GACpD,MAAMu5C,EAAmCv5C,EAAQkc,yBAEjDlc,EAAQkc,yBAA2B,CAACjpC,EAAeyhC,K,IAGAnuB,EAFjDgzD,SAAAA,EAAmCtmE,EAAOyhC,GAE1C,MAAM8kC,EAA+E,QAApCjzD,EAAAA,EAASlY,MAAM0yB,YAAYI,iBAA3B5a,IAAAA,OAAAA,EAAAA,EAAuC,GAClFkzD,EAA2BD,aAAAA,EAAAA,EAAUp4C,QAAQ3pB,QAAQiiE,MACrDjC,EAAqB,IAAI78D,IAE3B6+D,GACFA,EAAerhE,QAAQq/D,EAAmBlsD,IAAKksD,GAGjDriE,KAAKN,SAAS,CACZ2iE,sBACA,CAEN,CAEQ6B,mBAAAA,GACN,MACM9B,EADyBvpE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IACf5pE,MAAMmpE,cAEnD,IAAKA,EAEH,YADA/gE,EAAAA,EAAOC,KAAK,qCAId,MAAMy/D,EAAa/gE,KAAKukE,cAAcnC,GAEtC,OAAO,IAAI3mC,EAAAA,GAAmB,CAC5BC,gBAAiB,OACjBE,SAAU,QACVC,QAAQ,EAERvlC,SAAU,CACRyqE,EACA,IAAI/B,GAAuB,CACzBoD,oBAIR,CAEQmC,aAAAA,CAAcnC,GACpB,MAAME,EAAiBzpE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,GAE9CyjE,EAAa5xC,EAAAA,GAAcC,aAC9BO,QAAQ3vB,KAAKikE,sBAAsB7B,IACnCxN,UAAU,SAAU,CACnB4P,SAAS,EACTnxD,YAAY,EACZ6jD,YAAaC,EAAAA,kBAAkB7N,MAC/B9iC,UAAW,QACXxnB,MAAO,MAERskC,gBAAe,GACf+zB,QAAQ,SACRoN,SAAS,CACR,CACE9yD,IAAK,IACL+yD,aAAa,EACb1vE,QAAU+T,IACRoxD,EAAe,CACbvgE,QAASmP,EAAMwjB,OAAOxE,OAAOrwB,KAC7BqE,KAAM,UACNqB,WAAYklE,GACZ,EAEJjtE,MAAO,WAET,CACEsc,IAAK,IACL+yD,aAAa,EACb1vE,QAAU+T,IACRoxD,EAAe,CACbvgE,QAASmP,EAAMwjB,OAAOxE,OAAOrwB,KAC7BqE,KAAM,UACNqB,WAAYklE,GACZ,EAEJjtE,MAAO,aAGVu6B,QAMH,OAJAmxC,EAAWrhE,SAAS,CAClBwmC,mBAAoB,CAAC/0B,EAAUyZ,IAAY5qB,KAAKmmC,0BAA0Bh1B,EAAUyZ,KAG/Em2C,CACT,CAEQkD,qBAAAA,CAAsB7B,GAC5B,MAAMhjE,EAAYvG,EAAAA,GAAWqZ,aAAalS,MAAM/G,MAAMgK,MAEtD,OAAO,IAAI69D,EAAAA,GAAc,CACvBh2C,KAAM,CACJY,OAAQ02C,EAAc9oE,KAAI,CAACipE,EAAcptC,KAEvC,MAAMuL,EAAY6hC,EAAa7hC,UAG/B,OAFAA,EAAU/4B,OAAO,GAAG+V,OAAOzlB,MAW9B,SAA8BuB,GACnC,MAAO,CACL8lC,KAAM,QACNqlC,WAAYjB,GAAQlqE,GAExB,CAhB6CorE,CAAqBzvC,GACxDuL,EAAU/4B,OAAO,GAAGjQ,KAAO,GACpBgpC,CAAS,IAElBznC,MAAO29B,EAAAA,aAAaC,KACpBz3B,UAAWA,IAGjB,CA9MAsB,WAAAA,CAAYzH,GACV0H,MAAM,G,uUAAA,EACJo/B,SAAS,GACN9mC,GAAAA,CACHopE,mBAAoB,IAAI78D,OAG1BxF,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAGA,GAZW0iE,GAYGhpE,aAAY,EAAGf,Y,IAIVkrE,EAHjB,MAAM,KAAE1iE,EAAI,QAAE4+B,GAAYpnC,EAAMI,WAC1B8rE,EAAqBhsE,EAAAA,GAAWwE,YAAY1E,EAAO2c,KACnD,cAAEuuD,GAAkBgB,EAAmB9rE,WACvC8C,EAAWgoE,SAAyB,QAAzBA,EAAAA,EAAe5qE,MAAM6xB,YAArB+4C,IAAAA,OAAAA,EAAAA,EAA2Bn4C,OAE5C,OACE,kBAACn3B,MAAAA,CAAIC,UAAWJ,GAAOK,YACnBsrC,GAAWlkC,GAAYA,EAAS3C,OAAS,GAAK,oCAAGiI,GAAQ,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,K,IAqM1F,MAAM/M,GAAS,CACbK,WAAWkB,EAAAA,EAAAA,KAAI,CACbqJ,MAAO,OAEP,iBAAkB,CAChBpJ,QAAS,W,mJCnPR,MAAMkvE,WAA+BpsE,EAAAA,GAoC1C,aACE,MAAMkqE,EAAyB/pE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IAC5D7iE,KAAKkW,MAAMC,IACTysD,EAAuBxsD,kBAAiB,CAACC,EAAUmB,KACjD,GAAInB,EAAS0tD,gBAAkBvsD,EAAUusD,cAAe,CACtD,MAAMnB,EAAyB/pE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IACxDD,EAAuB3pE,MAAMmpE,gBAC/BnnB,EAAAA,GAAAA,GACE2nB,EAAuB3pE,MAAMmpE,cAAc9oE,KAAK6xB,GAAUA,EAAMvxB,UAChEgpE,EAAuB3pE,MAAM8qE,cAC7B/jE,KAAK+kE,eAGX,MAIJ/kE,KAAKkW,MAAMC,IACTysD,EAAuBxsD,kBAAiB,CAACC,EAAUmB,KAG/CnB,EAAS0tD,gBACR1tD,EAAS+jD,kBACV/jD,EAAS+rD,iBACRjkD,EAAAA,EAAAA,GAAe9H,EAAS+jD,iBAAkB5iD,EAAU4iD,oBAErD/jC,EAAAA,GAAAA,GACEhgB,EAAS+rD,cAAc9oE,KAAK6xB,GAAUA,EAAMvxB,UAC5Cyc,EAAS0tD,cACT/jE,KAAK+kE,eAET,IAGN,CAOAC,mBAAAA,CAAoBnpE,EAAoBopE,GACtC,MAAMrC,EAAyB/pE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IACtDT,EAAgB6C,QAAAA,EAAyBrC,EAAuB3pE,MAAMmpE,cAE5E,GAAIA,EAAe,CACjB,MAAM8C,EAAwB9C,EAAcjpE,QAAQopE,MAC9CK,EAAuB3pE,MAAM8qE,iBAAiB3B,aAAAA,EAAAA,EAAelpE,UACxD2C,EAASuoB,MAAMxqB,GAAYA,IAAY2oE,EAAa3oE,YAK/DgpE,EAAuBljE,SAAS,CAC9B06D,iBAAkB8K,GAEtB,CACF,CAoBA,iBACiCrsE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IACrCnjE,SAAS,CAC9B06D,sBAAkBpkE,GAEtB,CAnHA0K,WAAAA,CAAYzH,GACV0H,M,uUAAM,IACD1H,IASP,QAAOksE,eAAc,KACYtsE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IACrCnjE,SAAS,CAC9BqkE,cAAe,IACf,IAOJ,QAAOqB,sBAAsBnhE,IACIpL,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IACrCnjE,SAAS,CAC9BqkE,cAAe9/D,EAAEhN,OAAOgM,OACxB,IAsEJ8hE,GAAAA,KAAAA,kBAAkBj6C,IAChB,MAAM83C,EAAyB/pE,EAAAA,GAAWwE,YAAY2C,KAAM6iE,IAExDD,EAAuB3pE,MAAM8qE,cAC/B/jE,KAAKglE,oBAAoBl6C,EAAK,IACrB83C,EAAuB3pE,MAAMmhE,mBAAqBwI,EAAuB3pE,MAAM8qE,eAExF/jE,KAAKqlE,gBACP,IAnGArlE,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EARA,GADW8kE,GACGprE,aAkIT,UAAoC,MAAEf,IAC3C,MAAMiqE,EAAyB/pE,EAAAA,GAAWwE,YAAY1E,EAAOkqE,KACvD,cAAEkB,GAAkBnB,EAAuB7pE,WACjD,OACE,kBAAC4sC,EAAAA,MAAKA,CAACnxC,UAAWJ,GAAOoS,OACvB,kBAACquB,GAAAA,EAAWA,CACVtU,SAAU5nB,EAAMysE,mBAChBpxE,QAAS2E,EAAMwsE,YACfliE,MAAO8gE,EACPzjD,YAAY,oBAIpB,IAvBA,MAAMlsB,GAAS,CACboS,OAAO7Q,EAAAA,EAAAA,KAAI,CACTkI,MAAO,QACP+W,aAAc,IAEhB+R,MAAMhxB,EAAAA,EAAAA,KAAI,CACRqF,OAAQ,a,eCrIL,SAASsqE,KACd,OACE,kBAACjvE,GAAAA,EAASA,KACR,kBAAC9B,MAAAA,KACC,kBAACwI,IAAAA,KACC,kBAAC+9B,SAAAA,KAAO,6CAEV,kBAAC/9B,IAAAA,KAAE,mDACgD,IACjD,kBAACwoE,EAAAA,SAAQA,CAACruE,KAAK,6BAA6BsuE,UAAAA,GAAS,yCAIvD,kBAACzoE,IAAAA,KAAE,sFAIX,CAEO,SAAS0oE,KACd,OACE,kBAACpvE,GAAAA,EAASA,KACR,kBAAC9B,MAAAA,KACC,kBAACwI,IAAAA,KACC,kBAAC+9B,SAAAA,KAAO,mDAAiD4qC,GAAuB,oBAElF,kBAAC3oE,IAAAA,KAAE,UACO,IACR,kBAACwoE,EAAAA,SAAQA,CACPruE,KAAK,wFACLsuE,UAAAA,GACD,iBAEW,IAAI,mBAM1B,C,yHCEO,MAAME,GAAyB,EAE/B,MAAM7C,WAA+BnqE,EAAAA,GAkDlCmH,UAAAA,G,IAKFi+B,EAKWA,EATf,MAAMA,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,I,IAK9BwoB,GAJpB99B,KAAK2lE,UAG+B,QAAhC7nC,EAAAA,EAAa7kC,MAAM4qE,qBAAnB/lC,IAAAA,OAAAA,EAAAA,EAAkC7kC,QACpC+G,KAAK4lE,aAA6C,QAAhC9nC,EAAAA,EAAa7kC,MAAM4qE,qBAAnB/lC,IAAAA,OAAAA,EAAAA,EAAkC7kC,OAItD+G,KAAKkW,MAAMC,IAAoC,QAAhC2nB,EAAAA,EAAa7kC,MAAM4qE,qBAAnB/lC,IAAAA,OAAAA,EAAAA,EAAkC1nB,iBAAiBpW,KAAK4lE,cACzE,CA4BQD,OAAAA,GACN3lE,KAAKN,SAAS,CACZyB,KAAM,IAAI5B,EAAAA,GAAgB,CACxByT,UAAW,SACX1c,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBuoD,QAAS,UACT1kE,KAAM,IAAI2jE,KAEZ,IAAIxnD,EAAAA,GAAc,CAChBnc,KAAM,IAAIuhE,SAKpB,CAEQoD,mBAAAA,CAAoBC,GAC1B,IAAKA,EACH,OAGF,MAAM3D,EAAgBpiE,KAAKgmE,wBAAwBD,GAEnD/lE,KAAKN,SAAS,CACZ0iE,iBAEJ,CAEQ4D,uBAAAA,CAAwBtlC,GAC9B,MAAM5C,EAAejlC,EAAAA,GAAWwE,YAAY2C,KAAMsV,IAC5CkrD,EAAkB3nE,EAAAA,GAAWwE,YAAYygC,EAAcxgC,EAAAA,GAAYrE,MAAM4C,SAE/E,OAAO6kC,EAAUpnC,KAAKonC,I,IAGAA,EAAAA,EAFpB,MAAMqhC,EAAkBvB,aAAAA,EAAAA,EAAiBp8C,MAAM49C,GAAmBA,EAAepoE,UAAY8mC,EAAUhpC,OAEjG83C,EAA4B,QAAd9O,EAAAA,EAAUj9B,YAAVi9B,IAAAA,GAAsB,QAAtBA,EAAAA,EAAgBwpB,cAAhBxpB,IAAAA,OAAAA,EAAAA,EAAwB8O,I,IAGjC9O,EAKX,MAPmC,CACjCA,YACA9mC,QAAuB,QAAd8mC,EAAAA,EAAUhpC,YAAVgpC,IAAAA,EAAAA,EAAkB,GAC3B8O,MACA3U,OAAQknC,aAAAA,EAAAA,EAAiBhmE,KAGR,GAEvB,CAtIA2E,WAAAA,CAAYzH,G,IAGNA,EAFJ0H,M,uUAAM,EACJqd,WACkB,QAAhB/kB,EAAAA,EAAM+kB,kBAAN/kB,IAAAA,EAAAA,EACA,IAAI6jB,EAAAA,GAAiB,CACnB9jB,UAAW,CAAC,IAAI+jB,EAAAA,GAAe,CAAErlB,KAAMssC,EAAAA,GAAoB9C,cAAc,EAAMC,YAAY,OAE/FpB,SAAS,EACTgkC,cAAe,IACZ9qE,IAqDP,QAAQ2sE,gBAAe,CAACvvD,EAA0BmB,K,IAC9BnB,EACCmB,EAEfnB,EASOA,EAKAA,EAjBX,MAAM0f,EAAyB,QAAb1f,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAeqV,OAC3Bu6C,EAAazuD,SAAe,QAAfA,EAAAA,EAAWsT,YAAXtT,IAAAA,OAAAA,EAAAA,EAAiBkU,QAEnB,QAAbrV,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,MACxC72B,KAAKN,SAAS,CACZqgC,SAAS,EACT/9B,OAAO,KAGJmc,EAAAA,EAAAA,GAAe4X,EAAWkwC,IAC7BjmE,KAAK8lE,oBAAoB/vC,KAEL,QAAb1f,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAasvC,QAC/ClmE,KAAKN,SAAS,CACZqgC,SAAS,EACT/9B,OAAO,KAEa,QAAbqU,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAa30B,OAC/CjC,KAAKN,SAAS,CACZqgC,SAAS,EACT/9B,OAAO,GAEX,IAzEAhC,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA4HF,SAAS1L,GAAUoB,GACjB,MAAO,CACLjB,WAAWkB,EAAAA,EAAAA,KAAI,CACbqL,SAAU,EACVpL,QAAS,OACTqL,UAAW,OACXjD,cAAe,WAEjBqkC,SAAS1sC,EAAAA,EAAAA,KAAI,CACXqL,SAAU,EACVpL,QAAS,OACT2sC,WAAY7sC,EAAMmC,QAAQ,KAE5B0F,UAAU5H,EAAAA,EAAAA,KAAI,CACZqL,SAAU,EACVpL,QAAS,OACTqH,WAAY,MACZrF,IAAKlC,EAAMmC,QAAQ,KAErBsuE,eAAexwE,EAAAA,EAAAA,KAAI,CACjBqL,SAAU,EACVpL,QAAS,OACTC,eAAgB,aAElBuwE,cAAczwE,EAAAA,EAAAA,KAAI,CAChBC,QAAS,OACTC,eAAgB,YAChBwwE,aAAc,OACdrnE,MAAO,OACPhB,cAAe,WAEjBsoE,oBAAoB3wE,EAAAA,EAAAA,KAAI,CACtB6F,QAAS9F,EAAMmC,QAAQ,KAG7B,CA5JE,GAjBWgrE,GAiBGnpE,aAAY,EAAGf,YAC3B,MAAM,KAAEwI,EAAI,QAAE4+B,EAAO,gBAAEoC,EAAe,cAAEigC,EAAa,MAAEpgE,GAAUrJ,EAAMI,YAC/DkK,MAAO7D,GAAcvG,EAAAA,GAAWqZ,aAAavZ,GAAOI,WACtD3E,GAASC,EAAAA,EAAAA,YAAWC,IACpBiyE,GAAkBC,EAAAA,EAAAA,YAAWvuD,KAAK7Y,EAAU4Y,GAAI,UAAY0tD,GAElE,OACE,kBAACnxE,MAAAA,CAAIC,UAAWJ,EAAOK,WACrB,kBAAC2tC,EAAAA,EAAkB,CAAEljB,UAAW6gB,EAASoC,oBACrCpC,GAAW/9B,GACX,kBAACzN,MAAAA,CAAIC,UAAWJ,EAAOkyE,oBACrB,kBAAC1pE,EAAAA,KAAIA,CAAC6pE,cAAc,SAASxuE,MAAM,WACjC,kBAAC8E,IAAAA,KAAE,iCACH,kBAACA,IAAAA,KAAE,6CACH,kBAACA,IAAAA,KAAE,uFACH,kBAACA,IAAAA,KAAE,uEACH,kBAACA,IAAAA,KACC,kBAAC2pE,OAAAA,KAAK,uCAMZ1kE,IAAU+9B,GAAqC,KAA1BqiC,aAAAA,EAAAA,EAAelpE,SAAgBqtE,GAAmB,kBAACd,GAAcA,OACtFzjE,IAAU+9B,GAAqC,KAA1BqiC,aAAAA,EAAAA,EAAelpE,UAAiBqtE,GAAmB,kBAACjB,GAAmBA,OAC5FtjE,IAAU+9B,GAAWqiC,GAAiBA,EAAclpE,OAAS,GAC7D,kBAAC3E,MAAAA,CAAIC,UAAWJ,EAAOiuC,SAAUlhC,GAAQ,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,M,4BC1ErE,YAAKwlE,G,+EAAAA,C,CAAL,C,IAaA,MAAMC,GAAuD,CAClE,CACE16C,YAAa,OACbjpB,MAAO7C,EAAAA,GAAUsnB,KACjBH,SAAU,IAiFL,IAAIhoB,EAAAA,GAAgB,CACzByT,UAAW,SACX1c,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAIozD,GAAAA,EAAgB,CAAC,KAE7B,IAAIj3C,EAAAA,GAAc,CAChBrc,UAAW,QACXyT,OAAQ,sBACRvT,KAAM,IAAIuzC,EAAAA,EAAc,CAAC,QAzF7BmyB,OAAQ3xE,EAAAA,EAAQC,sBAAsB2xE,SAExC,CACE56C,YAAa,SACbjpB,MAAO7C,EAAAA,GAAU2nB,OACjBR,SAAU,IA2FL,IAAIhoB,EAAAA,GAAgB,CACzBipB,WAAY,CAAC,IAAIu+C,EAAAA,GAAAA,GAAqB,CAAEvtE,IAAK,OAAQwtE,KAAMC,GAAAA,GAAoBC,aAC/E5wE,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI+yB,EAAAA,EAAoB,CAAC,QA9FnC2yC,OAAQ3xE,EAAAA,EAAQC,sBAAsBgyE,WAExC,CACEj7C,YAAa,SACbjpB,MAAO7C,EAAAA,GAAUuH,OACjB4f,SAAW9iB,IAAM2iE,OAmCoBC,EAnCY5iE,EAoC5C,IAAIlF,EAAAA,GAAgB,CACzBipB,WAAY,CAAC,IAAIu+C,EAAAA,GAAAA,GAAqB,CAAEvtE,IAAK,OAAQwtE,KAAMC,GAAAA,GAAoBC,aAC/E5wE,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAIgzB,EAAAA,GAAqB,CAAE2L,iBAAkBunC,SAL3D,IAAyCA,CAnCc,EACnDR,OAAQ3xE,EAAAA,EAAQC,sBAAsBmyE,WAExC,CACEp7C,YAAa,WACbjpB,MAAO7C,EAAAA,GAAUvE,SACjB0rB,SAAU,IAoBL,IAAIhoB,EAAAA,GAAgB,CACzBjJ,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI0hE,GAAuB,CAAC,QAtBtCgE,OAAQ3xE,EAAAA,EAAQC,sBAAsBoyE,cAG7BC,GAAsD,CACjE,CACEt7C,YAAa,QACbjpB,MAAOilB,EAAAA,GAAWrqB,MAClB0pB,SAAWtkB,GA2Cf,SAA8CA,GAC5C,OAAO,IAAI1D,EAAAA,GAAgB,CACzBipB,WAAY,CAAC,IAAIu+C,EAAAA,GAAAA,GAAqB,CAAEvtE,IAAK,OAAQwtE,KAAMC,GAAAA,GAAoBC,aAC/E5wE,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAI+yB,EAAAA,EAAoB,CAAEjxB,cAIxC,CApDiCwkE,CAAqCxkE,GAClE4jE,OAAQ3xE,EAAAA,EAAQC,sBAAsBgyE,WAExC,CACEj7C,YAAa,QACbjpB,MAAOilB,EAAAA,GAAW1hB,MAClB+gB,SAAWtkB,GA0Bf,SAA8CA,GAC5C,OAAO,IAAI1D,EAAAA,GAAgB,CACzBipB,WAAY,CAAC,IAAIu+C,EAAAA,GAAAA,GAAqB,CAAEvtE,IAAK,OAAQwtE,KAAMC,GAAAA,GAAoBC,aAC/E5wE,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBnc,KAAM,IAAIgzB,EAAAA,GAAqB,CAAElxB,cAIzC,CAnCiCykE,CAAqCzkE,GAClE4jE,OAAQ3xE,EAAAA,EAAQC,sBAAsBmyE,Y,qXChDnC,MAAMK,WAAuBjvE,EAAAA,GAOlCmH,UAAAA,GACE,MACM+nE,EADa/uE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,GAClBrE,MAAM0lB,QACP3oB,KAAzB4xE,aAAAA,EAAAA,EAAY7Q,WACd/2D,KAAKN,SAAS,CACZq3D,SAAU6Q,EAAW7Q,WAIpB/2D,KAAK/G,MAAM4uE,kBACd7nE,KAAKN,SAAS,CACZmoE,iBAAkB,IAAI1P,EAAiB,CAAC,IAG9C,CApBAz3D,WAAAA,CAAYzH,GACV0H,MAAM1H,GAEN+G,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,G,6GAiBA,CAtBW2nE,GAsBGjuE,aAAY,EAAGf,YAC3B,MAAMvE,GAASC,EAAAA,EAAAA,YAAWC,IAC1B,IAAIwzE,GAA2B/nE,EAAAA,EAAAA,MAC3BgoE,GAAmB,EAEvB,IAAK16D,OAAOlL,OAAO/B,EAAAA,IAAW/G,SAASyuE,GAA2B,CAChE,MAAME,GAAqBC,EAAAA,EAAAA,MAC3BF,GAAmB,EACfC,IAAuB9/C,EAAAA,GAAW1hB,QACpCshE,EAA2B1nE,EAAAA,GAAUuH,QAEnCqgE,IAAuB9/C,EAAAA,GAAWrqB,QACpCiqE,EAA2B1nE,EAAAA,GAAU2nB,OAEzC,CAEA,MAAM+V,EAAejlC,EAAAA,GAAWwE,YAAY1E,EAAO2c,IACawoB,EAAAA,EAAa/kC,YAAvE,QAAEgnC,EAAO,MAAE9Q,EAAK,UAAE6kC,EAAS,eAAE+C,GAA6B/4B,EAAV7kC,EAAAA,GAAU6kC,EAAAA,CAAxDiC,UAAS9Q,QAAO6kC,YAAW+C,oBAC7B,SAAEE,GAAap+D,EAAMI,WAErBmvE,EAAgBjvE,EAAMivE,cAE5B,OACE,kBAACC,EAAAA,IAAGA,CAACC,SAAU,GACb,kBAAC7zE,MAAAA,CAAIC,UAAWJ,EAAOo8D,SACrB,kBAAChnB,EAAAA,MAAKA,CAAC5xC,IAAK,GACTe,EAAMM,MAAM4uE,kBACX,kBAAClvE,EAAMM,MAAM4uE,iBAAiBnuE,UAAS,CAACf,MAAOA,EAAMM,MAAM4uE,qBAKjE,kBAACQ,EAAAA,QAAOA,KACLzB,GAA0BttE,KAAI,CAACgvE,EAAK9jD,IAEjC,kBAAC+jD,EAAAA,IAAGA,CACFtzE,cAAaqzE,EAAIzB,OACjBrtE,IAAKgrB,EACL3mB,MAAOyqE,EAAIp8C,YACXpH,OAAQgjD,IAA6BQ,EAAIrlE,MACzCulE,QAASN,EAAcI,EAAIp8C,kBAAel2B,EAAYyyE,GAAWH,EAAKrvE,GACtEmuC,OACEkhC,EAAIp8C,cAAgBy6C,GAASj/C,KACzB,EAAGlzB,eAqDzB,SACEA,EACAk0E,EACA5U,EACAiD,GAEA,MAAM3iE,GAASC,EAAAA,EAAAA,YAAWs0E,IACpBlU,GAAiBC,EAAAA,EAAAA,gBAAe,SAGtC,QAAmB1+D,IAAf0yE,QAA0C1yE,IAAd89D,GAA2BA,EAAYiD,EAAU,C,IAK1EvC,EAJL,MAAMA,EAAiBC,EAAeX,EAAW,GACjD,OACE,kBAACvyC,OAAAA,CAAK/sB,WAAW6K,EAAAA,EAAAA,IAAG7K,EAAWJ,EAAOw0E,kBACnCpU,EAAer8D,KACM,QAArBq8D,EAAAA,EAAeptB,cAAfotB,IAAAA,OAAAA,EAAAA,EAAuBG,OAG9B,CAAO,QAAmB3+D,IAAf0yE,EAA0B,C,IAK9B5R,EAJL,MAAMA,EAAsBrC,EAAeiU,EAAY,GACvD,OACE,kBAACnnD,OAAAA,CAAK/sB,WAAW6K,EAAAA,EAAAA,IAAG7K,EAAWJ,EAAOw0E,kBACnC9R,EAAoB3+D,KACM,QAA1B2+D,EAAAA,EAAoB1vB,cAApB0vB,IAAAA,OAAAA,EAAAA,EAA4BnC,OAGnC,CAEA,OAAO,kBAACpzC,OAAAA,CAAK/sB,WAAW6K,EAAAA,EAAAA,IAAG7K,EAAWJ,EAAOy0E,mBAC/C,CAlFyCC,CAAUt0E,EAAWqiE,EAAgB/C,EAAWiD,QAAAA,EAAYC,EAAAA,SAC/EhhE,EAEN2wB,KAAMuhD,EAAcI,EAAIp8C,aAAe,eAAYl2B,EACnDkB,MAAM6xE,EAAAA,EAAAA,IAAoBT,EAAIrlE,MAAO66B,GACrCkrC,YAAa,MACP,EAAK/lE,OAASqlE,EAAIrlE,QAAU6kE,GAA6BC,KAC3D3rE,EAAAA,EAAAA,IACEC,EAAAA,GAAkBC,gBAClBC,EAAAA,GAAoBD,gBAAgB2sE,oBACpC,CACEC,cAAeZ,EAAIrlE,MACnBkmE,mBAAoBrB,GAG1B,OAIR,IAMV,MAAMW,GAAa,CAACH,EAA8BrvE,KAChD,OAAQqvE,EAAIrlE,OACV,IAAK,SACH,OAAOhK,EAAM8kC,YACf,IAAK,WACH,OAAO9kC,EAAMmwE,cACf,IAAK,SACH,OAAOnwE,EAAMowE,YACf,QACE,OACJ,EAGF,SAAS/0E,GAAUoB,GACjB,MAAO,CACL86D,SAAS76D,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACTC,eAAgB,WAEhB,CAACH,EAAMoI,YAAY6W,GAAGjf,EAAMoI,YAAYqE,OAAOmnE,KAAM,CACnDxxE,SAAU,WACVyxE,MAAO,EACP/qE,OAAQ,KAIhB,CAiCA,SAASmqE,GAAmBjzE,GAC1B,MAAO,CACLmzE,kBAAkBlzE,EAAAA,EAAAA,KAAI,CACpBC,QAAS,eACTyC,SAAU3C,EAAM4C,WAAWC,UAAUF,SACrC++B,SAAU,MACVz/B,WAAYjC,EAAMmC,QAAQ,GAC1B2D,QAAS9F,EAAMmC,QAAQ,IAAM,KAE/B+wE,iBAAiBjzE,EAAAA,EAAAA,KAAI,CACnB0C,SAAU3C,EAAM4C,WAAWC,UAAUF,SACrCwF,MAAO,UACPlG,WAAYjC,EAAMmC,QAAQ,GAC1B/B,aAAcJ,EAAMmC,QAAQ,GAC5BuD,gBAAiB1F,EAAMwC,OAAOuR,OAAOwoC,MACrCz2C,QAAS9F,EAAMmC,QAAQ,IAAM,GAC7BI,MAAOvC,EAAMwC,OAAOC,KAAKC,UACzButB,WAAYjwB,EAAM4C,WAAWstB,mBAGnC,C,qCCpLA,SAAS4jD,GAAiBvmE,EAAe+f,GACvC,MAAMymD,EAA6B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAIhG,OAHKzmD,GACHymD,EAA2BlmE,KAAK,MAE3BN,EACJI,MAAM,IACNlK,QAAO,CAACuwE,EAAMllD,EAAOmlD,KAGpB,MAAMC,EAAWD,EAAYnlD,EAAQ,GAC/BqlD,EAAkBJ,EAA2BpwE,SAASuwE,GAC5D,QAAkB,OAATF,GAAiBG,EAAc,IAEzC/9D,KAAK,GACV,C,g7BC4CO,MAAMg+D,GAAyB,iBACzBC,GAAyB,iBA+B/B,SAAS39B,GAAkBthB,GAChC,OAAOA,aAAAA,EAAAA,EAAMY,OAAOtH,MAAMsH,GAAWA,EAAOxB,QAAU4/C,IACxD,CAEO,SAASz2C,GAAuB5xB,G,IAE9Bq8B,EAAAA,EAAAA,EAAP,OAA6C,QAAtCA,EADcjlC,EAAAA,GAAWwE,YAAYoE,EAAU6T,IAClCrc,MAAM+mC,2BAAnBlC,IAAAA,GAAkD,QAAlDA,EAAAA,EAAwC7kC,MAAM6xB,YAA9CgT,IAAAA,GAA0D,QAA1DA,EAAAA,EAAoDpS,cAApDoS,IAAAA,OAAAA,EAAAA,EAA6D,EACtE,CAEO,SAASpE,GAAuBj4B,G,IAEaq8B,EADlD,MAAMA,EAAejlC,EAAAA,GAAWwE,YAAYoE,EAAU6T,IACtD,OAAOinB,GAAiF,QAAtCuB,EAAAA,EAAa7kC,MAAMglC,2BAAnBH,IAAAA,OAAAA,EAAAA,EAAwC7kC,MAC5F,CAEO,MAAMsjC,GAA8CtjC,I,IAElDA,EAAAA,EAAP,OAAOA,SAAW,QAAXA,EAAAA,EAAO6xB,YAAP7xB,IAAAA,GAAmB,QAAnBA,EAAAA,EAAayyB,cAAbzyB,IAAAA,OAAAA,EAAAA,EAAsB,EAAE,EAGpBwjC,GAA8CxjC,I,IAElDA,EAAAA,EAAAA,EAAAA,EAAP,OAAiB,QAAVA,EAAAA,EAAM6xB,YAAN7xB,IAAAA,GAAkB,QAAlBA,EAAAA,EAAYyyB,cAAZzyB,IAAAA,GAAuB,QAAvBA,EAAAA,EAAqB,UAArBA,IAAAA,GAA+B,QAA/BA,EAAAA,EAAyB0O,cAAzB1O,IAAAA,OAAAA,EAAAA,EAAkC,EAAE,EAGhC0jC,GAAgD1jC,I,IAEpDA,EAAAA,EAAAA,EAAAA,EAAP,OAAiB,QAAVA,EAAAA,EAAM6xB,YAAN7xB,IAAAA,GAAkB,QAAlBA,EAAAA,EAAYyyB,cAAZzyB,IAAAA,GAAuB,QAAvBA,EAAAA,EAAqB,UAArBA,IAAAA,GAA+B,QAA/BA,EAAAA,EAAyB0O,cAAzB1O,IAAAA,OAAAA,EAAAA,EAAkC,EAAE,EAGtC,MAAMqc,WAAqB5c,EAAAA,GAqCxBsxE,4BAAAA,GACN,MAAM5wE,GAAW+d,EAAAA,EAAAA,IAAkBnX,MACG,IAAlC5G,EAASH,MAAM6F,QAAQ5F,OAI3B8G,KAAKkW,MAAMC,IACT/c,EAASgd,kBAAiB,CAACC,EAAUmB,KACH,IAA5BnB,EAASvX,QAAQ5F,QACnB8G,KAAKiqE,kBAIP,IAAI,UAAEvhD,EAAS,WAAEC,EAAU,eAAElT,IAAmB2qB,EAAAA,EAAAA,MAG5C1X,IAAcgb,EAAAA,KAChBhb,EAAYib,EAAAA,IAEd,MAAMvmC,EAAavE,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,GAC1C4sE,EAAiB9sE,EAAWnE,MAAMuc,WAGxC,GACGa,EAASvX,QAAQ6F,MACfF,GAAMA,EAAEjL,MAAQkvB,IAAahkB,EAAAA,GAAAA,IAAoBD,EAAErB,YAAa+mE,EAAAA,GAAAA,IAAa1lE,EAAExB,SAAW0lB,KAmCxF,KAAKxK,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,SAAU,C,IAC/D,EACA,EACA,EACA,EAHwB,QAAxB,EAAAkB,KAAK/G,MAAM4qE,qBAAX,SAA0BvpC,aACI,QAA9B,EAAAt6B,KAAK/G,MAAM+mC,2BAAX,SAAgC1F,aACF,QAA9B,EAAAt6B,KAAK/G,MAAMglC,2BAAX,SAAgC3D,aACX,QAArB,EAAAt6B,KAAK/G,MAAMmxE,kBAAX,SAAuB9vC,YACzB,MAtCE,CACA,MAAMsJ,EAAkBvtB,EAASvX,QAAQslB,MACtC3f,IAAMC,EAAAA,GAAAA,IAAoBD,EAAErB,WAAaqB,EAAExB,QAAU0oC,EAAAA,KAExD,GAAI/H,EAAiB,CACnB,MAAMymC,GAAuBC,EAAAA,EAAAA,IAA4B1mC,EAAgB3gC,QACrEknE,EAAAA,GAAAA,KAAaI,EAAAA,EAAAA,IAAgC3mC,EAAgB3gC,SAC7DknE,EAAAA,GAAAA,IAAavmC,EAAgB3gC,O,IAUxBinE,EACCA,EACGA,EAXb9sE,EAAWsC,SAAS,CAClB8V,WAAY,SACP00D,GAAAA,CACH7iE,OAAQ,SACH6iE,aAAAA,EAAAA,EAAgB7iE,QAAM,CACzBqhB,UAAWkb,EAAgBpqC,MAAQmqC,EAAAA,GAAeD,EAAAA,GAAmBE,EAAgBpqC,IAErFmvB,WAAY0hD,EAAqBhnE,MAAM,KAAK,KAE9CsO,IAAwB,QAAnBu4D,EAAAA,aAAAA,EAAAA,EAAgBv4D,WAAhBu4D,IAAAA,EAAAA,EAAuB,GAC5BppB,KAA0B,QAApBopB,EAAAA,aAAAA,EAAAA,EAAgBppB,YAAhBopB,IAAAA,EAAAA,EAAwB,GAC9BM,QAAgC,QAAvBN,EAAAA,aAAAA,EAAAA,EAAgBM,eAAhBN,IAAAA,GAAAA,MAIblqE,KAAKyqE,gBAEAh1D,GAGHusB,EAAAA,EAAAA,KAAyBimC,EAAAA,EAAAA,MAAyBxyD,EAAgBzV,OAFlE0qE,EAAAA,EAAAA,KAAwB3qE,EAAAA,EAAAA,MAAoBC,KAIhD,MACEA,KAAKiqE,iBAET,CAKA,KA9DFjqE,KAAKiqE,iBAiET,CAEQA,eAAAA,GAENjqE,KAAKN,SAAS,CACZuvB,WAAOj5B,EACPo0E,gBAAYp0E,EACZmL,UAAMnL,EACN6tE,mBAAe7tE,EACfgqC,yBAAqBhqC,EACrBioC,yBAAqBjoC,EACrBozE,mBAAepzE,EACfqzE,iBAAarzE,EACb+nC,iBAAa/nC,EACb89D,eAAW99D,EACX6gE,oBAAgB7gE,KAElB20E,EAAAA,EAAAA,MAAqBC,qBAAqB5qE,KAAK/G,OAC/C+G,KAAKkW,MAAMpD,eAGX2V,EAAAA,EAAAA,KACF,CAEQoiD,aAAAA,GACYhyE,EAAAA,GAAWoc,iBAAiBjV,KAAM6e,GAAAA,GAA2B3e,GAAAA,IACrER,SAAS,CAAEyf,SAAS,KAC9BtI,EAAAA,EAAAA,IAA6B7W,MAAMN,SAAS,CAAE4b,KAAMC,GAAAA,GAAaC,UACnE,CAOA,cACE,MACMviB,GADkB0xE,EAAAA,EAAAA,MACMG,uBAE1B7xE,GACF+G,KAAKN,SAAS,MACTzG,GAGT,CAEQ4G,UAAAA,GAEiBhH,EAAAA,GAAWoc,iBAAiBjV,KAAM8U,EAAAA,EAAwBI,GAAAA,GAClExV,SAAS,CAAEyV,QAAQ,IAClCnV,KAAK6qE,gBACL7qE,KAAK+qE,cACL/qE,KAAKgrE,mBAELhrE,KAAKirE,mBAGLjrE,KAAKs6B,aAGLt6B,KAAKkW,MAAMC,IAAInW,KAAKkrE,4BACpBlrE,KAAKkW,MAAMC,IAAInW,KAAKmrE,kCAGpBnrE,KAAKkW,MAAMC,IAAInW,KAAKorE,gCAA+BrrE,EAAAA,EAAAA,QAAuBK,EAAAA,GAAUuH,SACpF3H,KAAKkW,MAAMC,IAAInW,KAAKqrE,wBACpBrrE,KAAKkW,MAAMC,IAAInW,KAAKsrE,6BAGpBtrE,KAAKgqE,+BACLhqE,KAAKkW,MAAMC,IAAInW,KAAKurE,6BACpBvrE,KAAKkW,MAAMC,IAAInW,KAAKwrE,+BACpBxrE,KAAKkW,MAAMC,IAAInW,KAAKyrE,yCACpBzrE,KAAKkW,MAAMC,IAAInW,KAAK0rE,yCACpB1rE,KAAKkW,MAAMC,IAAInW,KAAK2rE,iCACpB3rE,KAAKkW,MAAMC,IAAInW,KAAK4rE,+BACpB5rE,KAAKkW,MAAMC,IAAInW,KAAK6rE,kCAGpB7rE,KAAKkW,MAAMC,IAAInW,KAAK8rE,wBD5RjB,SAA6BhuC,GAClC,MAAM3jB,EAASiO,EAAAA,QAAQ4xC,qBAEjB+R,EAA4B5xD,EAAO,kBACzC,IAAKnU,MAAMrD,QAAQopE,KAA+BA,EAA0B7yE,OAC1E,OAEF,MAAM8yE,EAAuBD,EAA0B,GACvD,GAAoC,iBAAzBC,IAAsCA,EAC/C,OAGF,MAAM5uE,EAAavE,EAAAA,GAAWwE,YAAYygC,EAAcxgC,EAAAA,GAClD2uE,GAAuB5oD,EAAAA,EAAAA,IAAuBya,GAC9CouC,EAAuBF,aAAAA,EAAAA,EAAsBppD,MAAM,e,IAGvDxlB,EAAAA,EADE8uE,GAAwD,IAAhCA,EAAqBhzE,SAC1B,QAArBkE,EAAAA,EAAWnE,MAAMkI,YAAjB/D,IAAAA,GAA+C,QAA/CA,EAAAA,EAAuBnE,MAAMyE,0BAA7BN,IAAAA,GAAAA,EAAiDyD,sBAAqB,KACpEorE,EAAqBvsE,SAAS,CAC5BZ,QAAS,CACP,CACEtF,IAAKypB,GAAAA,GAAwBD,cAC7B5f,SAAU2e,GAAAA,GAAaa,MACvB3f,MAAOumE,GAAiB0C,EAAqB,IAAI,GACjD3oD,SAAU,OAGd,KAIN,MAAM4oD,EAAyBH,aAAAA,EAAAA,EAAsBppD,MAAM,iB,IAEzDxlB,EAAAA,EADE+uE,GAA4D,IAAlCA,EAAuBjzE,SAC9B,QAArBkE,EAAAA,EAAWnE,MAAMkI,YAAjB/D,IAAAA,GAA+C,QAA/CA,EAAAA,EAAuBnE,MAAMyE,0BAA7BN,IAAAA,GAAAA,EAAiDyD,sBAAqB,KACpEorE,EAAqBn1D,cAAc,CACjC,CACEtd,IAAKypB,GAAAA,GAAwBC,gBAC7B9f,SAAU2e,GAAAA,GAAaa,MACvB3f,MAAOumE,GAAiB2C,EAAuB,IAAI,GACnD5oD,SAAU,MAEZ,KAGN,MAAMvJ,EAAWnI,EAAAA,gBAAgBoI,qBAG1BE,EAAO,kBACdtI,EAAAA,gBAAgBhP,QAAQulB,EAAAA,QAAQC,UAAUrO,EAASkgD,SAAU//C,GAC/D,CC8OIiyD,CAAoBpsE,KACtB,CAEQ4rE,2BAAAA,GACN,OAAOh2D,EAAAA,EAAAA,IAAoB5V,MAAMoW,kBAAiB,CAACC,EAAUmB,K,IAEzD,EACA,EAFEnB,EAASpT,QAAUuU,EAAUvU,QACD,QAA9B,EAAAjD,KAAK/G,MAAMglC,2BAAX,SAAgC3D,aACX,QAArB,EAAAt6B,KAAK/G,MAAMmxE,kBAAX,SAAuB9vC,aACzB,GAEJ,CAEQuxC,8BAAAA,GACN,OAAOxoD,EAAAA,EAAAA,IAAuBrjB,MAAMuW,iBAAiBwI,EAAAA,IAAgC,K,IACnF,EACA,EADqB,QAArB,EAAA/e,KAAK/G,MAAMmxE,kBAAX,SAAuB9vC,aACO,QAA9B,EAAAt6B,KAAK/G,MAAMglC,2BAAX,SAAgC3D,YAAY,GAEhD,CAEQqxC,6BAAAA,GACN,OAAO5mE,EAAAA,EAAAA,IAAsB/E,MAAMoW,kBAAiB,KAClDpW,KAAKiqE,iBAAiB,GAE1B,CAEQQ,aAAAA,GACNzqE,KAAKN,SAAS,CACZq+B,iBAAa/nC,EACbqzE,iBAAarzE,EACbozE,mBAAepzE,KAGjB20E,EAAAA,EAAAA,MAAqBC,qBAAqB5qE,KAAK/G,MACjD,CAEQsyE,yBAAAA,GAEN,OADkBz1D,EAAAA,EAAAA,IAAkB9V,MACnBoW,kBAAiB,CAACC,EAAUmB,K,IAEzC,EACA,GAFG2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,WAChB,QAA9B,EAAAkB,KAAK/G,MAAMglC,2BAAX,SAAgC3D,aACX,QAArB,EAAAt6B,KAAK/G,MAAMmxE,kBAAX,SAAuB9vC,aACzB,GAEJ,CAEQkxC,2BAAAA,GAEN,OADoB70D,EAAAA,EAAAA,IAAoB3W,MACrBoW,kBAAiB,CAACC,EAAUmB,K,IAE3C,EACA,GAFG2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,WAChB,QAA9B,EAAAkB,KAAK/G,MAAMglC,2BAAX,SAAgC3D,aACX,QAArB,EAAAt6B,KAAK/G,MAAMmxE,kBAAX,SAAuB9vC,aACzB,GAEJ,CAMA,wCACE,OAAOrkB,EAAAA,EAAAA,IAAkBjW,MAAMuW,iBAAiBwI,EAAAA,IAAgC,K,IAC9E,EAA8B,QAA9B,EAAA/e,KAAK/G,MAAMglC,2BAAX,SAAgC3D,YAAY,GAEhD,CAMA,wCAEE,OADuBrkB,EAAAA,EAAAA,IAAkBjW,MACnBoW,kBAAiB,CAACC,EAAUmB,K,IAE9C,GADG2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,WACzB,QAArB,EAAAkB,KAAK/G,MAAMmxE,kBAAX,SAAuB9vC,aACzB,GAEJ,CAEQA,UAAAA,GACN,MAAMx6B,GAAOC,EAAAA,EAAAA,MACPssE,GAAapE,EAAAA,EAAAA,M,IAIjB,EAKA,EAKA,EAGA,EAdEnoE,IAASM,EAAAA,GAAUvE,eAAyC7F,IAA7BgK,KAAK/G,MAAMmwE,gBACpB,QAAxB,EAAAppE,KAAK/G,MAAM4qE,qBAAX,SAA0BvpC,cAIxBx6B,IAASM,EAAAA,GAAU2nB,QAAUskD,IAAenkD,EAAAA,GAAWrqB,YAAoC7H,IAA3BgK,KAAK/G,MAAMowE,cAC/C,QAA9B,EAAArpE,KAAK/G,MAAM+mC,2BAAX,SAAgC1F,cAI9Bx6B,IAASM,EAAAA,GAAUuH,QAAU0kE,IAAenkD,EAAAA,GAAW1hB,YAAoCxQ,IAA3BgK,KAAK/G,MAAM8kC,cAC/C,QAA9B,EAAA/9B,KAAK/G,MAAMglC,2BAAX,SAAgC3D,mBAELtkC,IAAzBgK,KAAK/G,MAAM66D,YACQ,QAArB,EAAA9zD,KAAK/G,MAAMmxE,kBAAX,SAAuB9vC,aAE3B,CAEQ4wC,wBAAAA,G,IACC,EAAP,OAA+B,QAAxB,EAAAlrE,KAAK/G,MAAM4qE,qBAAX,eAA0BztD,kBAAkBC,I,IAE7CA,EAAJ,GADArW,KAAKssE,mBAAmBj2D,EAAUswD,GAAS9qE,WAC1B,QAAbwa,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KAAM,CAC9C,MAAM01C,EAAmBl2D,EAASyU,KAAKY,YACN11B,KAA7Bu2E,aAAAA,EAAAA,EAAkBrzE,UAEpB8G,KAAKN,SAAS,CACZ0pE,cAAemD,EAAiBrzE,UAElCyxE,EAAAA,EAAAA,MAAqB6B,iBAAiBD,EAAiBrzE,QAE3D,IAEJ,CAEQiyE,8BAAAA,G,IACC,EAAP,OAAqC,QAA9B,EAAAnrE,KAAK/G,MAAM+mC,2BAAX,eAAgC5pB,kBAAkBC,I,IAEnDA,EAAJ,GADArW,KAAKssE,mBAAmBj2D,EAAUswD,GAAS5+C,SAC1B,QAAb1R,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KAAM,CAC9C,MAAM41C,EAAyBp2D,EAASyU,KAElC4hD,EAAuBD,EAAuB/gD,OAAO,GAAG/jB,OAC9D,QAA6C3R,IAAzCy2E,EAAuB/gD,OAAOxyB,aAAwDlD,IAAhC02E,EAAqBxzE,OAAsB,CACnG,MAAMyzE,EAAsBF,EAAuB/gD,OAAO,GAAG/jB,OAAOxO,QACjEsL,GAAMgC,EAAAA,KAAyBhC,EAAE/M,OAGpCsI,KAAKN,SAAS,CACZ2pE,YAAasD,EAAoBzzE,OAAS,KAE5CyxE,EAAAA,EAAAA,MAAqBiC,eAAeF,EAAqBxzE,OAC3D,CACF,IAEJ,CAEQozE,kBAAAA,CAAmBj2D,EAA0B7c,G,IAE9B6c,EADrB,MAAM6xD,EAAgBloE,KAAK/G,MAAMivE,cACjCA,EAAc1uE,IAAoB,QAAb6c,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAasvC,QAE3D,MAAMnmC,EAAU1yB,OAAOlL,OAAO+lE,GAAevjE,MAAMrB,GAAMA,IACzDtD,KAAKN,SAAS,CAAEqgC,UAASmoC,iBAC3B,CAEQmD,oBAAAA,G,IACC,EAAP,OAAuB,QAAhB,EAAArrE,KAAK/G,MAAMg2B,aAAX,eAAkB7Y,kBAAiB,CAACC,EAAUmB,K,IAE/CnB,EAA8CA,EAAlD,GADArW,KAAKssE,mBAAmBj2D,EAAUswD,GAASj/C,OAC1B,QAAbrR,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,OAAqB,QAAbxgB,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaE,UAAW,C,IAC7EzgB,EAAAA,EAApB,MAAMykC,EAA6C,QAA/BzkC,EAAuB,QAAvBA,EAAAA,EAASyU,KAAKY,OAAO,UAArBrV,IAAAA,OAAAA,EAAAA,EAAyBnd,cAAzBmd,IAAAA,EAAAA,EAAmC,EACnDykC,IAAgB96C,KAAK/G,MAAM66D,WAC7B9zD,KAAKN,SAAS,CACZo0D,UAAWhZ,GAGjB,IAEJ,CAEQwwB,yBAAAA,G,IACC,EAAP,OAA4B,QAArB,EAAAtrE,KAAK/G,MAAMmxE,kBAAX,eAAuBh0D,kBAAkBC,I,IAC1CA,EAAJ,IAAiB,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KAAM,C,IACZxgB,EAAAA,EAAAA,EAAAA,EAAlC,MAAMpT,EAAmD,QAAvBoT,EAAAA,EAASyU,KAAKY,OAAO,UAArBrV,IAAAA,GAA+B,QAA/BA,EAAAA,EAAyB1O,cAAzB0O,IAAAA,GAAoC,QAApCA,EAAAA,EAAkC,UAAlCA,IAAAA,GAA4C,QAA5CA,EAAAA,EAAsClU,cAAtCkU,IAAAA,OAAAA,EAAAA,EAA+C,GACjFrW,KAAKN,SAAS,CACZm3D,eAAgB5zD,GAEpB,IAEJ,CAEQmoE,8BAAAA,CAA+ByB,G,IAC9B,EAAP,OAAqC,QAA9B,EAAA7sE,KAAK/G,MAAMglC,2BAAX,eAAgC7nB,kBAAkBC,I,IAE9BA,EAAzB,GADArW,KAAKssE,mBAAmBj2D,EAAUswD,GAASh/D,QACvCklE,IAAkC,QAAbx2D,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KAAM,CACnE,MACMi2C,EADyBz2D,EAASyU,KACYY,OAAO,QAE9B11B,IAAzB82E,GAAsCA,EAAqB5zE,SAAW8G,KAAK/G,MAAM8kC,cACnF/9B,KAAKN,SAAS,CACZq+B,YAAa+uC,EAAqB5zE,UAEpCyxE,EAAAA,EAAAA,MAAqBoC,eAAeD,EAAqB5zE,QAE7D,IAEJ,CAEQ4yE,oBAAAA,GACN,OAAOjzE,EAAAA,GAAWqZ,aAAalS,MAAMoW,kBAAiB,K,IACpD,EACA,EACA,EACA,EAHwB,QAAxB,EAAApW,KAAK/G,MAAM4qE,qBAAX,SAA0BvpC,aACI,QAA9B,EAAAt6B,KAAK/G,MAAM+mC,2BAAX,SAAgC1F,aACF,QAA9B,EAAAt6B,KAAK/G,MAAMglC,2BAAX,SAAgC3D,aACX,QAArB,EAAAt6B,KAAK/G,MAAMmxE,kBAAX,SAAuB9vC,YAAY,GAEvC,CAEQ0wC,gBAAAA,GACN,IAAIj2D,EAA0C,CAAC,EAE1C/U,KAAK/G,MAAMg2B,QACdla,EAAYka,MAAQ+9C,MAGjBhtE,KAAK/G,MAAM4qE,gBACd9uD,EAAY8uD,cAAgBoJ,MAGzBjtE,KAAK/G,MAAM+mC,sBACdjrB,EAAYirB,oBAAsBktC,MAG/BltE,KAAK/G,MAAMglC,sBACdlpB,EAAYkpB,oBAAsBkvC,MAG/BntE,KAAK/G,MAAMmxE,aACdr1D,EAAYq1D,WAAagD,MAGtBptE,KAAK/G,MAAMkI,OACd4T,EAAY5T,KAAOksE,MAGjBhgE,OAAOrD,KAAK+K,GAAa7b,QAC3B8G,KAAKN,SAASqV,EAElB,CAEOk2D,gBAAAA,GACL,MAAM,KAAE9pE,GAASnB,KAAK/G,MAChBq0E,GAAgBvtE,EAAAA,EAAAA,MAChBwtE,EAAmB3G,GAA0BxiD,MAAM9gB,GAAMA,EAAEL,QAAUqqE,IAE3E,IAAKnsE,EAAM,CACT,MAAMy5B,EAAM,IAAI34B,MAAM,4CAEtB,MADAZ,EAAAA,EAAOW,MAAM44B,EAAK,CAAE52B,IAAK,wCACnB42B,CACR,CAEA,GAAI2yC,EACFpsE,EAAKzB,SAAS,CACZpJ,SAAU,IACL6K,EAAKlI,MAAM3C,SAAS8W,MAAM,EAAG,GAChCmgE,EAAiBhmD,UAAUruB,IACM,WAA3Bq0E,EAAiBtqE,OACnBjD,KAAKN,SAAS,CAAEq+B,YAAa7kC,GAC/B,WAID,CACL,MAAMs0E,GAAqBvF,EAAAA,EAAAA,MACrBwF,EAAwBjG,GAAoBpjD,MAAM9gB,GAAMA,EAAEL,QAAUuqE,IAEtEC,GAAyBztE,KAAK/G,MAAMmc,eACtCjU,EAAKzB,SAAS,CACZpJ,SAAU,IAAI6K,EAAKlI,MAAM3C,SAAS8W,MAAM,EAAG,GAAIqgE,EAAsBlmD,SAASvnB,KAAK/G,MAAMmc,mBAG3F/T,EAAAA,EAAOW,MAAM,IAAIC,MAAM,8BAA+B,CAAE+B,IAAK,0BAEjE,CACF,CA7bA,YACE/K,G,IAmBQA,EARR0H,MAAM,IACJunE,cAAe,CACb,CAACvB,GAAS9qE,WAAW,EACrB,CAAC8qE,GAAS5+C,SAAS,EACnB,CAAC4+C,GAASh/D,SAAS,EACnB,CAACg/D,GAASj/C,OAAO,GAEnBqY,SAAS,EACT5+B,KAAgB,QAAVlI,EAAAA,EAAMkI,YAANlI,IAAAA,EAAAA,EAAco0E,KACpBp+C,MAAO+9C,KACPnJ,cAAeoJ,KACfjtC,oBAAqBktC,KACrBjvC,oBAAqBkvC,KACrB/C,WAAYgD,MACTn0E,IA9BP,QAAUooC,sBAAsB,IAAIC,EAAAA,GAAyBthC,KAAM,CACjEuhC,cAAe,CAAC7kB,EAAAA,GAAgBzB,EAAAA,GAAYjF,EAAAA,GAAYgH,EAAAA,GAAcpa,EAAAA,OAgCtE5C,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA2aF,SAASqtE,KACP,OAAO,IAAI9tE,EAAAA,GAAgB,CACzByT,UAAW,SACX1c,SAAU,CACR,IAAIgnB,EAAAA,GAAc,CAChBuoD,QAAS,UACT1kE,KAAM,IAAIwmE,GAAe,CAAC,OAIlC,CAEA,SAASsF,KACP,OAAOS,EAAAA,EAAAA,IAAuB,EAC5BC,EAAAA,EAAAA,IAAmB,IAAIC,EAAAA,MAAoB,WAAY,CAAE1jD,MAvhBhC,cAyhB7B,CAEA,SAASgjD,KACP,OAAOQ,EAAAA,EAAAA,IAAuB,EAC5BC,EAAAA,EAAAA,IAAmB,IAAIC,EAAAA,MAAoB,kBAAmB,CAAE1jD,MA5hBhC,oBA8hBpC,CAEA,SAASijD,KACP,OAAOO,EAAAA,EAAAA,IAAuB,EAC5BC,EAAAA,EAAAA,IAAmBnP,EAAAA,GAA0B,kBAAmB,CAAEt0C,MAjiBlC,oBAmiBpC,CAEA,SAAS8iD,KACP,OAAO1zC,EAAAA,EAAAA,IAAe,EAACU,EAAAA,EAAAA,GAAewkC,EAAAA,GAA0B,CAAEt0C,MAAO4/C,MAC3E,CAEA,SAASsD,KACP,MAAMpiD,GAAcsO,EAAAA,EAAAA,IAClB,EACEU,EAAAA,EAAAA,GAAe,uBAAuBwkC,EAAAA,gBAAuC,CAC3Et0C,MAAO6/C,GACP8D,UAAW,aAGf,CAAEt0C,eAAgB,WAGpB,GAAIvO,aAAuBE,EAAAA,GACzB,OAAOF,EAET,MAAMhpB,EAAQ,IAAIC,MAAM,iDAExB,MADAZ,EAAAA,EAAOW,MAAMA,EAAO,CAAEgC,IAAK,gDACrBhC,CACR,CA7DE,GApcWsT,GAocJ5b,aAAY,EAAGf,YACpB,MAAM,KAAEwI,GAASxI,EAAMI,WACvB,OAAIoI,EACK,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,IAGzB,kBAACyd,EAAAA,mBAAkBA,CAACzmB,KAAM,c,kHC3jB9B,MAAM21E,UAAyCp1E,EAAAA,GA2B7Cq1E,QAAAA,CAAS97B,GACdjyC,KAAKN,SAAS,CACZuyC,SAEJ,CAEOj9C,OAAAA,CAAQg5E,GACTA,GACFC,EAAAA,EAAAA,IAAoBjuE,KAAK/G,MAAMyvB,UAAW1oB,KAAK/G,MAAM0vB,WAAY3oB,OAEjEgzB,EAAAA,EAAAA,IAAehzB,KAAK/G,MAAMyvB,UAAW1oB,KAAK/G,MAAM0vB,WAAY3oB,KAEhE,E,EAtC0B,EAAGrH,YAC3B,MAAM,GAAEgmB,EAAE,WAAEgK,EAAU,UAAED,EAAS,MAAEupB,GAAUt5C,EAAMI,WAC7Ci1E,GAAa5oE,EAAAA,EAAAA,IAAkCuZ,EAAI+J,GAAWrvB,SAASsvB,GACvEv0B,GAASC,EAAAA,EAAAA,aAAYqB,IAuCtB,CACL6B,SAAS5B,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACToI,cAAe,SACfnI,eAAgB,SAChBmC,UAAW,eA3CPk2E,EAAcF,EAAa,WAAWrlD,mBAA8B,OAAOA,iBAEjF,OACE,kBAACpH,OAAAA,CAAK/sB,UAAWJ,EAAOmD,SACtB,kBAACmvB,EAAAA,cAAaA,CACZynD,YAAa,KACXx1E,EAAMo1E,UAAS,EAAK,EAEtBnuB,WAAY,KACVjnD,EAAMo1E,UAAS,EAAM,EAEvBpnD,KAAM,kBAAClvB,EAAAA,KAAIA,CAACC,KAAMs2E,EAAa,WAAa,OAAQn5E,KAAK,KAAKkH,KAAMiyE,EAAa,OAAS,YAC1F/1E,MAAO+1E,EAAa,oBAAsB,OAC1Ch5E,QAAS,IAAM2D,EAAM3D,QAAQg5E,GAC7Bt2E,KAAM,OACNyC,aAAY+zE,EACZrsD,QAASqsD,I,KApBHx0E,e,EADHo0E,G,8YCKN,MAAMM,UAA4B11E,EAAAA,GAMvCmH,UAAAA,GACE,MAAMqX,GAAYC,EAAAA,EAAAA,IAAkBnX,MACpCA,KAAKN,SAAS,CAAEyV,OAAQ+B,EAAUje,MAAM6F,QAAQ5F,OAAS,IACzDge,EAAUd,kBAAkBC,IAC1BrW,KAAKN,SAAS,CAAEyV,OAAQkB,EAASvX,QAAQ5F,OAAS,GAAI,GAE1D,CAXAwH,WAAAA,CAAYzH,GACV0H,MAAM1H,GAYR,OAAOirB,WAAU,KACf,GAAKlkB,KAAK/G,MAAM0vB,WAIhB,OAAO0lD,EAAsBruE,KAAK/G,MAAMyvB,UAAW1oB,KAAK/G,MAAM0vB,WAAY3oB,KAAK,IAGjF,OAAOhL,WAAU,KACfs5E,EAAYtuE,KAAK/G,MAAMyvB,UAAW1oB,KAAK/G,MAAM0vB,WAAY3oB,KAAK,IAnB9DA,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAoDF,SAASsuE,EAAYC,EAA0BC,EAA2B/sE,IACxErF,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkB4oB,kBAAmB1oB,EAAAA,GAAoB0oB,kBAAkBwpD,iBAAkB,CAChHxrE,MAAOurE,EACP3wE,MAAO0wE,KAGTv7C,EAAAA,EAAAA,IAAeu7C,EAAkBC,EAAmB/sE,EACtD,CAKO,SAAS4sE,EAAsBE,EAA0BC,EAA2B/sE,G,IAuBvBitE,EAtBlE,MAAMt1E,GAAW+d,EAAAA,EAAAA,IAAkB1V,GAM7B3C,EAAU,IAJQ1F,EAASH,MAAM6F,QAAQ3F,QAC5CsL,KAAQA,EAAEjL,MAAQ+0E,GAAoB9pE,EAAExB,QAAUurE,KAKnD,CACEh1E,IAAK+0E,EACLnrE,SAAU6B,EAAAA,GAASC,MACnBjC,MAAOurE,IAIPD,IAAqB5qC,EAAAA,KACvB4qC,EAAmB7qC,EAAAA,IAGrB,MAAMgrC,EAAYt1E,EAAS41B,MAAM,CAAElwB,YAGnC,OAAOulB,EAAAA,EAAAA,IAAsBkqD,EAAkBC,EAAoC,QAAjBE,EAAAA,EAAUC,eAAVD,IAAAA,OAAAA,EAAAA,EAAmBl0D,cACvF,CAWA,SAASlmB,EAAUoB,GACjB,MAAO,CACL4uB,QAAQ3uB,EAAAA,EAAAA,KAAI,CACVqC,UAAW,WAGjB,CApFE,EA1BWo2E,EA0BG10E,aAAY,EAAGf,YAC3B,MAAMvE,GAASC,EAAAA,EAAAA,YAAWC,IACX6iB,EAAAA,EAAAA,IAAkBxe,GAE1BI,WACP,MAAM,OAAEoc,GAAWxc,EAAMI,WACzB,GAAIoc,EACF,OAAO,KAET,MAAM3c,EAAOG,EAAMurB,UACnB,OACE,kBAACK,EAAAA,WAAUA,CACTtvB,cAAaC,EAAAA,EAAQsvB,MAAMoqD,oBAC3B/sD,QAAS,iBAAiBlpB,EAAMM,MAAM0vB,aACtCn0B,UAAWJ,EAAOkwB,OAClB3vB,QAAS,UACTC,KAAM,UACNC,KAAK,KACL0oB,UAAW/kB,EACXtB,KAAMyB,EAAMurB,UACZlvB,QAAS2D,EAAM3D,SAChB,gB,kCC/DA,MAAM65E,EAAuB,IAEhC,kBAACx4E,EAAAA,EAASA,KACR,kBAAC0G,IAAAA,KAAE,uCACH,kBAACA,IAAAA,KACC,kBAACwoE,EAAAA,SAAQA,CAACruE,KAAK,uEAAuEsuE,UAAAA,GAAS,sDAIjG,kBAAC5oE,EAAAA,KAAIA,CAAC6pE,cAAc,QAClB,kBAACpjB,MAAAA,KACC,kBAACqjB,OAAAA,KAAK,iBAEJ,kBAACtvE,KAAAA,MAAK,6BCdL03E,EAAyB,IAElC,kBAACz4E,EAAAA,EAASA,KACR,kBAAC0G,IAAAA,KAAE,oC,8pBCIF,MAAMgyE,UAAwBr2E,EAAAA,IACnC,EADWq2E,EACGr1E,aAAY,EAAGf,YAC3B,MAAMq2E,EAAwBn2E,EAAAA,GAAWwE,YAAY1E,EAAO0c,IACtD45D,EAA4Bp2E,EAAAA,GAAWwE,YAAY1E,EAAOu2E,IAC1D,WAAEC,EAAU,YAAEjjC,GAAgB+iC,EAA0Bl2E,WACxDmwC,GAAgB70C,EAAAA,EAAAA,YAAW80C,GAE3BimC,EAAkCD,EAAW71E,KAAKmmB,GAC/C,E,sUAAA,IACFA,GAAAA,CACHkH,KAAMlH,EAAI4vD,MAAQ,YAASr5E,EAC3B6H,MAAO,GAAG4hB,EAAI5hB,YAIlB,OACE,kBAAC2rC,EAAAA,MAAKA,CAACx2B,UAAU,SAASpb,IAAK,EAAG6xC,KAAK,WACrC,kBAACl1C,MAAAA,CAAIC,UAAW00C,EAAcQ,KAAKvoC,MACjC,kBAACy2B,EAAAA,OAAMA,CACLlX,kBAAkB,EAClB1hB,MAAO,GACP0vC,OAAQ,KACNugC,EAA0BK,mBAAmB,EAE/C/kC,WAAW,EACXzsB,OAAQouB,EACR5rB,YAAa,gBACbje,QAAS+sE,EACTj/B,cAAc,EACdrvB,iBAAiB,EACjBP,SAAWpY,IAELA,EAAOlF,QAETgsE,EAA0BK,oBAE1BN,EAAsBO,eAAepnE,EAAOlF,OAC9C,K,IASd,MAAMkmC,EAAoBzzC,IAA0B,CAClDg0C,KAAM,CACJvoC,MAAMxL,EAAAA,EAAAA,KAAI,CACR6F,QAAS9F,EAAMmC,QAAQ,KAEzBkF,GAAGpH,EAAAA,EAAAA,KAAI,CACLuL,SAAU,S,w4BC3BT,MAAMguE,UAAkCx2E,EAAAA,GA+J7C82E,6BAAAA,CAA8Bv2E,EAAQ,M,IAAA,E,OAAsB,QAAtB,EAAA+G,KAAK/G,MAAMw2E,mBAAX,eAAwBx2E,K,EAAxB,I,IAC7BA,EAAP,OAAiB,QAAVA,EAAAA,EAAM6xB,YAAN7xB,IAAAA,OAAAA,EAAAA,EAAYyyB,OAAO,GAAG/jB,OAAOrO,KAAKmL,IAChC,CACL5G,MAAO4G,EAAE/M,KACTkmC,YAAan5B,EAAEtC,OAAO,MAG5B,CAEOutE,oCAAAA,CAAqC3nD,GAC1C,MACM4nD,EADwB92E,EAAAA,GAAWwE,YAAY2C,KAAMqV,IACjBu6D,iBACpCC,GAAYC,EAAAA,EAAAA,KAA2B/qE,EAAAA,EAAAA,IAAsB/E,MAAMqF,WAAWC,YAE9E6pE,EAA0BpnD,EAC7BzuB,KAAKqmC,IACJ,MAAMowC,EAAaF,EAAUxgE,QAAQswB,EAAE9hC,OAQvC,MAP0B,CACxBA,MAAO8hC,EAAE9hC,QAAU8lC,EAAAA,GAAeD,EAAAA,GAAmB/D,EAAE9hC,MACvDoF,MAAO08B,EAAE9hC,MACTinB,OAAQ6qD,IAAgBhwC,EAAE9hC,MAC1BwxE,OAAuB,IAAhBU,EACPA,aAEW,IAEdtqE,MAAK,CAACzO,EAAG0O,IAEJ1O,EAAEiM,QAAU0gC,EAAAA,IAAgBj+B,EAAEzC,QAAU0gC,EAAAA,GACnC3sC,EAAEiM,QAAU0gC,EAAAA,IAAgB,EAAI,EAIlC3sC,EAAE6G,MAAQ6H,EAAE7H,OAAS,EAAI7G,EAAE6G,MAAQ6H,EAAE7H,MAAQ,EAAI,IAE5DmC,KAAKN,SAAS,CACZyvE,cAEJ,CAEQa,iBAAAA,GACNhwE,KAAK/G,MAAMw2E,YAAYn1C,YACzB,CAEQ21C,qBAAAA,GAENjwE,KAAKkW,MAAMC,IACTtd,EAAAA,GAAWqZ,aAAalS,MAAMoW,kBAAiB,KAC7CpW,KAAKgwE,mBAAmB,KAK5BhwE,KAAKkW,MAAMC,KACTpR,EAAAA,EAAAA,IAAsB/E,MAAMoW,kBAAiB,KAC3CpW,KAAKgwE,mBAAmB,IAG9B,CAEQnwE,UAAAA,GAENG,KAAKgwE,oBAELhwE,KAAKN,SAAS,CACZ2lB,QAAS,IAAI0pD,EAAgB,CAAC,KAGhC/uE,KAAKiwE,wBAGLjwE,KAAKkW,MAAMC,KACTpR,EAAAA,EAAAA,IAAsB/E,MAAMoW,kBAAiB,KAC3CpW,KAAK/G,MAAMw2E,YAAYn1C,YAAY,KAIvCt6B,KAAKkW,MAAMC,KACT+5D,EAAAA,EAAAA,IAAgClwE,MAAMoW,kBAAiB,K,IACH,EAAlD,MAAM2R,EAAS/nB,KAAKwvE,8BAAoD,QAAtB,EAAAxvE,KAAK/G,MAAMw2E,mBAAX,eAAwBx2E,OACtE8uB,GACF/nB,KAAK0vE,qCAAqC3nD,EAC5C,KAIJ/nB,KAAKkW,MAAMC,IACTnW,KAAK/G,MAAMw2E,YAAYr5D,kBAAkBC,I,IACnCA,EAAJ,IAAiB,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,KAAM,CAC9C,MAAM9O,EAAS/nB,KAAKwvE,8BAA8Bn5D,GAC5C24D,EAAwBn2E,EAAAA,GAAWwE,YAAY2C,KAAMqV,IAEvD0S,GACF/nB,KAAK0vE,qCAAqC3nD,GAG5C,MAAM4nD,EAAcX,EAAsBY,kBAErC7nD,aAAAA,EAAAA,EAAQpjB,MAAM9G,GAAUA,EAAMA,QAAU8xE,MAC3CX,EAAsBmB,uBAE1B,KAGN,CAtQAzvE,WAAAA,CAAYzH,GACV0H,MAAM,GACJurC,aAAa,EACbujC,aAAar1C,EAAAA,EAAAA,IAAoB,CAC/BnQ,QAAS,EAAC0jD,EAAAA,EAAAA,IAAmB,GAAI,oBACjCp0C,eAAgB,WAElB41C,WAAY,CACV,CACEtxE,MAAO6lC,EAAAA,GACPzgC,MAAO0gC,EAAAA,GACP0rC,OAAO,KAGRp2E,IA2HPm3E,EAAAA,KAAAA,kBAAkB1nD,KAChB2nD,EAAAA,EAAAA,KAA0BtrE,EAAAA,EAAAA,IAAsB/E,MAAMqF,WAAWC,WAAYojB,GAE7E,MAAMX,EAAS/nB,KAAKwvE,gCAChBznD,GACF/nB,KAAK0vE,qCAAqC3nD,GAI5C,MAAMinD,EAAwBn2E,EAAAA,GAAWwE,YAAY2C,KAAMqV,IACvD25D,EAAsBY,mBAAqBlnD,GAC7CsmD,EAAsBmB,uBACxB,IAGFb,EAAAA,KAAAA,qBAAoB,KAClBtvE,KAAKN,SAAS,CACZwsC,aAAclsC,KAAK/G,MAAMizC,aACzB,IA1IFlsC,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAEA,EArBWkvE,EAqBGx1E,aAAY,EAAGf,YAE3B,MAAM,WAAEw2E,EAAU,YAAEjjC,EAAW,QAAE7mB,EAAO,YAAEoqD,GAAgB92E,EAAMI,YAC1D,KAAE+xB,GAAS2kD,EAAY12E,WACvBi2E,EAAwBn2E,EAAAA,GAAWwE,YAAY1E,EAAO0c,KACvC66D,EAAAA,EAAAA,IAAgCv3E,GAExCI,WAGb,MAAM3E,GAASC,EAAAA,EAAAA,YAAWi8E,GACpBrjC,GAAaC,EAAAA,EAAAA,QAAoB,MAGvC,OACE,kBAACm7B,EAAAA,QAAOA,CAAC7zE,UAAWJ,EAAOm8E,MACxBpB,EACEh2E,QAAQq3E,GAAaA,EAASnB,OAASmB,EAAS1rD,QAAU0rD,EAASvtE,QAAU0gC,EAAAA,KAC7El+B,MAAK,CAACzO,EAAG0O,KAER,OAAI1O,EAAEiM,QAAU0gC,EAAAA,IAAgBj+B,EAAEzC,QAAU0gC,EAAAA,GACnC3sC,EAAEiM,QAAU0gC,EAAAA,IAAgB,EAAI,GAIrB,QAAZ3sC,EAAAA,EAAE+4E,kBAAF/4E,IAAAA,EAAAA,EAAgB,IAAkB,QAAZ0O,EAAAA,EAAEqqE,kBAAFrqE,IAAAA,EAAAA,EAAgB,G,IAAtC1O,EAAsB0O,CAAkB,IAEjDpM,KAAKk3E,IACJ,MAAMlI,EACJ,kBAACC,EAAAA,IAAGA,CACF/uE,IAAKg3E,EAASvtE,MACd+lE,YAAa,KAEXgG,EAAsBO,eAAeiB,EAASvtE,MAAM,EAEtDpF,OAAO4yE,EAAAA,EAAAA,IAAaD,EAAS3yE,MAvBlB,IAuByC,GACpDinB,OAAQ0rD,EAAS1rD,OACjBsiB,OACEopC,EAASvtE,QAAU0gC,EAAAA,GACdhwC,GAEG,oCACE,kBAAC49C,EAAAA,QAAOA,CAAClP,QAAS,cAChB,kBAAC5qC,EAAAA,KAAIA,CACH6yC,iBAAmBrmC,IACH,UAAVA,EAAEzK,KACJb,EAAMy3E,eAAeI,EAASvtE,MAChC,EAEFjO,QAAUiP,IAERA,EAAEyI,kBACF/T,EAAMy3E,eAAeI,EAASvtE,MAAM,EAEtCvL,KAAM,QACNlD,WAAW6K,EAAAA,EAAAA,IAAG1L,EAAMa,oBAM9BwB,IAKV,OAAIw6E,EAAS3yE,MAAM3E,OAtDJ,GAwDX,kBAACq4C,EAAAA,QAAOA,CAAC/3C,IAAKg3E,EAASvtE,MAAOo/B,QAASmuC,EAAS3yE,OAC7CyqE,GAIEA,CACT,KAEHx9C,aAAAA,EAAAA,EAAM7xB,SAAU29B,EAAAA,aAAasvC,SAAW,kBAACqC,EAAAA,IAAGA,CAAC1qE,MAAO,eAAgB8oB,KAAM,aAG1EmE,aAAAA,EAAAA,EAAM7xB,SAAU29B,EAAAA,aAAaC,MAC5B,kBAACtV,OAAAA,CAAK/sB,UAAWJ,EAAOs8E,QACtB,kBAACnI,EAAAA,IAAGA,CAACS,YAAarwE,EAAM22E,kBAAmBzxE,MAAO,YAAaowC,IAAKhB,EAAYtmB,KAAM,iBAIzFtB,GACC,kBAACgpB,EAAAA,kBAAiBA,CAAChM,QAAS,kBAAChd,EAAQ3rB,UAAS,CAACf,MAAO0sB,MACnD,CAACipB,EAAYC,EAAYC,KACxB,MAAMC,EAAiB,CACrBC,OAAQH,EACR9tB,QAAS6tB,GAGX,OACE,oCACGrB,EAAW0B,SACV,oCACE,kBAACC,EAAAA,QAAOA,EAAAA,EAAAA,EAAAA,CAAAA,EACFJ,EACAnH,EAAAA,MAAIA,CACRwH,KAAM3C,EACN4C,iBAAkB16C,EAAOixB,QACzB0pB,iBAAkB9B,EAAW0B,QAC7BK,aAAa,IACTP,KAAAA,IAMhB,IAuIZ,MAAM6hC,EAAiB56E,IAA0B,CAC/C66E,MAAM56E,EAAAA,EAAAA,KAAI,CACRwoD,UAAW,WAEbuyB,QAAQ/6E,EAAAA,EAAAA,KAAI,CACVkI,MAAO,gBACP5F,MAAOvC,EAAMwC,OAAOotB,QAAQntB,KAC5B,WAAY,CACVF,MAAOvC,EAAMwC,OAAOotB,QAAQntB,QAGhCktB,SAAS1vB,EAAAA,EAAAA,KAAI,CACXG,aAAcJ,EAAMO,MAAMC,OAAOC,QACjCuI,UAAWhJ,EAAMiJ,QAAQ4mB,GACzBjnB,WAAY5I,EAAMwC,OAAOoG,WAAWgnB,QACpChqB,OAAQ,aAAa5F,EAAMwC,OAAOoD,OAAOkqB,W,aCzTtC,MAAMmrD,EAAmBh9E,GAE5B,kBAAC0C,EAAAA,EAASA,KACR,kBAAC0G,IAAAA,KAAE,oBACgB,kBAAC+9B,SAAAA,KAAQnnC,EAAM+0B,WAAmB,IAAC,kBAACtxB,KAAAA,MAAK,sD,g6BCU3D,MAAMw5E,UAA2Cl4E,EAAAA,GAUtDmH,UAAAA,GACEG,KAAKN,SAAS,KAAKM,KAAK6wE,eACxB7wE,KAAKkW,MAAMC,KACTgB,EAAAA,EAAAA,IAAkBnX,MAAMoW,kBAAiB,KACvC,MAAM6I,EAAWjf,KAAK6wE,aAClB7wE,KAAK/G,MAAM63E,WAAa7xD,EAAS6xD,UACnC9wE,KAAKN,SAAS,KAAKuf,GACrB,IAGN,CA2COmM,SAAAA,GACL,MAAO,CAAE1zB,KAAMsI,KAAK/G,MAAMvB,KAAMuL,MAAOjD,KAAK/G,MAAMgK,MACpD,CAhEAvC,WAAAA,CAAYzH,GACV0H,MAAM,OACD1H,GAAAA,CACH63E,SAAU,QAkBdD,EAAAA,KAAAA,cAAa,KACX,MAGMr9C,GAHWrc,EAAAA,EAAAA,IAAkBnX,MAGM/G,MAAM6F,QAAQslB,MAAM3f,IAC3D,MAAMxB,GAAQivB,EAAAA,EAAAA,IAAgCjX,EAAAA,GAAYxW,GAC1D,OAAOA,EAAEjL,MAAQwG,KAAK/G,MAAMvB,MAAQuL,EAAMA,QAAUjD,KAAK/G,MAAMgK,KAAK,IAGtE,OAAKuwB,EAKE,CACLs9C,SAAUt9C,EAAwBpwB,WAAa6B,EAAAA,GAASC,OALjD,CAAE4rE,UAAU,EAMpB,IA6BH,OAAO97E,WAAW+G,IAChB,MAAM5C,EAAS6G,KAAKorB,aAEpB0G,EAAAA,EAAAA,IAAa34B,EAAOzB,KAAMyB,EAAO8J,MAAOlH,EAAMiE,KAAMib,EAAAA,IAEpD,MAAM7hB,GAAW+d,EAAAA,EAAAA,IAAkBnX,OACnC5D,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkB4oB,kBAAmB1oB,EAAAA,GAAoB0oB,kBAAkB8rD,eAAgB,CAC9Gp9C,WAAY,gBACZn6B,IAAKL,EAAOzB,KACZ+R,OAAQ1N,EACR63B,eAAex6B,aAAAA,EAAAA,EAAUH,MAAM6F,QAAQ5F,SAAU,IAGnD8G,KAAKN,SAAS,KAAKM,KAAK6wE,cAAU,IAzElC7wE,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EAiCA,EAzCW4wE,EAyCGl3E,aAAY,EAAGf,YAC3B,MAAM,MAAEsK,EAAK,SAAE6tE,GAAan4E,EAAMI,WAE5B3E,GAASC,EAAAA,EAAAA,YAAWC,IAC1B,OACE,kBAACitB,OAAAA,CAAK/sB,UAAWJ,EAAOmD,SACtB,kBAAC7C,EAAAA,OAAMA,CACLmtB,SAAsB,IAAbivD,EAAoB,UAAU7tE,iBAAuB,OAAOA,eACrEtO,QAAS,YACTC,KAAM,UACNC,KAAK,KACLC,iBAA4B,IAAbg8E,EACft8E,UAAWJ,EAAOW,cAClBC,QAAS,KAAoB,IAAb87E,EAAoBn4E,EAAM3D,QAAQ,SAAW2D,EAAM3D,QAAQ,WAC3EC,cAAaC,EAAAA,EAAQC,sBAAsBC,qBAE1C07E,EAAW,SAAW,eA2BjC,MAAMx8E,GAAY,KACT,CACLG,WAAWkB,EAAAA,EAAAA,KAAI,CACbC,QAAS,OACTC,eAAgB,WAElBd,eAAeY,EAAAA,EAAAA,KAAI,CACjBG,aAAc,IAEhByB,SAAS5B,EAAAA,EAAAA,KAAI,CACXC,QAAS,OACToI,cAAe,SACfnI,eAAgB,SAChBmC,UAAW,a,wICxGV,MAAMg5E,WAAwCt4E,EAAAA,IA+GrD,SAASu4E,GAAmBv7E,GAC1B,MAAO,CACLixB,MAAMhxB,EAAAA,EAAAA,KAAI,CACRsC,MAAOvC,EAAMwC,OAAOC,KAAKolB,SACzB5lB,WAAYjC,EAAMmC,QAAQ+gC,KAE5Bs4C,qBAAqBv7E,EAAAA,EAAAA,KAAI,CACvBC,QAAS,OACTqH,WAAY,WAEd46B,QAAQliC,EAAAA,EAAAA,KAAI,CACVuL,SAAU,OACVvJ,WAAYjC,EAAMmC,QAAQ,GAC1B4tB,YAAa/vB,EAAMmC,QAAQ,KAE7Bs5E,4BAA4Bx7E,EAAAA,EAAAA,KAAI,CAC9B0C,SAAU3C,EAAM4C,WAAWC,UAAUF,SACrCJ,MAAOvC,EAAMwC,OAAOC,KAAKolB,SACzBtgB,WAAY,SACZrH,QAAS,OACTyB,KAAM,WACN+5E,aAAc,WAGpB,C,44BAtIE,GADWJ,GACGK,aAAY,EACxB14E,QACA+vE,iBAEA,MAAMt0E,GAASC,EAAAA,EAAAA,YAAW48E,IACpBjC,EAAwBn2E,EAAAA,GAAWwE,YAAY1E,EAAO0c,KACtD,aAAEi8D,GAAiBtC,EAAsBj2E,WACzCsJ,EAiIH,SAAkCqmE,GACvC,MAAM6I,EAAQ,GACRnqE,EAAM,GACNoqE,EAAoB/2E,KAAKy0D,KAAKwZ,EAAa6I,GAASA,EAEpDlvE,EAA0C,GAChD,IAAK,IAAI24D,EAAQuW,EAAOvW,GAAS5zD,GAAO4zD,GAASwW,EAAmBxW,GAASuW,EAAO,CAClF,IAAI1zE,EAAQm9D,EAAM11D,WACd01D,EAAQuW,EACV1zE,EAAQm9D,EAAM11D,WACL01D,EAAQ0N,IACjB7qE,EAAQ6qE,EAAWpjE,YAErBjD,EAAQkB,KAAK,CACXN,MAAO+3D,EAAM11D,WACbzH,SAEJ,CAEA,OAAOwE,CACT,CArJoBovE,CAAyB/I,GAOzC,OANA11B,EAAAA,EAAAA,YAAU,K,IACgB3wC,EAAAA,EAAxB,MAAMqvE,EAAoD,QAAlCrvE,EAA2B,QAA3BA,EAAAA,EAAQA,EAAQnJ,OAAS,UAAzBmJ,IAAAA,OAAAA,EAAAA,EAA6BY,aAA7BZ,IAAAA,EAAAA,EAAsCivE,EAAahsE,WACvEgsE,EAAahsE,WAAaosE,GAC5B1C,EAAsBtvE,SAAS,CAAE4xE,aAAc3nE,SAAS+nE,EAAiB,KAC3E,GACC,CAACJ,EAAcjvE,EAAS2sE,IAEzB,kBAACztD,OAAAA,CAAK/sB,UAAWJ,EAAO88E,qBACtB,kBAAC3vD,OAAAA,CAAK/sB,UAAWJ,EAAO+8E,4BAA4B,UAC1C,IACR,kBAACv5C,EAAAA,OAAMA,CACLpjC,UAAWJ,EAAOyjC,OAClBtX,SAAWtd,IACT,GAAIA,EAAMA,MAAO,CACf,MAAMquE,EAAe3nE,SAAS1G,EAAMA,MAAO,IAC3C+rE,EAAsBtvE,SAAS,CAAE4xE,eAAcK,YAAa,IAC5D3C,EAAsBhuC,cACtB4wC,EAAAA,EAAAA,IAA6BN,EAC/B,GAEFjvE,QAASA,EACTY,MAAOquE,EAAahsE,aACnB,IAAI,MACHojE,EAAY,IAChB,kBAACjnD,EAAAA,WAAUA,CACTjtB,UAAWJ,EAAOuyB,KAClBxsB,aAAW,aACXzC,KAAM,cACNmqB,QAAS,GAAG6mD,oF,IAMtB,GA3CWsI,GA2CGt3E,aAAY,EACxBf,QACA+vE,iBAEA,MAAMsG,EAAwBn2E,EAAAA,GAAWwE,YAAY1E,EAAO0c,KACtD,aAAEi8D,EAAY,YAAEK,GAAgB3C,EAAsBj2E,WA2BtD3E,GAASC,EAAAA,EAAAA,aA1BIqB,IAA0B,CAC3Cm8E,YAAYl8E,EAAAA,EAAAA,KAAI,CACdm8E,MAAO,SAETC,gBAAgBp8E,EAAAA,EAAAA,KAAI,CAClB,CAACD,EAAMoI,YAAY6W,GAAG,OAAQ,CAC5B/e,QAAS,QAEX,CAACF,EAAMoI,YAAYC,KAAK,OAAQ,CAC9BnI,QAAS,OACTC,eAAgB,WAChBwB,KAAM,cAGV26E,kBAAkBr8E,EAAAA,EAAAA,KAAI,CACpB,CAACD,EAAMoI,YAAYC,KAAK,OAAQ,CAC9BnI,QAAS,QAEX,CAACF,EAAMoI,YAAY6W,GAAG,OAAQ,CAC5B/e,QAAS,OACTC,eAAgB,WAChBwB,KAAM,kBAOZ,OAAIqxE,EAAa4I,EAEb,oCACE,kBAAC/vD,OAAAA,CAAK/sB,UAAWJ,EAAO49E,kBACtB,kBAACC,EAAAA,WAAUA,CACTz9E,UAAWJ,EAAOy9E,WAClBF,YAAaA,EACbO,cAAez3E,KAAKy0D,KAAKwZ,EAAa4I,GACtCa,WAAaC,IACXpD,EAAsBtvE,SAAS,CAAEiyE,YAAaS,IAC9CpD,EAAsBhuC,YAAY,KAIxC,kBAACzf,OAAAA,CAAK/sB,UAAWJ,EAAO29E,gBACtB,kBAACE,EAAAA,WAAUA,CACTI,kBAAkB,EAClB79E,UAAWJ,EAAOy9E,WAClBF,YAAaA,EACbO,cAAez3E,KAAKy0D,KAAKwZ,EAAa4I,GACtCa,WAAaC,IACXpD,EAAsBtvE,SAAS,CAAEiyE,YAAaS,IAC9CpD,EAAsBhuC,YAAY,MAQvC,IAAI,IC3Bf,MAAMsxC,GAAgD50D,EAAAA,OAAOC,eAAeC,6BAEtE20D,GAA0B,wBAGnBrsD,IAA+BsgD,EAAAA,EAAAA,UAAS,aAAc,cA+BnE,MAAMgM,GAAqB,oBACrBC,GAAmB,SAElB,MAAMp9D,WAA8B3c,EAAAA,GA+NzC8hB,WAAAA,GACE,MAAM,IAAEhhB,GAAQk5E,KAEVv5E,GADkB+2E,EAAAA,EAAAA,IAAgClwE,MACzB/G,MAAM6F,QAAQ,GAa7C,OAXI3F,EAAOK,KAAOL,EAAOK,MAAQA,IAC/B02E,EAAAA,EAAAA,IAAgClwE,MAAMN,SAAS,CAC7CZ,QAAS,CACP,SACK3F,GAAAA,CACHK,IAAKA,QAAAA,EAAOL,EAAOK,SAMpB,CAAC,CACV,CAMAihB,aAAAA,CAActY,GAA+B,CAE7CwwE,mCAAAA,CAAoCC,GAClC,MAAM54D,EAAWnI,EAAAA,gBAAgBoI,cAC3BE,EAAS,IAAID,gBAAgBF,EAASG,QACtC04D,EAAQ14D,EAAOtY,IAAI4wE,IACzB,GAAII,GAASD,IAAUC,EAAO,CAC5B,MAAMC,EAAa94D,EAASkgD,SAAWlgD,EAASG,OAChDA,EAAO0jB,IAAI40C,GAAkBG,GAC7B,MAAMG,EAAS/4D,EAASkgD,SAAW,IAAM//C,EAAO7U,WAC5CwtE,IAAeC,IACjBC,EAAAA,EAAAA,IAAeD,EAEnB,CACF,CAOAE,8BAAAA,CAA+BC,EAAgBrwE,GAAU,GACvD,MAAQrJ,IAAK25E,EAAe,OAAEh5D,EAAM,SAAEH,GAAa04D,KACnD,GAAIS,EAAiB,CACnB,MAAMC,EAAoBD,aAAAA,EAAAA,EAAiB9vE,MAAM,KAGjD,IAFiB+vE,aAAAA,EAAAA,EAAoB,MAEpBF,EAAQ,CACvBE,EAAkB,GAAKF,EACvB/4D,EAAO0jB,IAAI20C,GAAoBY,EAAkBtnE,KAAK,MACtD,MAAMgnE,EAAa94D,EAASkgD,SAAWlgD,EAASG,OAC1C44D,EAAS/4D,EAASkgD,SAAW,IAAM//C,EAAO7U,WAC5CwtE,IAAeC,IACblwE,EACFgP,EAAAA,gBAAgBhP,QAAQkwE,IAExBC,EAAAA,EAAAA,IAAeD,GAGrB,CACF,CACF,CAEAnD,cAAAA,G,IACSM,EAAP,OAA6D,QAAtDA,GAAAA,EAAAA,EAAAA,IAAgClwE,MAAM/G,MAAM6F,QAAQ,UAApDoxE,IAAAA,OAAAA,EAAAA,EAAwD12E,GACjE,CAEA22E,qBAAAA,GAEEnwE,KAAKizE,+BAA+BtvC,EAAAA,IAAc,GAClD3jC,KAAKuvE,eAAe5rC,EAAAA,GACtB,CAEA4rC,cAAAA,CAAe7mD,IACb2qD,EAAAA,EAAAA,KAAqBtuE,EAAAA,EAAAA,IAAsB/E,MAAMqF,WAAWC,WAAYojB,IAGxE4qD,EAAAA,EAAAA,GAAoCtzE,OAGpCuzE,EAAAA,EAAAA,IAAmC7qD,EAAW1oB,KAChD,CAGAwzE,kBAAAA,CACEjF,EACAC,EACApvE,EACAq0E,EACAC,EACAC,G,IAkDUA,EAhDV,IAAIC,EACAx0E,EAAU4Y,GAAGC,KAAK7Y,EAAU8Y,KAAM,UAAY,GAAK9Y,EAAU4Y,GAAGC,KAAK7Y,EAAU8Y,KAAM,UAAY,KACnG07D,EAAgB,MAElB,MAAM1kD,EAAgB,G,IA4CZykD,EA1CN3zE,KAAK6zE,6BAGP3kD,EAAc3rB,KACZ,IAAIqtE,EAAmC,CACrCl5E,KAAM62E,EACNtrE,MAAOurE,KALXt/C,EAAc3rB,KAAK,IAAI6qE,EAAoB,CAAEzlD,WAAY6lD,EAAmB9lD,UAAW6lD,KAUzF,MAAM/iD,EAAQ2D,EAAAA,GAAcC,aAEzBK,SAAS++C,GACT7+C,SACC2J,EAAAA,EAAAA,IACE,EACEU,EAAAA,EAAAA,GAAeh6B,KAAK8zE,oBAAoBtF,EAAmBiF,EAAiBC,GAAkB,CAC5FpoD,aAAc,KAAK7kB,EAAAA,OACnBmtE,gBACA1pD,MAAO,MAAMskD,IACbuF,KAAMN,EAAgBx6E,MAAMgK,QAAUsvE,GAA0B,WAAQv8E,KAG5E,CAAEujC,eAAgB,YAGrB8F,qBAAqB,WAAY,CAAEC,KAAMC,EAAAA,aAAaC,SACtDH,qBAAqB,cAAe,KACpCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAatD,EAAAA,UAAUC,MAC5Cq7B,QAAQ,SACRhoC,aAAaC,EAAAA,IACbslC,UAAU,SAAU,CACnBvhD,YAAY,EACZ4jD,MAAO,CAAC,OACRzwC,UAAW,QACX0wC,YAAaC,EAAAA,kBAAkB7N,QAEhC55B,iBAAiB,CAChB,IAAIo+C,EAAAA,EAAiC,CACnCnvD,GAAsC,QAAlCg1D,EAAsB,QAAtBA,EAAAA,EAActuE,kBAAdsuE,IAAAA,OAAAA,EAAAA,EAA0BruE,kBAA1BquE,IAAAA,EAAAA,EAAwC,GAC5CjrD,UAAW6lD,EACX5lD,WAAY6lD,OAEXt/C,IAEJU,QAEHpE,EAAM9rB,SAAS,CACbwmC,mBAAoB,CAACj+B,EAAG2iB,IACtB5qB,KAAKmmC,0BAA0BooC,EAAkBC,EAAmB5jD,EAASY,KAGjF,MAAMwoD,EAAc,IAAIjlD,EAAAA,GAAiB,CACvCvG,WAAY,CAAC,IAAIu+C,EAAAA,GAAAA,GAAqB,CAAEvtE,IAAK,uBAAwBwtE,KAAMC,EAAAA,oBAAoBC,aAC/F/lE,KAAMqqB,IAWR,OARAwoD,EAAYnzE,sBAAqB,K,IAG3BozE,GAAiB,QAAjBA,GAFW5jD,EAAAA,EAAAA,IAA2B2jD,GAAa,GAE5C/6E,MAAM6xB,YAAbmpD,IAAAA,OAAAA,EAAAA,EAAmBh7E,SAAU29B,EAAAA,aAAaC,MAC5C72B,KAAKk0E,cAAcF,EACrB,IAGKA,CACT,CAEAH,yBAAAA,GACE,MAAMM,EAAUn0E,KAAKo0E,yBACrB,QAAQD,aAAAA,EAAAA,EAASl7E,MAAMoJ,QAAQ0iB,kBAAkBxH,YAAY42D,aAAAA,EAAAA,EAASl7E,MAAMoJ,QAAQ0iB,kBAAkBD,OACxG,CAsDAuvD,uBAAAA,GACE,MAAM1E,EAAc3vE,KAAK4vE,iBACzB,OAAOD,IAAgBhsC,EAAAA,GAAeD,EAAAA,GAAmBisC,CAC3D,CAEQ2E,oBAAAA,GACNt0E,KAAKN,SAAS,CACZuvB,OAAOmL,EAAAA,EAAAA,IAAoB,CACzBnQ,QAAS,EACPsqD,EAAAA,EAAAA,IAAiB,IAAIC,EAAAA,OAA2BC,EAAAA,MAA4B,SAAUz0E,KAAK4vE,mBAE7Fr2C,eAAgB,aAKpBv5B,KAAK00E,mBACP,CAEQC,mBAAAA,GACN,MAAMC,GAAmBz9D,EAAAA,EAAAA,IAAkBnX,MACrC60E,GAAmBC,EAAAA,EAAAA,IAAyB90E,MAE5C+0E,EAAY/0E,KAAK4vE,iBACjBoF,EAAkBJ,EAAiB37E,MAAM6F,QAAQ3F,QAAQsL,GAAMA,EAAEjL,MAAQu7E,IAE/E,MAAO,CAAEj2E,QAASk2E,EAAiBC,YAAY92D,EAAAA,EAAAA,GAAe62D,EAAiBH,EAAiB57E,MAAM6F,SACxG,CAEQo2E,aAAAA,GACN,MAAML,GAAmBC,EAAAA,EAAAA,IAAyB90E,OAE5C,QAAElB,EAAO,UAAEm2E,GAAcj1E,KAAK20E,sBAChCM,GACFJ,EAAiBn1E,SAAS,CAAEZ,WAEhC,CAEQe,UAAAA,G,IAkBF,EAjBJG,KAAKm1E,uBAGLn1E,KAAKk1E,gBAGLl1E,KAAKs0E,uBAGLt0E,KAAKo1E,mCAGLp1E,KAAKq1E,gCAGLr1E,KAAKs1E,8BAA6BpF,EAAAA,EAAAA,IAAgClwE,QAEnC,QAA3B,EAAAA,KAAK/G,MAAMg2B,MAAMh2B,MAAM6xB,YAAvB,eAA6B7xB,SAAU29B,EAAAA,aAAaC,MACtD72B,KAAKu1E,sBAIPv1E,KAAK8rE,uBAGL9rE,KAAKw1E,wBAELx1E,KAAKy1E,oCAELz1E,KAAK01E,qCACP,CAEQH,mBAAAA,G,IAGA,EAKA,EAPFv1E,KAAK21E,oCACP31E,KAAK41E,0CAC0B,QAA3B,EAAA51E,KAAK/G,MAAMg2B,MAAMh2B,MAAM6xB,YAAvB,eAA6B7xB,SAAU29B,EAAAA,aAAaC,MACtD72B,KAAK61E,mBAGP71E,KAAK81E,wCAC0B,QAA3B,EAAA91E,KAAK/G,MAAMg2B,MAAMh2B,MAAM6xB,YAAvB,eAA6B7xB,SAAU29B,EAAAA,aAAaC,MACtD72B,KAAK61E,iBAGX,CAEQJ,iCAAAA,G,IAEJ,EADFz1E,KAAKkW,MAAMC,IACkB,QAA3B,EAAAnW,KAAKo0E,gCAAL,eAA+Bh+D,kBAAiB,CAACC,EAAUmB,KACrDnB,EAAShU,QAAQ0iB,kBAAkBF,eAAiBrN,EAAUnV,QAAQ0iB,kBAAkBF,cAC1F7kB,KAAK61E,gBAAe,EACtB,IAGN,CAEQL,qBAAAA,GACNx1E,KAAKkW,MAAMC,KACTpR,EAAAA,EAAAA,IAAsB/E,MAAMoW,kBAAkBC,IAC5CrW,KAAK2yE,oCAAoCt8D,EAASpT,MAAMqC,YACxDtF,KAAK61E,gBAAgB,IAG3B,CAEQP,4BAAAA,CAA6B5B,GACnC1zE,KAAKkW,MAAMC,IACTu9D,EAAgBt9D,kBAAiB,CAACC,EAAUmB,KAC1C,GAAInB,EAASwjB,mBAAqBriB,EAAUqiB,iBAAkB,CAC5D,MAAMq5C,EAAS78D,EAASvX,QAAQ,GAAGtF,IACnCwG,KAAKizE,+BAA+BC,GAEpC,MAAM,UAAE+B,GAAcj1E,KAAK20E,sBAEvBM,EACFj1E,KAAKk1E,gBAELl1E,KAAK61E,gBAAe,EAExB,KAGN,CAMA,sCACE71E,KAAKkW,MAAMC,KACT4/D,EAAAA,EAAAA,IAA6B/1E,MAAMoW,kBAAiB,CAACC,EAAUmB,KACzDnB,EAASpT,QAAUuU,EAAUvU,QAE/BjD,KAAKN,SAAS,CACZyB,KAAM,IAAIs6B,EAAAA,GAAmB,CAAEnlC,SAAU,OAG3C0J,KAAKghC,YAAW,GAClB,IAGN,CAEQo0C,gCAAAA,GACN,MAAMR,GAAmBz9D,EAAAA,EAAAA,IAAkBnX,MAC3CA,KAAKkW,MAAMC,IACTy+D,EAAiBx+D,kBAAiB,CAACC,EAAUmB,MACtC2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAKk1E,eACP,IAGN,CAEQG,6BAAAA,GACN,MAAMn+D,GAAY49D,EAAAA,EAAAA,IAAyB90E,MAC3CA,KAAKkW,MAAMC,IACTe,EAAUd,kBAAiB,CAACC,EAAUmB,MAC/B2G,EAAAA,EAAAA,GAAe9H,EAASvX,QAAS0Y,EAAU1Y,UAC9CkB,KAAK61E,gBAAe,EACtB,IAGN,CAEQnB,iBAAAA,GACN10E,KAAKkW,MAAMC,IACTnW,KAAK/G,MAAMg2B,MAAM7Y,kBAAiB,CAACC,EAAUmB,K,IAGzCnB,EACgBmB,EAAyBnB,GAD5B,QAAbA,EAAAA,EAASyU,YAATzU,IAAAA,OAAAA,EAAAA,EAAepd,SAAU29B,EAAAA,aAAaC,OACrC1Y,EAAAA,EAAAA,GAAe3G,SAAe,QAAfA,EAAAA,EAAWsT,YAAXtT,IAAAA,OAAAA,EAAAA,EAAiBkU,OAAQrV,SAAc,QAAdA,EAAAA,EAAUyU,YAAVzU,IAAAA,OAAAA,EAAAA,EAAgBqV,SAEzD1rB,KAAKghC,YAAW,EAClB,IAGN,CAEQ8qC,oBAAAA,GACN9rE,KAAKkW,MAAMC,IACTtd,EAAAA,GAAWqZ,aAAalS,MAAMoW,kBAAiB,KACzCpW,KAAK21E,mCACP31E,KAAK41E,yCAEL51E,KAAK81E,uCAEP91E,KAAK61E,gBAAgB,IAG3B,CAMA,uBAEE,MAAM,IAAEr8E,GAAQk5E,KACXl5E,GACHwG,KAAKmwE,uBAET,CAEQwF,gCAAAA,GAEN,OADkB98E,EAAAA,GAAWqZ,aAAalS,MACzB/G,MAAMgK,MAAMiV,KAAK89D,UAASxP,EAAAA,EAAAA,UAAStgD,IACtD,CAEQ0vD,sCAAAA,GACN,MAAMzB,EAAUn0E,KAAKo0E,yBACrBD,SAAAA,EAASz0E,SAAS,CAChB2C,QAAS,CACP0iB,kBAAmB,SACdovD,aAAAA,EAAAA,EAASl7E,MAAMoJ,QAAQ0iB,mBAAiB,CAC3CxH,UAAU,MAIlB,CAEQ62D,sBAAAA,GAEN,OADmBv7E,EAAAA,GAAWwE,YAAY2C,KAAM1C,EAAAA,GAC9BrE,MAAMsE,SAAS6mB,MAAM9kB,GAAYA,aAAmBue,EAAAA,GACxE,CAEQi4D,oCAAAA,GACN,MAAM3B,EAAUn0E,KAAKo0E,yBACrBD,SAAAA,EAASz0E,SAAS,CAChB2C,QAAS,CACP0iB,kBAAmB,SACdovD,aAAAA,EAAAA,EAASl7E,MAAMoJ,QAAQ0iB,mBAAiB,CAC3CxH,UAAU,MAIlB,CAOA,eAAuB04D,GAAmB,GACpCA,GACFj2E,KAAKs0E,uBAGPt0E,KAAKk2E,iCACLl2E,KAAK/G,MAAMg2B,MAAMqL,YACnB,CAEQ47C,8BAAAA,GACN,MAAMzC,GAAkBsC,EAAAA,EAAAA,IAA6B/1E,MAC/CkX,GAAYC,EAAAA,EAAAA,IAAkBnX,MACpC,GAAMA,KAAK21E,oCAAuCrD,KAA6BtyE,KAAK6zE,4BAY7E,CACLJ,EAAgBl5D,cAAcopB,EAAAA,IAE9BzsB,EAAUxX,SAAS,CACjB4b,KAAMC,EAAAA,GAAaC,WAErBi4D,EAAgBl5D,cAAcopB,EAAAA,IAGP9qC,EAAAA,GAAWoc,iBAAiBjV,KAAM8U,EAAAA,EAAwBI,GAAAA,GAClExV,SAAS,CAAEyV,QAAQ,GACpC,KAvBiH,CAC/Gs+D,EAAgBl5D,cAAcg4D,IAG9Br7D,EAAUxX,SAAS,CACjB4b,KAAMC,EAAAA,GAAaO,aACnBhd,QAAS,KAIYjG,EAAAA,GAAWoc,iBAAiBjV,KAAM8U,EAAAA,EAAwBI,GAAAA,GAClExV,SAAS,CAAEyV,QAAQ,GACpC,CAYF,CAEQghE,UAAAA,GACN,IAAKn2E,KAAK/G,MAAMs3E,KAAM,CACpB,MAAMA,EAAO,IAAIrB,EAA0B,CAAC,GAC5ClvE,KAAKN,SAAS,CACZ6wE,QAEJ,CACF,CAEQ6F,YAAAA,GACN,OAAOp2E,KAAK/G,MAAMkI,KAAKlI,MAAM3C,QAC/B,CAEQo8D,WAAAA,CAAYl+B,GAClB,OAAOA,EAAMv7B,MAAMkI,gBAAgBoQ,EAAAA,GAAWijB,EAAMv7B,MAAMkI,UAAOnL,CACnE,CAOA,cAAsBw+B,GACpB,GAAIA,EAAMljB,SAAU,CAClB,MAAMipB,GAAelK,EAAAA,EAAAA,IAA2BmE,GAChD,GAA4B,IAAxB+F,EAAarhC,OAAc,C,IAKJ8xB,EAJzB,MAAMA,EAAcuP,EAAa,GAC3BjzB,EAAQ0jB,EAAY/xB,MAAMgxB,QAAQ,GAGlCosD,EAAyC,QAAtBrrD,EAAAA,EAAY/xB,MAAM6xB,YAAlBE,IAAAA,OAAAA,EAAAA,EAAwB5rB,UAC3Cof,EAAiB3lB,EAAAA,GAAWqZ,aAAalS,MACzCs2E,EAAWD,EACb57E,KAAK87E,IAAI/3D,EAAevlB,MAAMgK,MAAMiV,KAAKD,KAAKo+D,aAAAA,EAAAA,EAAkBn+D,KAAM,MACtE6gC,IACEy9B,EAASH,EACX57E,KAAK87E,IAAI/3D,EAAevlB,MAAMgK,MAAM+U,GAAGC,KAAKo+D,aAAAA,EAAAA,EAAkBr+D,GAAI,MAClE+gC,IAEEn/B,EAAe/gB,EAAAA,GAAW8gB,YAAY3Z,KAAMsH,EAAM9F,OAEpDwpB,EAAY/xB,MAAMO,MAAQogB,GAAgB08D,EAAW,GAAKE,EAAS,KACrExrD,EAAYtrB,SAAS,CACnBlG,IAAKogB,IAEPoR,EAAYsP,aAEhB,CACF,CACF,CAEO0G,UAAAA,CAAW1G,GAAa,G,IACY,EAAzC,MAAM,cAAEm8C,GAAkBz2E,KAAK02E,UAAqC,QAA3B,EAAA12E,KAAK/G,MAAMg2B,MAAMh2B,MAAM6xB,YAAvB,eAA6BY,QAChEikD,EAAc3vE,KAAK4vE,iBAUzB,GATA5vE,KAAKm2E,aAEAn2E,KAAK/G,MAAM09E,iBACd32E,KAAKN,SAAS,CACZi3E,gBAAiB,IAAI3F,GAAgC,CAAC,KAKrDyF,GAA0C,IAAzBA,EAAcv9E,OAE7B,CAEL,MAAM67B,EAAkC,GAClC6hD,EAAmB52E,KAAKo2E,eACxBh3E,EAAYvG,EAAAA,GAAWqZ,aAAalS,MAAM/G,MAAMgK,MAChD4zE,GAA4Bd,EAAAA,EAAAA,IAA6B/1E,MACzD0zE,GAAkBxD,EAAAA,EAAAA,IAAgClwE,MAClD82E,GAAqB/xE,EAAAA,EAAAA,IAAsB/E,MAE3CmH,GAASnH,KAAK/G,MAAM04E,YAAc,GAAK3xE,KAAK/G,MAAMq4E,aAClDlqE,EAAMD,EAAQnH,KAAK/G,MAAMq4E,aAE/B,IAAK,MAAM9C,KAAqBiI,EAAcrpE,MAAMjG,EAAOC,GAAM,CAC/D,MAAM2vE,EAAWH,EAAiBz9E,QAAQq7B,IACxC,MAAMrjB,EAAWnR,KAAK0yD,YAAYl+B,GAClC,OAAOrjB,aAAAA,EAAAA,EAAUlY,MAAM5D,SAAUm5E,CAAiB,IAGpD,GAAwB,IAApBuI,EAAS79E,OAEX67B,EAAYxxB,KAAKwzE,EAAS,GAAIA,EAAS,IAEnCA,EAAS,GAAGzlE,UAAYgpB,GAC1Bt6B,KAAKk0E,cAAc6C,EAAS,IAG1BA,EAAS,GAAGzlE,UAAYgpB,GAC1Bt6B,KAAKk0E,cAAc6C,EAAS,QAEzB,CACL,MAAMC,EAAah3E,KAAKwzE,mBACtB7D,EACAnB,EACApvE,EACAy3E,EACAnD,EACAoD,GAEIG,EAAej3E,KAAKk3E,uBAAuBvH,EAAanB,GAE9Dz5C,EAAYxxB,KAAKyzE,EAAYC,EAC/B,CACF,CAEAj3E,KAAK/G,MAAMkI,KAAKzB,SAAS,CACvBpJ,SAAUy+B,EACV8G,QAAQ,EACRH,gBAAiB,yEACjBE,SAAU,QACV0tC,GAAI,CACF5tC,gBAAiB,MACjB3V,OAAQ,EACRC,UAAW,IAGjB,MAxDEhmB,KAAK/G,MAAMkI,KAAKzB,SAAS,CAAEpJ,SAAU,IAyDzC,CAKA,kBAA0BoyB,EAAmBC,G,IAKF,EAJzC,IAAK3oB,KAAK/G,MAAMkI,KAEd,YADAnB,KAAKghC,aAGP,MAAM,cAAEy1C,GAAkBz2E,KAAK02E,UAAqC,QAA3B,EAAA12E,KAAK/G,MAAMg2B,MAAMh2B,MAAM6xB,YAAvB,eAA6BY,QAChEyrD,EAAeV,aAAAA,EAAAA,EAAepnE,QAAQsZ,GAC5C,QAAqB3yB,IAAjBmhF,GAA8BA,EAAe,EAC/C,OAEF,IAAIpiD,EAAc,IAAI/0B,KAAKo2E,gBAC3BrhD,EAAY7oB,OAAsB,EAAfirE,EAAmB,EAAG,EAAGn3E,KAAKk3E,uBAAuBxuD,EAAWC,IACnF3oB,KAAK/G,MAAMkI,KAAKzB,SAAS,CAAEpJ,SAAUy+B,GACvC,CAEQqiD,gBAAAA,CAAiB1uD,EAAmBC,EAAoBsvC,GAC9D,MAAO,IAAIvvC,OAAeC,SAAkB8rD,EAAAA,OAA4Bxc,GAC1E,CAEQ6b,mBAAAA,CACNnrD,EACA8qD,EACAC,GAEA,MAAMv6E,EAASu6E,EAAgBz6E,MAAM6F,QAAQ,GAC7C,OAAI20E,EAAgBx6E,MAAMgK,QAAUsvE,GAC9Bp5E,EAAOK,MAAQmqC,EAAAA,GACV,WAAWl9B,EAAAA,uBAAyC8rE,QAA6B5pD,4CAEjF,WAAWliB,EAAAA,uBAAyC8rE,2BAAgDp5E,EAAOK,SAASmvB,iCAGxH,WAAWliB,EAAAA,0BAA4CtN,EAAOK,SAASmvB,QAAiB8rD,EAAAA,kBACjG,CAqBQiC,SAAAA,CAAUhrD,G,IACiBA,EAChB3mB,EADgB2mB,EAAjC,MAAM2rD,EAAwD,QAA7B3rD,EAAAA,SAAW,QAAXA,EAAAA,EAAS,UAATA,IAAAA,OAAAA,EAAAA,EAAa/jB,OAAO,GAAGxF,cAAvBupB,IAAAA,EAAAA,EAAiC,GAC5D4rD,EAA+C,QAApCvyE,GAAAA,EAAAA,EAAAA,IAAsB/E,MAAMqF,kBAA5BN,IAAAA,OAAAA,EAAAA,EAAwCO,WACnDiyE,GAAeC,EAAAA,EAAAA,IAAkCx3E,MAAMqF,WACvDsqE,EAAc3vE,KAAK4vE,iBACnB6G,EASV,SAAmCgB,EAAoB94D,EAAY44D,EAAsB7uD,GACvF,KAAK+uD,aAAAA,EAAAA,EAAUv+E,QACb,MAAO,GAGY,OAAjBq+E,IACFA,EAAe,IAGjB,MAAMG,GAA0BtyE,EAAAA,EAAAA,IAAkCuZ,EAAI+J,GAAWvvB,QAC9Ew+E,GAAYA,EAAQtuE,cAAchQ,SAASk+E,EAAaluE,gBAAkBouE,EAASp+E,SAASs+E,KAI/F,OAAO3xE,MAAMkS,KAAK,IAAI1S,IAAI,IAAIkyE,KAA4BD,IAC5D,CAxB0BG,CAA0BP,EAAgBC,EAAUruE,OAAOsuE,GAAe5H,GAChG,MAAO,CAAE0H,iBAAgBZ,cAAeA,EAC1C,CAl5BA/1E,WAAAA,CAAYzH,G,IAwCOy5E,EAwBDmF,EA/DhBl3E,MAAM,IACJQ,KAAM,IAAIs6B,EAAAA,GAAmB,CAAEnlC,SAAU,KACzC0nB,WAAY,IAAIlB,EAAAA,GAAiB,CAC/B9jB,UAAW,CAET,IAAIkkB,EAAAA,EAAuB,CACzBxlB,KAAMogF,EAAAA,GACNj6E,MAAO,UACPyd,KAAMC,EAAAA,GAAaO,aACnBG,aAAa,EACbhZ,MAAO,OAGT,IAAIia,EAAAA,EAAuB,CACzBxlB,KAAMqgF,EAAAA,GACNl6E,MAAO,GACPyd,KAAMC,EAAAA,GAAay8D,UACnB/0E,MAAO0gC,EAAAA,GACP1nB,aAAa,EACb5Z,QAAS,CACP,CACEY,MAAO0gC,EAAAA,GACP9lC,MAAO8lC,EAAAA,IAET,CACE1gC,MAAOsvE,GACP10E,MAAO00E,OAKb,IAAIv3D,EAAAA,GAAqB,CACvBtjB,KAAMugF,EAAAA,GACN38D,KAAMC,EAAAA,GAAay8D,UACnB58D,kBAAoBtc,GApDhC,SAAmCA,GACjC,GAAIA,EAAQ5F,OAAQ,CAClB,MAAMC,EAAS2F,EAAQ,GACvB,MAAO,GAAG3F,EAAOK,MAAML,EAAOiK,aAAajK,EAAO8J,SACpD,CAEA,MAAO,EACT,CA8CqBi1E,CAA0Bp5E,GAEnCA,QAAS,CACP,CACEtF,IAAgC,QAA3Bk5E,EAAAA,KAAwBl5E,WAAxBk5E,IAAAA,EAAAA,EAA+B/uC,EAAAA,GACpC1gC,MAAO,KACPG,SAAU,SAIhB,IAAI4X,EAAAA,GAAqB,CACvBtjB,KAAMygF,EAAAA,GACN/zE,WAAY8W,EAAAA,GACZzhB,OAAQ,WACRqF,QAAS,GACTsc,kBAAmBC,EAAAA,GACnBC,KAAMC,EAAAA,GAAaO,aACnBtiB,IAAK,+BACLyiB,aAAa,OAInBgT,OAAOmL,EAAAA,EAAAA,IAAoB,CACzBnQ,QAAS,GACTsP,eAAgB,WAElB6+C,aAAc,IAAIz6C,IAElB2zC,aAA0CuG,QAA5BA,GAAAA,EAAAA,EAAAA,aAAAA,IAAAA,EAAAA,EAAkC,GAChDlG,YAAa,EAEbzlC,aAAa,EACbijC,WAAY,CACV,CACEtxE,MAAO6lC,EAAAA,GACPzgC,MAAO0gC,EAAAA,MAGR1qC,IA9EP,QAAUglB,WAAW,IAAIC,EAAAA,GAAyBle,KAAM,CACtDgK,KAAM,CAACwoE,OAkLT6F,GAAAA,KAAAA,0BAAyB10D,EAAAA,EAAAA,WAAU20D,IAEjC,MAAMC,GAAYf,EAAAA,EAAAA,IAAkCx3E,OAE5Bs4E,GAAqB5/C,EAAAA,EAAAA,IAAmB4/C,GAAsB,QAC9DC,EAAUt/E,MAAMgK,OACtCs1E,EAAU74E,SAAS,CACjBuD,MAAOq1E,GAAqB5/C,EAAAA,EAAAA,IAAmB4/C,GAAsB,KACrEz6E,MAAOy6E,QAAAA,EAAsB,KAIjC,MAAM5E,GAAkBxD,EAAAA,EAAAA,IAAgClwE,MAClD7G,EAASu6E,EAAgBz6E,MAAM6F,QAAQ,IAGzC45B,EAAAA,EAAAA,IAAmB6/C,EAAUt/E,MAAMgK,MAAMqC,cAAgBnM,EAAO8J,OAClEywE,EAAgBh0E,SAAS,CACvBZ,QAAS,CACP,SACK3F,GAAAA,CACH8J,OAAOy1B,EAAAA,EAAAA,IAAmB6/C,EAAUt/E,MAAMgK,MAAMqC,iBAMxDtF,KAAKN,SAAS,CACZiyE,YAAa,KAGfv1E,EAAAA,EAAAA,IACEC,EAAAA,GAAkB4oB,kBAClB1oB,EAAAA,GAAoB0oB,kBAAkBuzD,wBACtC,CACEC,YAAaH,GACf,GAED,MAsLHI,GAAAA,KAAAA,4BAA4Bf,IAC1B,IAAIgB,EAAgB34E,KAAK/G,MAAMm/E,aAAav2E,IAAI81E,IAAY,GAC5D,GAA6B,IAAzBgB,EAAcz/E,OAChB,MAAO,GAQT,MAAO,MANSy/E,EAAcr/E,KAAKgS,IACnB,SAAVA,IACFA,EAAQ,IAEH,GAAG7E,EAAAA,QAA0B6E,SAEjBQ,KAAK,UAAU,IAItCorE,GAAAA,KAAAA,0BAAyB,CAACxuD,EAAmBC,KAC3C,MAAMsvC,EAAcj4D,KAAK04E,yBAAyB/vD,GAC5CqrD,EAAc,IAAIjlD,EAAAA,GAAiB,CACvCvG,WAAY,CAAC,IAAIu+C,EAAAA,GAAAA,GAAqB,CAAEC,KAAMC,EAAAA,oBAAoB2R,OAClEz3E,KAAMguB,EAAAA,GAAczH,OAEjB4b,gBAAe,GACf3T,SACC2J,EAAAA,EAAAA,IACE,EACEU,EAAAA,EAAAA,GAAeh6B,KAAKo3E,iBAAiB1uD,EAAWC,EAAYsvC,GAAc,CACxElB,SAAU,IACV7sC,MAAO,QAAQvB,OAGnB,CACE4Q,eAAgB,YAIrB9J,SAAS9G,GACTisC,UAAU,YAAY,GACtBA,UAAU,oBAAoB,GAC9BhlC,UAWL,OARAokD,EAAYnzE,sBAAqB,K,IAG3BozE,GAAiB,QAAjBA,GAFW5jD,EAAAA,EAAAA,IAA2B2jD,GAAa,GAE5C/6E,MAAM6xB,YAAbmpD,IAAAA,OAAAA,EAAAA,EAAmBh7E,SAAU29B,EAAAA,aAAaC,MAC5C72B,KAAKk0E,cAAcF,EACrB,IAGKA,CAAW,IA4bpB,QAAQ7tC,6BAA4B,CAClCzd,EACAC,EACAiC,EACAY,KAEA,MAAM24C,EAAmCv5C,EAAQkc,yBAEjDlc,EAAQkc,yBAA2B,CAACx7B,EAAeg0B,K,IAGN9T,EAAAA,EAAAA,EAF3C24C,SAAAA,EAAmC74D,EAAOg0B,GAE1C,MAAMu5C,GAAYC,EAAAA,EAAAA,IAA8D,QAArCttD,EAAiB,QAAjBA,EAAAA,EAAMvyB,MAAMg2B,aAAZzD,IAAAA,GAA6B,QAA7BA,EAAAA,EAAmBvyB,MAAM6xB,YAAzBU,IAAAA,OAAAA,EAAAA,EAA+BE,cAA/BF,IAAAA,EAAAA,EAAyC,IAC9EvL,GAAS84D,EAAAA,EAAAA,IAAsBztE,EAAOtL,KAAK/G,MAAMm/E,aAAav2E,IAAI8mB,GAAa2W,EAAMu5C,GAC3F74E,KAAK/G,MAAMm/E,aAAav6C,IAAIlV,EAAY1I,GAExCjgB,KAAKg5E,kBAAkBtwD,EAAWC,EAAW,CAC9C,IA3zBD3oB,KAAKa,qBAAqBb,KAAKH,WAAWiB,KAAKd,MACjD,EA41BF,SAAS0yE,KACP,MAAM14D,EAAWnI,EAAAA,gBAAgBoI,cAC3BE,EAAS,IAAID,gBAAgBF,EAASG,QACtCg5D,EAAkBh5D,EAAOtY,IAAI2wE,IAC7BY,EAAoBD,aAAAA,EAAAA,EAAiB9vE,MAAM,KAEjD,MAAO,CAAE7J,IADG45E,aAAAA,EAAAA,EAAoB,GAClBj5D,SAAQH,WACxB,CAEA,SAAS1lB,GAAUoB,GACjB,MAAO,CACLjB,WAAWkB,EAAAA,EAAAA,KAAI,CACbC,QAAS,OACToI,cAAe,SACfgD,SAAU,EACVlJ,SAAU,aAEZmhF,gBAAgBtjF,EAAAA,EAAAA,KAAI,CAClBuJ,UAAWxJ,EAAMmC,QAAQ,KAE3BqhF,aAAavjF,EAAAA,EAAAA,KAAI,CACfe,OAAQ,IAEV+tB,QAAQ9uB,EAAAA,EAAAA,KAAI,CACVmC,SAAU,WACVyxE,MAAO,EACPxxE,IAAK,MACLyG,OAAQ,IAEV26E,aAAaxjF,EAAAA,EAAAA,KAAI,CACfqL,SAAU,EACVpL,QAAS,OACToI,cAAe,WAEjBmD,MAAMxL,EAAAA,EAAAA,KAAI,CACRqL,SAAU,EACVpL,QAAS,OACToI,cAAe,WAEjBo7E,sBAAsBzjF,EAAAA,EAAAA,KAAI,CACxBkI,MAAO,yBACPjI,QAAS,OACTqH,WAAY,SACZC,SAAU,OACV7F,KAAM,WACN,CAAC3B,EAAMoI,YAAYC,KAAK,OAAQ,CAC9BmB,UAAWxJ,EAAMmC,QAAQ,GACzBmH,MAAO,UAGXq6E,eAAe1jF,EAAAA,EAAAA,KAAI,CACjBkI,MAAO,iBACPjI,QAAS,OACTqH,WAAY,SACZC,SAAU,OACV,CAACxH,EAAMoI,YAAYC,KAAK,OAAQ,CAC9BC,cAAe,SACff,WAAY,gBAGhBq8E,aAAa3jF,EAAAA,EAAAA,KAAI,CACfuJ,UAAWxJ,EAAMmC,QAAQ,GACzBC,SAAU,aAGhB,CA35BE,GArFWud,GAqFG3b,aAAY,EAAGf,Y,IAaJs2B,EAZvB,MAAM76B,GAASC,EAAAA,EAAAA,YAAWC,KACpB,KAAE6M,EAAI,MAAE8tB,EAAK,KAAEshD,EAAI,gBAAEoG,GAAoBh+E,EAAMI,YAC/C,KAAE+xB,GAASmE,EAAMl2B,WACjB42E,EAAch3E,EAAMi3E,iBAEpB2J,GAAwB/B,EAAAA,EAAAA,IAAkC7+E,IAC1D,MAAEkF,EAAOoF,MAAOs3C,GAAgBg/B,EAAsBxgF,WACtDygF,EAAYj/B,GAA+B,OAAhBA,GAE3B,eAAE88B,EAAc,cAAEZ,GAAkB99E,EAAM+9E,UAAU5rD,aAAAA,EAAAA,EAAMY,QAC1D+tD,GACJ3uD,aAAAA,EAAAA,EAAM7xB,SAAU29B,EAAAA,aAAasvC,UAAWp7C,aAAAA,EAAAA,EAAM7xB,SAAU29B,EAAAA,aAAaE,gBAAsB9gC,IAAT80B,EAC9E4uD,GAAiC,QAAhBzqD,EAAAA,EAAMh2B,MAAM6xB,YAAZmE,IAAAA,OAAAA,EAAAA,EAAkBh2B,SAAU29B,EAAAA,aAAa30B,MAM1D03E,EAAchhF,EAAM07E,0BAC1B,IAAIuF,EAAcL,EAAsBl0E,WAAWC,WAC/B,OAAhBs0E,IACFA,EAAc,IAEhB,MAAMC,GAAcC,EAAAA,EAAAA,IAAqBF,G,IAsB3BnD,EApBd,OACE,kBAACliF,MAAAA,CAAIC,UAAWJ,EAAOK,WACrB,kBAACF,MAAAA,CAAIC,UAAWJ,EAAO+kF,aACpB5I,GAAQ,kBAACA,EAAK72E,UAAS,CAACf,MAAO43E,IAChC,kBAAC5qC,EAAAA,MAAKA,CAACnxC,UAAWJ,EAAOklF,aACvB,kBAAC/kF,MAAAA,CAAIC,UAAWJ,EAAOilF,eACrB,kBAACvhD,EAAAA,EAAoBA,CACnBE,cAAe,CACbn6B,MAAOg8E,EACP52E,MAAO22E,EACPjzD,KAAM,UAERzH,UAAWu6D,EACXx2E,MAAO22E,GAA4B/7E,EACnC0iB,SAAWw5D,GAzBA,CAACA,IACtBphF,EAAM0/E,uBAAuB0B,EAAY,EAwBJC,CAAeD,GAC1ChiD,aAAe90B,KRzIxB,SAAgCsrE,EAA0BC,EAA2B/sE,GAC1F,MAAMjJ,EAAO61E,EAAsBE,EAAkBC,EAAmB/sE,GACxE6sE,EAAYC,EAAkBC,EAAmB/sE,IACjDuxE,EAAAA,EAAAA,IAAex6E,EACjB,CQsIkByhF,CAAuBtK,EAAa1sE,EAAOtK,EAAM,EAEnDkF,MAAO87E,EACPt3E,QAIE,QAHAo0E,EAAAA,aAAAA,EAAAA,EAAen9E,KAAKygF,IAAiB,CACnC92E,MAAO82E,EACPl8E,MAAOk8E,aAFTtD,IAAAA,EAAAA,EAGO,MAGTgD,GACA,kBAACl4D,OAAAA,CAAK/sB,UAAWJ,EAAOglF,sBACrBzC,GACC,kBAAC3F,GAAgCK,UAAS,CACxC14E,MAAOg+E,EACPjO,WAAY+N,EAAcv9E,SAG7By9E,GACC,kBAAC3F,GAAgCt3E,UAAS,CACxCf,MAAOg+E,EACPjO,WAAY+N,EAAcv9E,aAQpCugF,GAAsBC,GAAkB,kBAAC7K,EAAoBA,OAC7D4K,IAAuBC,GAAkBF,KAAcnC,aAAAA,EAAAA,EAAgBn+E,SAAU,kBAAC41E,EAAsBA,OACxG2K,IAAuBC,IAAmBF,KAAcnC,aAAAA,EAAAA,EAAgBn+E,SACxE,kBAACy3E,EAAeA,CAACjoD,UAAWinD,OAE1B8J,GAAsBC,IACxB,kBAACnlF,MAAAA,CAAIC,UAAWJ,EAAO+M,MACrB,kBAACA,EAAKzH,UAAS,CAACf,MAAOwI,IACvB,kBAAC5M,MAAAA,CAAIC,UAAWJ,EAAO6kF,gBACpBtC,GACC,kBAAC3F,GAAgCt3E,UAAS,CACxCgvE,WAAY+N,EAAcv9E,OAC1BP,MAAOg+E,O,sEChSpB,SAAShhC,EAAuBhiD,GAIrC,OACE,kBAACiyC,EAAAA,iBAAgBA,CACfvjC,QAAS,CACP,CACExE,MAAO,OACPoF,MAAO,OACP8pB,YAAa,sCAEf,CACElvB,MAAO,QACPoF,MAAO,QACP8pB,YAAa,wCAGjBl4B,KAAK,KACLoO,MAAOtP,EAAMiiD,QACbr1B,SAAU5sB,EAAM4sB,UAGtB,C,kLChBO,MAAMrD,UAA+Bg9D,EAAAA,GAYnCC,eAAAA,CAAgBxqE,GACrB,OAAOyqE,EAAAA,EAAAA,IAAGp6E,KAAK/G,MAAMoJ,QACvB,CAbA,YAAmB89C,GACjBx/C,M,sUAAM,EACJ5E,KAAM,SACNkH,MAAO,GACP9K,KAAM,GACNkK,QAAS,GACT3K,KAAM,IACHyoD,GAEP,EAKA,EAfWjjC,EAeGxjB,aAAY,EAAGf,YACpB0hF,EAAAA,EAAAA,IAAyB,CAAE1hF,W,mjBCoB/B,MAAMkM,EAqBX,yBACE,IAAI,cAAEy1E,EAAa,iBAAEC,EAAgB,kBAAEC,EAAiB,qBAAEC,GAAyBz6E,KAAK06E,0BACxF,MAAMC,EAAwC,GAc9C,MAbgB,CAACL,EAAeC,EAAkBC,EAAmBC,GAAsBthF,QACxFA,GAAWA,IAEN6J,SAAS43E,IACf,MAAMC,EAAe76E,KAAK86E,0BAA0BF,EAAiB,KAErE,IAAK,MAAMphF,KAAOohF,EAAiB,CACjC,MACMx3E,EADSw3E,EAAgBphF,GACP4J,SACxBu3E,EAAap3E,KAAK,CAAE/J,MAAK4J,WAAUH,MAAO43E,EAAarhF,IACzD,KAGKmhF,CACT,CAMA,UACE,IAAI,cACFL,EAAa,iBACbC,EAAgB,kBAChBC,EAAiB,qBACjBC,EAAoB,UACpBM,EAAS,WACTC,EAAU,UACVC,EAAS,WACTC,GACEl7E,KAAK06E,0BAEL16E,KAAKqC,QAAQuqD,MAajB,MAAMuuB,EAAgBn7E,KAAKo7E,4BAA4B,CACrDd,gBACAC,mBACAC,oBACAC,uBACAM,YACAC,aACAC,YACAC,e,IAKQ,EAFV,OAAIC,GAEyB,QAAnB,EAAAn7E,KAAKqC,QAAQge,cAAb,QAAuB,IAAM86D,EAGhC,EACT,CAEOE,aAAAA,CAAch5E,GAGnB,OADArC,KAAKqC,QAAU,KADiB,CAAEi5E,kBAAkB,EAAMC,eAAe,EAAO5nD,WAAY,WACrDtxB,GAChCrC,KAAKw7E,SACd,CAKA,gBAAuBn5E,GASrB,OADArC,KAAKqC,QAAU,KAPiB,CAC9Bo5E,gBAAiB,KACjBp7D,OAAQ,KACRi7D,kBAAkB,EAClBC,eAAe,EACf5nD,WAAY,SAEyBtxB,GAChCrC,KAAKw7E,SACd,CAKA,cAAqBn5E,GAUnB,OADArC,KAAKqC,QAAU,KARiB,CAC9Bo5E,gBAAiB,KACjBp7D,OAAQ,KACRi7D,kBAAkB,EAClBC,eAAe,EACf5nD,WAAY,SAGyBtxB,GAChCrC,KAAKw7E,SACd,CAMA,cAAqBn5E,GASnB,OADArC,KAAKqC,QAAU,KAPiB,CAC9Bo5E,gBAAiB,KACjBp7D,OAAQ,KACRi7D,kBAAkB,EAClBC,eAAe,EACf5nD,WAAY,SAEyBtxB,GAChCrC,KAAKw7E,SACd,CAKA,6BAAoC,cAClClB,EAAa,iBACbC,EAAgB,kBAChBC,EAAiB,qBACjBC,EAAoB,UACpBM,EAAS,WACTC,EAAU,UACVC,EAAS,WACTC,IAWA,IAAIQ,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGJ,MAAMC,EAAuB,G,IAoDmC,EAlD5Dl8E,KAAKqC,QAAQi5E,kBAEfI,EAAsB17E,KAAK86E,0BAA0BR,EAAe,KACpEqB,EAA0B37E,KAAK86E,0BAA0BP,EAAkB,KAC3EqB,EAA2B57E,KAAK86E,0BAA0BN,EAAmB,KAC7EqB,EAA8B77E,KAAK86E,0BAA0BL,EAAsB,KAEnFyB,EAAW34E,QAAQvD,KAAKm8E,mBAAmBT,EAAqBU,EAAAA,GAAcl3E,QAC9Eg3E,EAAW34E,QAAQvD,KAAKm8E,mBAAmBR,EAAyBS,EAAAA,GAAcxpD,WAClFspD,EAAW34E,QAAQvD,KAAKm8E,mBAAmBP,EAA0BQ,EAAAA,GAAcC,aACnFH,EAAW34E,QAAQvD,KAAKm8E,mBAAmBN,EAA6BO,EAAAA,GAAcE,kBAGtFZ,EAAsB17E,KAAKu8E,gBAAgBjC,GAC3CqB,EAA0B37E,KAAKu8E,gBAAgBhC,GAC/CqB,EAA2B57E,KAAKu8E,gBAAgB/B,GAChDqB,EAA8B77E,KAAKu8E,gBAAgB9B,GAEnDyB,EAAW34E,QAAQvD,KAAKw8E,YAAYd,EAAqBU,EAAAA,GAAcl3E,QACvEg3E,EAAW34E,QAAQvD,KAAKw8E,YAAYb,EAAyBS,EAAAA,GAAcxpD,WAC3EspD,EAAW34E,QAAQvD,KAAKw8E,YAAYZ,EAA0BQ,EAAAA,GAAcC,aAC5EH,EAAW34E,QAAQvD,KAAKw8E,YAAYX,EAA6BO,EAAAA,GAAcE,iBAIjFR,EAAmB97E,KAAKu8E,gBAAgBxB,GACxCgB,EAAoB/7E,KAAKu8E,gBAAgBvB,GACzCgB,EAAmBh8E,KAAKu8E,gBAAgBtB,GACxCgB,EAAoBj8E,KAAKu8E,gBAAgBrB,GAEzCgB,EAAW34E,QAAQvD,KAAKw8E,YAAYV,EAAkBW,EAAAA,GAAgBlqD,KACtE2pD,EAAW34E,QAAQvD,KAAKw8E,YAAYT,EAAmBU,EAAAA,GAAgBjqD,MACvE0pD,EAAW34E,QAAQvD,KAAKw8E,YAAYR,EAAkBS,EAAAA,GAAgBpqD,KACtE6pD,EAAW34E,QAAQvD,KAAKw8E,YAAYP,EAAmBQ,EAAAA,GAAgBnqD,MAEnEtyB,KAAKqC,QAAQuqD,MAejB,MAAM8vB,GAAmB/nB,EAAAA,EAAAA,MAAK30D,KAAK28E,cAAcT,EAAY,GAA+B,QAA5B,EAAAl8E,KAAKqC,QAAQo5E,uBAAb,QAAgC,SAMhG,OAJIz7E,KAAKqC,QAAQuqD,MAIV8vB,CACT,CAKA,0BAEE,MACE,CAACN,EAAAA,GAAcl3E,OAAQ03E,EACvB,CAACR,EAAAA,GAAcxpD,UAAWiqD,EAC1B,CAACT,EAAAA,GAAcC,YAAaS,EAC5B,CAACV,EAAAA,GAAcE,eAAgBS,EAC/B,CAACN,EAAAA,GAAgBlqD,IAAKA,EACtB,CAACkqD,EAAAA,GAAgBjqD,KAAMA,EACvB,CAACiqD,EAAAA,GAAgBpqD,IAAKA,EACtB,CAACoqD,EAAAA,GAAgBnqD,KAAMA,GACrBtyB,KAAKg9E,kBAAkBh9E,KAAKlB,SAEhC,IAAIw7E,EACAC,EACAC,EACAC,EAEAM,EACAC,EACAC,EACAC,EA0CJ,OAvCIl7E,KAAKqC,QAAQi5E,kBACfhB,EAAgBt6E,KAAKi9E,qBAAqBL,EAAOR,EAAAA,GAAcC,YAC/D9B,EAAmBv6E,KAAKi9E,qBAAqBJ,EAAUT,EAAAA,GAAcE,eACrE9B,EAAoBx6E,KAAKi9E,qBAAqBH,GAC9CrC,EAAuBz6E,KAAKi9E,qBAAqBF,KAEjDzC,EAAgBt6E,KAAKi9E,qBAAqBL,GAC1CrC,EAAmBv6E,KAAKi9E,qBAAqBJ,GAC7CrC,EAAoBx6E,KAAKi9E,qBAAqBH,GAC9CrC,EAAuBz6E,KAAKi9E,qBAAqBF,IAInDhC,EAAY/6E,KAAKi9E,qBAAqB1qD,GACtCyoD,EAAah7E,KAAKi9E,qBAAqBzqD,GACvCyoD,EAAYj7E,KAAKi9E,qBAAqB5qD,GACtC6oD,EAAal7E,KAAKi9E,qBAAqB3qD,GAEnCtyB,KAAKqC,QAAQuqD,MASb5sD,KAAKqC,QAAQi5E,mBAEXhB,IACFE,EAAoBx6E,KAAKk9E,aAAad,EAAAA,GAAcC,WAAY/B,EAAeE,GAC/EF,EAAgBt6E,KAAKm9E,qBAAqB7C,EAAe8B,EAAAA,GAAcl3E,QAErEq1E,IACFE,EAAuBz6E,KAAKk9E,aAAad,EAAAA,GAAcE,cAAe/B,EAAkBE,GACxFF,EAAmBv6E,KAAKm9E,qBAAqB5C,EAAkB6B,EAAAA,GAAcxpD,YAI1E,CACL0nD,gBACAC,mBACAC,oBACAC,uBACAM,YACAC,aACAC,YACAC,aAEJ,CAKA,YAAoBp8E,EAA0BsE,GAC5C,MAAMg6E,EAA0B,GAEhC,IAAK,MAAM5jF,KAAOsF,EAAS,CACzB,MAAMu+E,EAA4C,GAC5Cl7E,EAASrD,EAAQtF,IACnB8jF,EAAAA,EAAAA,IAAkBl6E,GACpBjB,EAAOa,SAASC,GACdo6E,EAAgC95E,KAAKvD,KAAKu9E,kBAAkB/jF,EAAK4J,EAAUH,EAAO,OAGpFd,EAAOa,SAASC,GAAUo6E,EAAgC95E,KAAKvD,KAAKu9E,kBAAkB/jF,EAAK4J,EAAUH,OAGnGyB,EAAAA,EAAAA,IAAoBtB,GACtBg6E,EAAc75E,KAAK85E,EAAgCvxE,KAAK,IAAI9L,KAAKw9E,kCAEjEJ,EAAc75E,KAAK85E,EAAgCvxE,KAAK,IAAI9L,KAAKy9E,iCAErE,CAEA,OAAOL,CACT,CAKA,mBAA2B1B,EAA8Ct4E,GACvE,MAAMg6E,EAAgB,GACtB,IAAK,MAAM5jF,KAAOkiF,EAChB0B,EAAc75E,KAAKvD,KAAKu9E,kBAAkB/jF,EAAK4J,EAAUs4E,EAAoBliF,KAE/E,OAAO4jF,CACT,CAKA,qBAA6Bt+E,EAAqC4+E,GAChE,MAAM14E,EAAqC,CAAC,EAM5C,OALAqI,OAAOrD,KAAKlL,GAASkE,SAASxJ,IACxBsF,EAAQtF,GAAK4J,WAAas6E,IAC5B14E,EAAOxL,GAAOsF,EAAQtF,GACxB,IAEKwL,CACT,CAKA,aACE24E,EACAC,EACAC,GAiBA,OAf+BxwE,OAAOrD,KAAK4zE,GACxCzkF,QAAQK,GAAQokF,EAAYpkF,GAAK4J,WAAau6E,IAC9CrkF,KAAKE,IAAS,CAAE2I,OAAQy7E,EAAYpkF,GAAK2I,OAAQ3I,UAE7BwJ,SAAS86E,SACZ9nF,IAAd6nF,IACFA,EAAY,CAAE,CAACC,EAAatkF,KAAM,CAAE2I,OAAQ,GAAIiB,SAAUu6E,UAExB3nF,IAAhC6nF,EAAUC,EAAatkF,OACzBqkF,EAAUC,EAAatkF,KAAO,CAAE2I,OAAQ,GAAIiB,SAAUu6E,IAExDE,EAAUC,EAAatkF,KAAK2I,OAAOoB,QAC9BvD,KAAK+9E,2BAA2BH,EAAYE,EAAatkF,KAAMmkF,GAAAA,IAG/DE,CACT,CAKA,2BAAmCD,EAAoCD,G,IAE1BC,EAD3C,MAAMz7E,EAAmB,GAIzB,OAHIy7E,EAAYx6E,WAAau6E,IAAgC,QAAlBC,EAAAA,EAAYz7E,cAAZy7E,IAAAA,OAAAA,EAAAA,EAAoB1kF,SAC7DiJ,EAAOoB,QAAQq6E,EAAYz7E,QAEtBA,CACT,CAKA,0BACErD,EACAk/E,GAEA,MAAMC,EAAgD,CAAC,EACvD,IAAK,MAAMzkF,KAAOsF,EACXA,EAAQtF,GAAK2I,OAAOjJ,SAIzB+kF,EAAqBzkF,GAAOwG,KAAK28E,cAAc79E,EAAQtF,GAAK2I,OAAQ67E,IAGtE,OAAOC,CACT,CAKA,gBAAwBn/E,GACtB,MAAMm1B,EAAgC,CAAC,EACvC,IAAK,MAAMz6B,KAAOsF,EACXA,EAAQtF,GAAK2I,OAAOjJ,SAIzB+6B,EAAaz6B,GAAOsF,EAAQtF,GAAK2I,QAGnC,OAAO8xB,CACT,CAMA,cAAsB9xB,EAAkB67E,GACtC,OAAO77E,EAAO2J,KAAK,GAAGkyE,IACxB,CASA,qBACEE,EACAC,GAEA,IAAIC,EAA8D,CAAC,EAEnE,IAAK,MAAM5kF,KAAO0kF,EAAc,CAC9B,IAAKA,EAAa1kF,GAAKN,OACrB,SAGF,MAAMmlF,GAAkBC,EAAAA,EAAAA,IAAqBJ,EAAa1kF,GAAK,GAAG4J,UAC5Dm7E,EAAkBJ,QAAAA,EAA0BE,EAC5CG,EAAcN,EAAa1kF,GAAK,GAKtC,GAHA4kF,EAAgC5kF,GAAO,CAAE2I,OAAQ,GAAIiB,SAAUm7E,GAG9B,IAA7BL,EAAa1kF,GAAKN,OAAc,C,IAIhCslF,EAHF,MAAMC,EAAez+E,KAAK0+E,iBACxBF,EAAYp7E,SACZo7E,EAAYv7E,MACW,QAAvBu7E,EAAAA,EAAYt7E,mBAAZs7E,IAAAA,EAAAA,EAA2B,IAE7BJ,EAAgC5kF,GAAO,CAAE4J,SAAUi7E,EAAiBl8E,OAAQ,CAACs8E,IAEzEz+E,KAAKqC,QAAQuqD,KAGnB,KAAO,CACL,MAAMzqD,EAASnC,KAAK2+E,kBAAkBnlF,EAAK0kF,EAAcK,G,IAIvDH,EAHF,QAAsDpoF,IAAlDooF,EAAgC5kF,GAAK4J,SACvCg7E,EAAgC5kF,GAAO,CAAE4J,SAAUm7E,EAAiBp8E,eAEzB,QAA3Ci8E,EAAAA,EAAgC5kF,GAAK2I,cAArCi8E,IAAAA,GAAAA,EAA6C76E,QAAQpB,EAEzD,CACF,CAEA,OAAOi8E,CACT,CAKA,kBACE5kF,EACA0kF,EACAK,GAGA,OAAOL,EAAa1kF,GAAKF,KAAKH,I,IACyBA,E,OAArD6G,KAAK0+E,iBAAiBH,EAAiBplF,EAAO8J,MAAyB,QAAlB9J,EAAAA,EAAO+J,mBAAP/J,IAAAA,EAAAA,EAAsB,GAAG,GAElF,CAQA,iBAAyBiK,EAAkCH,EAAeC,GACxE,MAAM07E,GAActU,EAAAA,EAAAA,IAA4BrnE,GAGhD,GAAIjD,KAAKqC,QAAQk5E,cAAe,CAE9Bt4E,GADoBW,EAAAA,EAAAA,IAAyB,CAAEX,QAAOC,gBAClCD,KACtB,CAEA,OAAIA,IAAU0oC,EAAAA,IACR3rC,KAAKqC,QAAQuqD,MAIV3pD,GAGL27E,GACE5+E,KAAKqC,QAAQuqD,MAOViyB,EAAAA,GAAWC,iCAAgCvU,EAAAA,EAAAA,IAAgCtnE,MAEhFE,EAAAA,EAAAA,IAAgBC,IACdpD,KAAKqC,QAAQuqD,MAGViyB,EAAAA,GAAWE,gCAAgC97E,KAGhDjD,KAAKqC,QAAQuqD,MAIViyB,EAAAA,GAAWC,gCAAgC77E,GACpD,CAOA,kBAA0BzJ,EAAa4J,EAAkCojD,EAAkBw4B,EAAY,KACrG,GAAIx4B,IAAa7a,EAAAA,GACf,MAAO,GAAGnyC,IAAM4J,IAAWojD,IAG7B,MAAMi4B,EAAe,GAAGjlF,IAAM4J,IAAW47E,IAAYx4B,IAAWw4B,IAKhE,OAJIh/E,KAAKqC,QAAQuqD,MAIV6xB,CACT,CAKA,kBAA0B3/E,GACxB,IAAIk2E,EAAyCl2E,EAAQ3F,QAClDsL,I,IAAO,E,QAAuB,QAAvB,EAAAzE,KAAKqC,QAAQ48E,kBAAb,eAAyB5lF,SAASoL,EAAEjL,QAAQ2J,EAAAA,EAAAA,IAAgBsB,EAAErB,SAAS,IAIjD,YAA5BpD,KAAKqC,QAAQsxB,YACXqhD,EAAgB97E,OAAS,IAC3B87E,EAAkBl2E,GAItB,MAAMogF,EAAgBlK,EAAgB77E,QACnCA,IAAWuL,EAAAA,EAAAA,IAAoBvL,EAAOiK,aAAcD,EAAAA,EAAAA,IAAgBhK,EAAOiK,YAExE+7E,EAAgBnK,EAAgB77E,QACnCA,IAAWuL,EAAAA,EAAAA,IAAoBvL,EAAOiK,YAAaD,EAAAA,EAAAA,IAAgBhK,EAAOiK,YAEvE4e,EAAgBgzD,EAAgB77E,QACnCA,IAAWimF,EAAAA,EAAAA,IAAoBjmF,EAAOiK,aAAcD,EAAAA,EAAAA,IAAgBhK,EAAOiK,YAExE6e,EAAgB+yD,EAAgB77E,QACnCA,IAAWimF,EAAAA,EAAAA,IAAoBjmF,EAAOiK,YAAaD,EAAAA,EAAAA,IAAgBhK,EAAOiK,YAEvEivB,EAAK2iD,EAAgB77E,QAAQA,GAAWA,EAAOiK,WAAa6B,EAAAA,GAASotB,KACrEC,EAAM0iD,EAAgB77E,QAAQA,GAAWA,EAAOiK,WAAa6B,EAAAA,GAASqtB,MACtEC,EAAKyiD,EAAgB77E,QAAQA,GAAWA,EAAOiK,WAAa6B,EAAAA,GAASstB,KACrEC,EAAMwiD,EAAgB77E,QAAQA,GAAWA,EAAOiK,WAAa6B,EAAAA,GAASutB,MAGtE6sD,GAAqBC,EAAAA,EAAAA,SAAQJ,GAAgB/lF,GAAWA,EAAOK,MAC/D+lF,GAAqBD,EAAAA,EAAAA,SAAQH,GAAgBhmF,GAAWA,EAAOK,MAC/DgmF,GAAqBF,EAAAA,EAAAA,SAAQt9D,GAAgB7oB,GAAWA,EAAOK,MAC/DimF,GAAqBH,EAAAA,EAAAA,SAAQr9D,GAAgB9oB,GAAWA,EAAOK,MAG/DkmF,GAAUJ,EAAAA,EAAAA,SAAQjtD,GAAKl5B,GAAWA,EAAOK,MACzCmmF,GAAWL,EAAAA,EAAAA,SAAQhtD,GAAMn5B,GAAWA,EAAOK,MAC3ComF,GAAUN,EAAAA,EAAAA,SAAQ/sD,GAAKp5B,GAAWA,EAAOK,MACzCqmF,GAAWP,EAAAA,EAAAA,SAAQ9sD,GAAMr5B,GAAWA,EAAOK,MAEjD,MAAO,CACL,CAACyL,EAAAA,GAASC,OAAQm6E,EAClB,CAACp6E,EAAAA,GAASo3E,YAAakD,EACvB,CAACt6E,EAAAA,GAAS2tB,UAAW4sD,EACrB,CAACv6E,EAAAA,GAASq3E,eAAgBmD,EAC1B,CAACx6E,EAAAA,GAASotB,IAAKqtD,EACf,CAACz6E,EAAAA,GAASqtB,KAAMqtD,EAChB,CAAC16E,EAAAA,GAASstB,IAAKqtD,EACf,CAAC36E,EAAAA,GAASutB,KAAMqtD,EAEpB,CA3mBAn/E,WAAAA,CACE5B,EACAuD,EAAmB,CAAEi5E,kBAAkB,EAAMC,eAAe,EAAO5nD,WAAY,UAPjF,OAAQ70B,eAAR,GACA,OAAQuD,eAAR,GACA,OAAQm7E,+BAA+B,MACvC,OAAQC,+BAA+B,KAMrCz9E,KAAKlB,QAAUA,EACfkB,KAAKqC,QAAUA,EACVrC,KAAKqC,QAAQuqD,QAChB5sD,KAAKqC,QAAQuqD,OAAQkzB,EAAAA,EAAAA,MAEzB,E,6EC/DF,MAKa1jF,EAAuB,CAClC2jF,EACAt2E,EACAmiB,MAEAivB,EAAAA,EAAAA,mBAV4B,EAACklC,EAA0Bt2E,IAChD,GAAGmb,EAAAA,GAAc/hB,QAAQ,KAAM,QAAQk9E,KAAQt2E,IASpCu2E,CAAsBD,EAAMt2E,GAASmiB,EAAW,EAGvDvvB,EAAoB,CAC/B4oB,kBAAmB,oBACnB3oB,gBAAiB,kBACjBq0B,IAAK,OASMp0B,EAAsB,CACjC,CAACF,EAAkB4oB,mBAAoB,CAErCuzD,wBAAyB,0BAEzB/J,iBAAkB,mBAElBvpD,2BAA4B,6BAC5B6rD,eAAgB,kBAElB,CAAC10E,EAAkBC,iBAAkB,CACnC2jF,wBAAyB,0BAEzBhX,oBAAqB,sBAErBv1C,oCAAqC,sCAErCiO,kCAAmC,oCAEnCu2B,6BAA8B,+BAC9BhxB,+BAAgC,iCAEhCzB,oBAAqB,sBAErBosB,8BAA+B,gCAC/BruC,mCAAoC,qCAEpChnB,gBAAiB,kBAEjB89D,iBAAkB,mBAElB0C,sBAAuB,wBAEvBjK,0BAA2B,4BAE3ByC,2BAA4B,6BAE5BY,yBAA0B,2BAE1BX,4BAA6B,8BAE7B5gB,4BAA6B,8BAE7BrT,4BAA6B,8BAE7B0+C,mBAAoB,qBACpBpvD,gBAAiB,mBAEnB,CAACz0B,EAAkBs0B,KAAM,CACvBwvD,kBAAmB,oBACnBvvD,6BAA8B,gC,iECvE3B,MAAMzS,EAAiB,CAACiiE,EAAyBC,KAEtD,UAAWD,UAAgBC,EACzB,OAAO,EAET,MAAMC,EAAO,IAAI96E,IAAI46E,GACfG,EAAO,IAAI/6E,IAAI66E,GAGrB,OAAIC,EAAKzrF,OAAS0rF,EAAK1rF,MAIhBoT,IAAAA,QAAUq4E,EAAMC,EAAK,EAGjB5vB,EAAyB,CAACyvB,EAAyBC,WAEnDD,UAAgBC,GAGpBp4E,IAAAA,QAAUm4E,EAAMC,E,uuCCVlB,SAASG,EAAYl5E,GAE1B,OAAOA,EAAMqtD,OAAOz7D,OAAS,IAhBxB,SAAyBoO,EAAem5E,GAC7C,IAAIC,GAAkB,EAUtB,OATah9E,EAAAA,GAAOoQ,MAAMxM,GACrBq5E,QAAQ,CACXC,MAAO,EAAG7kF,WACR,GAAIA,EAAK8vB,KAAO40D,EAEd,OADAC,GAAkB,GACX,CACT,IAGGA,CACT,CAIqCA,CAAgBp5E,EAAOu5E,EAAAA,GAC5D,CAUO,SAASC,EAAwBjhB,GACtC,GATK,SAAuBA,GAC5B,YAAoE7pE,IAA7D6pE,EAAQtC,QAAQn5C,MAAM9c,GAAUk5E,EAAYl5E,EAAM9F,OAC3D,CAOMu/E,CAAclhB,GAChB,OAAO,EAET,GARK,SAAwBA,GAC7B,OAAOA,EAAQtC,QAAQn5C,MAAM9c,GAA8B,YAApBA,EAAMumE,WAC/C,CAMMmT,CAAenhB,GACjB,OAAO,EAET,IAAK,IAAIh3D,EAAI,EAAGA,EAAIg3D,EAAQtC,QAAQrkE,OAAQ2P,IAAK,C,IAC3Cg3D,EAAJ,GAA2B,QAAvBA,EAAAA,EAAQtC,QAAQ10D,GAAGrH,YAAnBq+D,IAAAA,OAAAA,EAAAA,EAAyBxmE,SAAS,iBACpC,OAAO,CAEX,CACA,OAAO,CACT,CAEA,MAAM4nF,EAAuB,0BAChBC,EAAkC55E,GACtCA,EAAMzE,QAAQ,IAAK,wBAAwBo+E,OAGvCE,EAA8B,CAACl3D,EAAsBm3D,KAChE,QAAeprF,IAAXorF,GAA0C,IAAlBA,EAAOloF,OACjC,OAAO+wB,EAAQ3wB,KAAKgO,GAAW,OAC1BA,GAAAA,CACH9F,KAAM8F,EAAM9F,KAAKqB,QAAQ,wBAAwBo+E,MAA0B,SAI/E,IAAII,EAAaD,EAAOt1E,KAAK,KAG7B,MAAmB,OAAfu1E,GAAyC,IAAlBD,EAAOloF,QAChCmoF,EAA4B,OAAfA,EAAsB,GAAKA,EACjCp3D,EAAQ3wB,KAAKgO,GAAW,OAC1BA,GAAAA,CACH9F,KAAM8F,EAAM9F,KAAKqB,QAAQ,wBAAwBo+E,MAA0B,uBAAuBI,YAI/Fp3D,EAAQ3wB,KAAKgO,GAAW,OAC1BA,GAAAA,CACH9F,KAAM8F,EAAM9F,KAAKqB,QAAQ,IAAIy+E,OAAO,GAAGL,IAAwB,KAAMI,M,w5BC7DlE,SAASE,EAAiBC,EAAyCC,GACxE,IAAKD,EACH,OAqMkB,OADaniE,EApMLoiE,GAsMvBpiE,CACHyL,KAAMzL,EAASyL,KAAKxxB,IAAIooF,KAHrB,IAA4BriE,EAxLPmiE,EAAiCC,EAT3DA,EAAU32D,KAAK9nB,SAAS4gE,IACtB,MAAM+d,EAAeH,EAAc12D,KAAK1G,MAAM+G,GAkNlD,SAAuBy2D,EAAmBC,G,IAQrBD,EACAC,EAeCD,EAAAA,EACAC,EAAAA,EAxBpB,GAAID,EAAO13D,QAAU23D,EAAO33D,MAC1B,OAAO,EAET,GAAmB,MAAf03D,EAAOlqF,MAA+B,MAAfmqF,EAAOnqF,MAAgBkqF,EAAOlqF,OAASmqF,EAAOnqF,KACvE,OAAO,EAGT,MAAMoqF,EAAwB,QAAXF,EAAAA,EAAOn+E,YAAPm+E,IAAAA,OAAAA,EAAAA,EAAa7lF,KAC1BgmF,EAAwB,QAAXF,EAAAA,EAAOp+E,YAAPo+E,IAAAA,OAAAA,EAAAA,EAAa9lF,KAEhC,GAAI+lF,IAAeC,EAEjB,OAAO,EAIT,GAAID,IAAel3B,EAAAA,cAAco3B,gBAC/B,OAoBJ,SAAuBJ,EAAmBC,GACxC,MAAMI,EAASL,EAAOj6E,OAAOyc,MAAM3f,GAAMA,EAAE1I,OAAS6lD,EAAAA,UAAU8B,SACxDw+B,EAASL,EAAOl6E,OAAOyc,MAAM3f,GAAMA,EAAE1I,OAAS6lD,EAAAA,UAAU8B,SAC9D,QAAe1tD,IAAXisF,QAAmCjsF,IAAXksF,EAE1B,OAAO,EAGU,MAAfN,EAAOlqF,OACTkqF,EAAOlqF,KAAOmM,KAAKC,UAAUm+E,EAAOl6D,SAEnB,MAAf85D,EAAOnqF,OACTmqF,EAAOnqF,KAAOmM,KAAKC,UAAUo+E,EAAOn6D,SAEtC,OAAO65D,EAAOlqF,OAASmqF,EAAOnqF,IAChC,CAnCWyqF,CAAcP,EAAQC,GAM/B,MAAMO,EAAyB,QAAXR,EAAAA,EAAOn+E,YAAPm+E,IAAAA,GAAmB,QAAnBA,EAAAA,EAAa13B,cAAb03B,IAAAA,OAAAA,EAAAA,EAAqBS,UACnCC,EAAyB,QAAXT,EAAAA,EAAOp+E,YAAPo+E,IAAAA,GAAmB,QAAnBA,EAAAA,EAAa33B,cAAb23B,IAAAA,OAAAA,EAAAA,EAAqBQ,UAEzC,GAAoB,sBAAhBD,GAAuD,sBAAhBE,EACzC,OAAO,EACF,GAAIF,IAAgBE,EAEzB,OAAO,EAIT,OAAO,CACT,CAtP4DC,CAAcp3D,EAAOy4C,KACxE+d,EAqCF,SAAqBa,EAAiB7wD,G,IAmET6wD,EAAwB7wD,EAlE1D,MAAM8wD,EAAgBD,EAAK76E,OAAOyc,MAAM5d,GAAUA,EAAMzK,OAAS6lD,EAAAA,UAAUC,OACrE6gC,EAAcF,EAAK76E,OAAOyc,MAAM5d,GAAUA,EAAMzK,OAAS6lD,EAAAA,UAAU+E,QAAyB,OAAfngD,EAAM9O,OACnFirF,EAAkBhxD,EAAOhqB,OAAOyc,MAAM5d,GAAUA,EAAMzK,OAAS6lD,EAAAA,UAAUC,OACzE+gC,EAAgBjxD,EAAOhqB,OAAOyc,MAAM5d,GAAUA,EAAMzK,OAAS6lD,EAAAA,UAAU+E,QAAyB,OAAfngD,EAAM9O,OAE7F,IAAK+qF,IAAkBE,EAErB,YADAthF,EAAAA,EAAOW,MAAM,IAAIC,MAAM,6C,IAIA0gF,EAAzB,MAAME,EAAiD,QAA9BF,EAAAA,aAAAA,EAAAA,EAAiBxgF,OAAOiL,MAAM,UAA9Bu1E,IAAAA,EAAAA,EAAoC,GACvDG,EAAcroF,KAAKuS,IAAIw1E,EAAK76E,OAAOzO,OAAQy4B,EAAOhqB,OAAOzO,QAE/D,IAAK,IAAI2P,EAAI,EAAGA,EAAIg6E,EAAiB3pF,OAAQ2P,IAAK,CAChD,MAAMk6E,EAAUC,EAAWP,EAAeE,EAAiB95E,GAErDo6E,EAAoBC,EAAeT,EAAeC,EAAaK,EAASJ,EAAiBC,EAAe/5E,GAE9G,IAAK,IAAIpE,EAAI,EAAGA,EAAIq+E,EAAar+E,IAAK,CAEpC,IAAK+9E,EAAK76E,OAAOlD,GACf,SAIF,MAAM0+E,EAAcC,EAAgBZ,EAAK76E,OAAOlD,GAAIktB,EAAOhqB,OAAQlD,GACnE,GAAK0+E,EAIL,GAAIF,EAAmB,CACrB,GAAIT,EAAK76E,OAAOlD,GAAG1I,OAAS6lD,EAAAA,UAAUC,KAEpC,S,IAGkC2gC,EAFzBA,EAAK76E,OAAOlD,GAAG1I,OAAS6lD,EAAAA,UAAU8B,OAE3C8+B,EAAK76E,OAAOlD,GAAGtC,OAAO4gF,IAA0C,QAA9BP,EAAAA,EAAK76E,OAAOlD,GAAGtC,OAAO4gF,UAAtBP,IAAAA,EAAAA,EAAkC,GAAKW,EAAYhhF,OAAO0G,GACnF25E,EAAK76E,OAAOlD,GAAG1I,OAAS6lD,EAAAA,UAAUmD,MAEN,iBAA1Bo+B,EAAYhhF,OAAO0G,GAC5B25E,EAAK76E,OAAOlD,GAAGtC,OAAO4gF,GAAW,KAC5BP,EAAK76E,OAAOlD,GAAGtC,OAAO4gF,GACtBI,EAAYhhF,OAAO0G,IAEU,MAAzBs6E,EAAYhhF,OAAO0G,KAC5B25E,EAAK76E,OAAOlD,GAAGtC,OAAO4gF,GAAWI,EAAYhhF,OAAO0G,IAItD25E,EAAK76E,OAAOlD,GAAGtC,OAAO4gF,GAAWI,EAAYhhF,OAAO0G,EAExD,MAAO,QAA8B7S,IAA1BmtF,EAAYhhF,OAAO0G,GAAkB,C,IAK5C25E,EADuBA,EADzB,GADAA,EAAK76E,OAAOlD,GAAGtC,OAAO+J,OAAO62E,EAAS,EAAGI,EAAYhhF,OAAO0G,IACxDs6E,EAAYE,MACdb,EAAK76E,OAAOlD,GAAG4+E,MAA4B,QAApBb,EAAAA,EAAK76E,OAAOlD,GAAG4+E,aAAfb,IAAAA,EAAAA,EAAwB,IAAIx8E,MAAMw8E,EAAK76E,OAAOlD,GAAGtC,OAAOjJ,OAAS,GAAGtE,KAAK,GAC5E,QAApB4tF,EAAAA,EAAK76E,OAAOlD,GAAG4+E,aAAfb,IAAAA,GAAAA,EAAsBt2E,OAAO62E,EAAS,EAAGI,EAAYE,MAAMx6E,GAE/D,CACF,CACF,C,IAMkC25E,EAAwB7wD,EAJ1D6wD,EAAKtpF,OAASspF,EAAK76E,OAAO,GAAGxF,OAAOjJ,OAEpCspF,EAAK/+E,KAAO,OACP++E,EAAK/+E,MAAI,CACZo4D,MAAOynB,EAAyC,QAAhBd,EAAS,QAATA,EAAAA,EAAK/+E,YAAL++E,IAAAA,OAAAA,EAAAA,EAAW3mB,aAAX2mB,IAAAA,EAAAA,EAAoB,GAAsB,QAAlB7wD,EAAW,QAAXA,EAAAA,EAAOluB,YAAPkuB,IAAAA,OAAAA,EAAAA,EAAakqC,aAAblqC,IAAAA,EAAAA,EAAsB,KAElF,CAtGI4xD,CAAY5B,EAAc/d,GAHxB4d,EAAc12D,KAAKvnB,KAAKm+E,EAAe9d,GAGN,IAGrC,MAAM4f,EAAe,IAAyB,QAApBhC,EAAAA,EAAc7mD,cAAd6mD,IAAAA,EAAAA,EAAwB,MAAyB,QAAhBC,EAAAA,EAAU9mD,cAAV8mD,IAAAA,EAAAA,EAAoB,I,IAc3DD,EAThBgC,EAAatqF,OAAS,IACxBsoF,EAAc7mD,OAAS6oD,GAQzB,MAAMC,EAAiC,QAAnBjC,EAAAA,EAAcx/E,aAAdw/E,IAAAA,EAAAA,EAAuBC,EAAUz/E,M,IAKzBw/E,EAAmCC,EAJ5C,MAAfgC,IACFjC,EAAcx/E,MAAQyhF,GAGxB,MAAMC,EAAiB,IAA2B,QAAtBlC,EAAAA,EAAc5hB,gBAAd4hB,IAAAA,EAAAA,EAA0B,MAA2B,QAAlBC,EAAAA,EAAU7hB,gBAAV6hB,IAAAA,EAAAA,EAAsB,IAKrF,OAJIiC,EAAexqF,OAAS,IAC1BsoF,EAAc5hB,SAAW8jB,GAGpBlC,CACT,CA4EA,SAASwB,EAAWW,EAAkBR,EAAoB3+D,GACxD,MAAMo/D,GAAMC,EAAAA,EAAAA,YAAWV,EAAYhhF,OAAOqiB,GAAQm/D,EAAUxhF,QAC5D,OAAIyhF,EAAM,EACD,EAELT,EAAYhhF,OAAOqiB,KAAWm/D,EAAUxhF,OAAOyhF,IAA6B,MAArBT,EAAYE,OAAoC,MAAnBM,EAAUN,MACzFF,EAAYE,MAAM7+D,GAASm/D,EAAUN,MAAMO,GAAOA,EAAM,EAAIA,EAEjET,EAAYhhF,OAAOqiB,GAASm/D,EAAUxhF,OAAOyhF,GACxCA,EAAM,EAERA,CACT,CAEA,SAASV,EACPT,EACAC,EACAoB,EACAnB,EACAC,EACAhkC,GAEA,MAAMmlC,EAaR,SAA6BJ,EAAkBG,EAAmBX,EAAoBvkC,GACpF,GAAI+kC,EAAUN,OAASF,EAAYE,MACjC,YACkCrtF,IAAhC2tF,EAAUxhF,OAAO2hF,IACjBH,EAAUxhF,OAAO2hF,KAAeX,EAAYhhF,OAAOy8C,SACpB5oD,IAA/B2tF,EAAUN,MAAMS,IAChBH,EAAUN,MAAMS,KAAeX,EAAYE,MAAMzkC,GAGrD,YAAuC5oD,IAAhC2tF,EAAUxhF,OAAO2hF,IAA4BH,EAAUxhF,OAAO2hF,KAAeX,EAAYhhF,OAAOy8C,EACzG,CAvBwBolC,CAAoBvB,EAAeqB,EAAWnB,EAAiB/jC,GACrF,QAAKmlC,IAGc,MAAfrB,GAAwC,MAAjBE,QAKS5sF,IAAlC0sF,EAAYvgF,OAAO2hF,IAA4BpB,EAAYvgF,OAAO2hF,KAAelB,EAAczgF,OAAOy8C,GAE1G,CAcA,SAASwkC,EAAgBa,EAAuBC,EAAuB1/D,GACrE,MAAM2/D,EAAaD,EAAa/qF,QAAQsL,GAAMA,EAAE/M,OAASusF,EAAevsF,OAExE,OAA0B,IAAtBysF,EAAWjrF,OACNirF,EAAW,GAGbD,EAAa1/D,EACtB,CAEA,MAAM4/D,EAAmB,iCAEzB,SAASd,EACPe,EACAC,GAGA,MAAMC,EAAWF,EAAUjgE,MAAMogE,GAAMA,EAAEt4D,cAAgBk4D,IACnDK,EAAaH,EAAYlgE,MAAMogE,GAAMA,EAAEt4D,cAAgBk4D,IAE7D,GAAkB,MAAdK,GAAkC,MAAZF,EACxB,MAAO,CAAC,CAAEthF,MAAOwhF,EAAWxhF,MAAQshF,EAASthF,MAAOipB,YAAak4D,EAAkBn8C,KAAMs8C,EAASt8C,OAIpG,MAAMy8C,EAAaD,QAAAA,EAAcF,EACjC,OAAkB,MAAdG,EACK,CAACA,GAGH,EACT,CAaA,SAAShD,EAAev2D,GACtB,OAAO,OACFA,GAAAA,CACHxjB,OAAQwjB,EAAMxjB,OAAOrO,KAAKkN,GAAkB,OACvCA,GAAAA,CACHrE,OAAQqE,EAAMrE,YAGpB,C,w4BCrLO,SAASwiF,EAAmBvgF,EAA4By7D,GAC7D,MAAM51C,EAAU7lB,EACbwgF,8BAA8B/kB,EAAQtC,QAASsC,EAAQ15D,YACvDhN,QAAQmO,GAAUA,EAAM9F,OACxBlI,KAAKrC,GAAY,OACbA,GAAAA,CACHuK,KAAM0/E,EAA+BjqF,EAAOuK,UAGhD,OAGF,SACE4C,EACAy7D,EACAglB,GAEA,IAAIC,GAAa,EACbC,EAAoC,CAAEj6D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAaE,UAAWt9B,KAAKwrF,EAAAA,EAAAA,MACpFC,EAA4C,KAC5CC,EAAa,IAAIvnD,IACjBwnD,EAAmD,KAEvD,MAAMC,EAAiB,CACrBC,EACAC,EACAlE,EACAmE,KAEA,IAAIC,EAAgBD,EAChBE,GAAW,EAEa,MAAxBR,IACFA,EAAqBnyE,cACrBmyE,EAAuB,MAGzB,MAAMS,EAAO,KACXX,EAAe9rF,MAAQ6rF,EAAaluD,EAAAA,aAAa30B,MAAQ20B,EAAAA,aAAaC,KACtEwuD,EAAWM,KAAKZ,GAChBM,EAAWO,UAAU,EAGvB,GAAId,EAEF,YADAY,IAIF,MAAMG,EAAc,KAClB,MAAMC,EAAYrrF,KAAKg1C,IAAI61C,EAAQC,EAAWnE,EAAOloF,QACjDosF,EAAQlE,EAAOloF,QAAU4sF,GAAa1E,EAAOloF,OAC/CksF,EAAeC,EAAYS,EAAW1E,EAAQoE,GAGhDE,GAAM,EAGFK,EAAS/xB,IACb,IACE,GAAIA,IAuMZ,SAA0BA,G,IAGpBA,EADCA,EACDA,EAFJ,MAAMv9D,EAAUu9D,EAAcr5B,QACM,QAA/Bq5B,EAAAA,EAAcr5B,OAAO,GAAGlkC,eAAxBu9D,IAAAA,EAAAA,EAAmC,IAAI3qD,cACZ,QAA5B2qD,EAAmB,QAAnBA,EAAAA,EAAchyD,aAAdgyD,IAAAA,OAAAA,EAAAA,EAAqBv9D,eAArBu9D,IAAAA,EAAAA,EAAgC,GACpC,GAAIv9D,EAAQ4C,SAAS,WACnB,OAAO,EACF,GAAI5C,EAAQ4C,SAAS,eAE1B,MAAM,IAAI4I,MAAMxL,GAElB,OAAO,CACT,CAlN8BuvF,CAAiBhyB,GACrC,OAAO,CAEX,CAAE,MAAO/vD,G,IAGE+vD,EACCA,EACAA,EAFDA,EACCA,EACAA,EAGV,OAPA3yD,EAAAA,EAAOW,MAAMiC,EAAG,CACdD,IAAK,uBACLhC,MAAoC,QAA7BgyD,EAAAA,SAAoB,QAApBA,EAAAA,EAAehyD,aAAfgyD,IAAAA,OAAAA,EAAAA,EAAsBv9D,eAAtBu9D,IAAAA,EAAAA,EAAiC,GACxCr5B,OAA0D,QAAlDq5B,EAAAA,SAAqB,QAArBA,EAAAA,EAAer5B,cAAfq5B,IAAAA,OAAAA,EAAAA,EAAuB16D,KAAK2K,GAAMA,EAAExN,UAASqV,KAAK,cAAlDkoD,IAAAA,EAAAA,EAA4D,GACpEiyB,OAAsC,QAA9BjyB,EAAAA,SAAuB,QAAvBA,EAAAA,EAAe4L,gBAAf5L,IAAAA,OAAAA,EAAAA,EAAyBloD,KAAK,YAA9BkoD,IAAAA,EAAAA,EAAsC,KAEhD8wB,GAAa,GACN,CACT,CAEA,GAAIS,EAAY,EAKd,OAHA34B,EAAM,qCADN24B,EAAY9qF,KAAKyrF,MAAMzrF,KAAK0rF,KAAKZ,OAEjCE,GAAW,EACXL,EAAeC,EAAYC,EAAOlE,EAAQmE,IACnC,E,IAGOL,EAAhB,MAAMkB,EAAyBd,QAAfJ,EAAAA,EAAWrjF,IAAIyjF,UAAfJ,IAAAA,EAAAA,EAAyB,EACzC,OAAIkB,EAAU,GACZtB,GAAa,GACN,IAGTI,EAAWrnD,IAAIynD,EAAOc,EAAU,GAEhCjB,EAAah3E,YAAW,KACtB9M,EAAAA,EAAOqN,KAAK,YAAY42E,MAAUc,EAAU,MAC5ChB,EAAeC,EAAYC,EAAOlE,EAAQmE,GAC1CJ,EAAa,IAAI,GAChB,KAAO1qF,KAAK4rF,IAAI,EAAGD,IAEtBX,GAAW,GAEJ,EAAI,EAGPa,EAmJV,SAA4BlF,EAAkBj6E,EAAeo+E,GAC3D,GAAIp+E,IAAUi6E,EAAOloF,OACnB,MAAO,EAAE,GAEX,OAAOkoF,EAAOh0E,MAAMjG,EAAOA,EAAQo+E,EACrC,CAxJ0BgB,CAAmBnF,EAAQkE,EAAOC,GACxD34B,EAAM,YAAY05B,EAAcx6E,KAAK,SACrC,MAAM06E,EAAa,OAAK3mB,GAAAA,CAAStC,QAAS4jB,EAA4B0D,EAAkByB,KAEpFzmB,EAAQxC,YACVmpB,EAAWnpB,UAAY,GAAGwC,EAAQxC,mBAAmBioB,KAASC,KAIhEN,EAAuB7gF,EAAWg1B,SAASotD,GAAY31E,UAAU,CAC/D80E,KAAOc,I,IACAA,IAAsB,QAAtBA,EAAAA,EAAgB9rD,cAAhB8rD,IAAAA,EAAAA,EAA0B,IAAIvtF,OAAS,GAA8B,MAAzButF,EAAgBzkF,QAC3D+jF,EAAMU,KAIZjB,EA8HR,SAA4BF,EAAeC,EAAmBnE,GAC5D,MAAMsF,EAAY,GAClB,OAAOjsF,KAAKg1C,IAAI81C,EAAW9qF,KAAKuS,IAAIvS,KAAKyrF,OAAO9E,EAASkE,GAASoB,GAAY,GAChF,CAjIwBC,CACdrB,EAAQC,EAyFlB,SAAqClmE,EAA6BunE,G,IAMLvnE,EAAAA,EAL3D,IAAKA,EAASyL,KAAK5xB,OAEjB,OAAO0tF,EAAc,EAGvB,MAAMC,EAA0E,QAArBxnE,EAAAA,EAASyL,KAAK,GAAGrnB,YAAjB4b,IAAAA,GAA4B,QAA5BA,EAAAA,EAAuBw8C,aAAvBx8C,IAAAA,OAAAA,EAAAA,EAA8B+E,MACtF+3C,GAAmD,uBAArBA,EAAKjwC,cAGtC,GAAI26D,EAAmB,CACrB,MAAMC,EAAgBrsF,KAAKC,MAAMmsF,EAAkB5jF,OAGnD,OAFA2pD,EAAM,GAAGi6B,EAAkB5jF,SAEvB6jF,GAAiB,EACZrsF,KAAKyrF,MAAoB,IAAdU,GACTE,EAAgB,EAClBrsF,KAAKy0D,KAAmB,IAAd03B,GAIC,IAAhBA,EACKA,EACEE,EAAgB,GAClBrsF,KAAKy0D,KAAmB,GAAd03B,GAEVnsF,KAAKyrF,MAAMU,EAAc,EAEpC,CAEA,OAAOA,CACT,CAvHUG,CAA4BN,EAAiBlB,GAC7CnE,EAAOloF,QAELssF,IAAkBD,GACpB34B,EAAM,kBAAkB44B,KAE1BT,EAAiBxD,EAAiBwD,EAAgB0B,GAAgB,EAEpEb,SAAU,KACJH,IAIAV,EAAej6D,KAAK5xB,QACtBmsF,EAAWM,KAAKZ,GAElBc,IAAa,EAEf7jF,MAAQA,IACNX,EAAAA,EAAOW,MAAMA,EAAO,CAAEgC,IAAK,oBAC3BqhF,EAAWM,KAAKZ,GACZgB,KAGJF,GAAa,GAEf,EAGEmB,EAAsB3B,IAC1BJ,EAAuB7gF,EAAWkD,MAAMu4D,GAAShvD,UAAU,CACzD80E,KAAOc,IACL1B,EAAiB0B,CAAe,EAElCb,SAAU,KACRP,EAAWM,KAAKZ,EAAe,EAEjC/iF,MAAQA,IACNX,EAAAA,EAAOW,MAAMA,EAAO,CAAEgC,IAAK,0CAC3BqhF,EAAWrjF,MAAM+iF,EAAe,GAElC,EAGE1lE,EAAW,IAAI4nE,EAAAA,YAA+B5B,IAClD,MAAM6B,EFnI+B,CAAC5/E,IACxC,MAAM4/E,GAAWC,EAAAA,EAAAA,IAAkB7/E,EAAO,CAACuxB,EAAAA,KAC3C,OAAIquD,EAAShuF,OAAS,EACboO,EACJxM,UAAUosF,EAAS,GAAGhvE,KAAMgvE,EAAS,GAAGlvE,IACxCnV,QAAQ,wBAAwBo+E,MAA0B,KAExD,EAAE,EE4HUmG,CAA0BvC,EAAiB,GAAGrjF,MAE/D,OAAK6lF,EAAAA,EAAAA,IAAaH,IAMlB9iF,EAAWlC,iBACRolF,iBAAiB,mBAAoB,CACpCloF,UAAWygE,EAAQ94D,MACnB0vD,eAAgBywB,QAAsBlxF,IAEvC0oB,MAAMvc,IACL,MAAMi/E,EAASj/E,EAAO7I,KAAK2J,GAAU0G,SAAS1G,EAAO,MAChDm+E,GAAWA,EAAOloF,QAIrBkoF,EAAO37E,MAAK,CAACzO,EAAG0O,IAAMA,EAAI1O,IAC1B41D,EAAM,YAAYw0B,EAAOt1E,KAAK,gBAC9Bs5E,EAAeC,EAAY,EAAGjE,EAsExC,SAA6BA,GAC3B,OAAO3mF,KAAKyrF,MAAMzrF,KAAK0rF,KAAK/E,EAAOloF,QACrC,CAxEgDquF,CAAoBnG,MAL1D//E,EAAAA,EAAOC,KAAK,2DACZ0lF,EAAmB3B,GAKrB,IAEDmC,OAAOvjF,IACN5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,sDACvBgjF,EAAmB3B,EAAW,IAE3B,KACLP,GAAa,EACTK,GACFj3E,aAAai3E,GAEa,MAAxBF,IACFA,EAAqBnyE,cACrBmyE,EAAuB,KACzB,IAjCAr4B,EAAM,8BAA8Bs6B,UACpC7B,EAAWO,WAiCZ,IAGH,OAAOvmE,CACT,CAnMSooE,CAA0BrjF,EAAYy7D,EAAS51C,EACxD,CAsQsBza,QAAQhP,aAAaI,QAAQ,GAAGgkB,EAAAA,8BACtD,SAASgoC,EAAMn2D,GAKf,C,4tCCzSO,MAAMixF,EAAsB,sBAsCtBC,EAA6B,OAE7BC,EAAmC,cAEnCC,EAA8B,SAE9BC,EAA4B,OAElC,MAAMC,UAA8BC,EAAAA,GAKzC1gF,KAAAA,CAAMu4D,GACJ,OAAO,IAAIonB,EAAAA,YAA+B5B,I,IACnCxlB,EAAL,KAAuB,QAAlBA,EAAAA,EAAQ15D,kBAAR05D,IAAAA,OAAAA,EAAAA,EAAoBooB,eACvB,MAAM,IAAIhmF,MAAM,qC,YAGlBL,EAAAA,EAAAA,oBACGC,KAAIC,EAAAA,EAAAA,IAAc+9D,EAAQ15D,WAAW8hF,cAAcC,YACnDxpE,KAAI,W,MAAC,aAAOC,G,IASOkhD,EARlB,KAAMlhD,aAAc5c,EAAAA,uBAA4B,sBAAuB4c,GAAS,uBAAwBA,GACtG,MAAM,IAAI1c,MAAM,uBAIlB,MAAMkmF,EAASxpE,EAGfkhD,EAAQtC,QAAyB,QAAfsC,EAAAA,EAAQtC,eAARsC,IAAAA,OAAAA,EAAAA,EAAiBvmE,KAAKrC,IACtCA,EAAOmN,WAAa+jF,EACblxF,KAGT,MAAMmxF,EAAa,IAAI5iF,IAKvB,GAJAq6D,EAAQtC,QAAQv6D,SAAS/L,I,IACRA,EAAfmxF,EAAWjyE,IAAmB,QAAflf,EAAAA,EAAOoxF,gBAAPpxF,IAAAA,EAAAA,EAAmB,GAAG,IAGf,IAApBmxF,EAAWvzF,KACb,MAAM,IAAIoN,MAAM,0DAKlB,OAFoB49D,EAAQtC,QAAQ,GAAG8qB,UAGrC,IAAK,eACG,EAAKC,UAAUzoB,EAASsoB,EAAQ9C,GACtC,MAEF,IAAK,iBACG,EAAKkD,YAAY1oB,EAASsoB,EAAQ9C,GACxC,MAEF,IAAK,wBACG,EAAKmD,kBAAkB3oB,EAASsoB,EAAQ9C,GAC9C,MAEF,IAAK,wBACG,EAAKoD,kBAAkB5oB,EAASsoB,EAAQ9C,GAC9C,MAEF,IAAK,eACG,EAAK3O,UAAU7W,EAASsoB,EAAQ9C,GACtC,MAEF,QACE,EAAKt6D,QAAQ80C,EAASsoB,EAAQ9C,GAIpC,I,gBAnDa1mE,G,gCAAR,G,GAqDX,CAEQoM,OAAAA,CAAQ80C,EAAgClhD,EAAoB0mE,GAClE,MAAMqD,EAAkBhrE,EAAAA,OAAOC,eAAegrE,0BAExCC,EAAiB,OAClB/oB,GAAAA,CACHtC,QAAS5+C,EAAGimE,8BAA8B/kB,EAAQtC,QAASsC,EAAQ15D,YAAY7M,KAAKrC,GAAY,OAC3FA,GAAAA,CACHoxF,cAAUryF,EACVwL,MAAMqnF,EAAAA,EAAAA,IAAuB5xF,EAAOuK,YAWxC,QAL8C,IAA5Cs/E,EAAwB8H,IAA8BF,EAElD/D,EAAmBhmE,EAAIiqE,GADvBjqE,EAAGrX,MAAMshF,IAEJ/3E,UAAUw0E,GAEdA,CACT,CAEckD,WAAAA,CACZ1oB,EACAlhD,EACA0mE,G,kBAHF,eAKE,MAAM9nB,EAAUsC,EAAQtC,QAAQpkE,QAAQlC,GACX,aAApBA,EAAOoxF,WAGhB,GAAuB,IAAnB9qB,EAAQrkE,OACV,MAAM,IAAI+I,MAAM,iDAElB,MAAM,mBAAE6mF,EAAkB,WAAE/uD,GAAe,EAAKpgB,YAAYgF,EAAI4+C,EAASsC,GACzEwlB,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAasvC,UAEhD,I,IAUiBrG,EATf,MAAMkpB,EAAapqE,EAAGjX,YACpB,WACA,CACEJ,MAAOyyB,EACP5yB,MAAO04D,EAAQ94D,MAAMmR,KAAK8wE,MAAM/uB,cAChC7yD,IAAKy4D,EAAQ94D,MAAMiR,GAAGgxE,MAAM/uB,cAC5B8Z,KAAMlU,EAAQloD,UAEhB,CACE0lD,UAA4B,QAAjBwC,EAAAA,EAAQxC,iBAARwC,IAAAA,EAAAA,EAAqB,WAChCopB,QAAS,CACP,eAAgB,UAAUrpF,EAAAA,QAI1Byf,QAAmC0pE,EACnCG,EAAe7pE,aAAAA,EAAAA,EAAUyL,KAE/B,IAAIq+D,GAAYpwC,IACZqwC,EAAW,E,IAGbF,EADF,MAAMz9D,EA8CJ,QA7CAy9D,EAAAA,aAAAA,EAAAA,EAAc5vF,KAAKM,IACjB,MAAMyvF,EAAuB,GACvBC,EAAwB,GAC9B,IAAI95C,EAAM,EAkBV,OAjBA51C,EAAQ2vF,QAAQvmF,SAAQ,EAAE6+C,EAAMmZ,MAC9BquB,EAAW9lF,KAAY,IAAPs+C,GAChBynC,EAAY/lF,KAAKy3D,GACbA,EAAQmuB,IACVA,EAAWnuB,GAETA,EAAQouB,IACVA,EAAWpuB,GAETA,EAAQmuB,IACVA,EAAWnuB,GAETA,EAAQouB,IACVA,EAAWpuB,GAEbxrB,GAAOwrB,CAAK,KAEPwuB,EAAAA,EAAAA,iBAAgB,CACrBt/D,MAAO4+D,EAAmB5+D,MAC1BxyB,KAAMkC,EAAQA,QACd+N,OAAQ,CACN,CACEjQ,KAAM,OACNqE,KAAM6lD,EAAAA,UAAUC,KAChB1/C,OAAQknF,EACR3rE,OAAQ,CAAC,GAEX,CACEhmB,KAAMkC,EAAQA,QACdmC,KAAM6lD,EAAAA,UAAU8B,OAChBvhD,OAAQmnF,EACR5rE,OAAQ,CAAC,IAGbja,KAAM,CACJgmF,2BAA4B,QAC5Bv/B,OAAQ,CACN1a,SAGJ,WA5CJ05C,IAAAA,EAAAA,EA6CM,GAERz9D,EAAOhmB,MAAK,CAACzO,EAAG0O,K,IAAOA,EAAAA,EAAkC1O,EAAAA,E,OAA5B,QAAN0O,EAAAA,EAAEjC,YAAFiC,IAAAA,GAAc,QAAdA,EAAAA,EAAQwkD,cAARxkD,IAAAA,OAAAA,EAAAA,EAAgB8pC,MAAwB,QAANx4C,EAAAA,EAAEyM,YAAFzM,IAAAA,GAAc,QAAdA,EAAAA,EAAQkzD,cAARlzD,IAAAA,OAAAA,EAAAA,EAAgBw4C,IAAG,IAC5E61C,EAAWM,KAAK,CAAE76D,KAAMW,EAAQxyB,MAAO29B,EAAAA,aAAaC,MACtD,CAAE,MAAO5yB,GACPohF,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAa30B,OAClD,CAEA,OAAOojF,CACT,GA5FA,E,CA8FQ1rE,WAAAA,CACNgF,EACA4+C,EACAsC,GAEA,MAAM6pB,EAAsB/qE,EAAGimE,8BAA8BrnB,EAASsC,EAAQ15D,YAC9E,IAAKujF,EAAoBxwF,OACvB,MAAM,IAAI+I,MAAM,2CAElB,MAAM6mF,EAAqBY,EAAoB,GAE/C,MAAO,CAAEZ,qBAAoB/uD,YADV8uD,EAAAA,EAAAA,IAAuBC,EAAmBtnF,MAE/D,CAEcgnF,iBAAAA,CACZ3oB,EACAlhD,EACA0mE,G,kBAHF,eAKE,MAAM9nB,EAAUsC,EAAQtC,QAAQpkE,QAAQlC,GACX,oBAApBA,EAAOoxF,WAGhB,GAAuB,IAAnB9qB,EAAQrkE,OACV,MAAM,IAAI+I,MAAM,wDAGlB,IAAI,mBAAE6mF,EAAkB,WAAE/uD,GAAe,EAAKpgB,YAAYgF,EAAI4+C,EAASsC,GAGpD,OAAf9lC,IACFA,EAAa,IAGfsrD,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAasvC,UAEhD,I,IAgBiB7mD,EAAAA,EAPAwgD,EARf,MAeM93C,EAAgC,QAAvB1I,SAfQV,EAAGjX,YACxB,kBACA,CACEJ,MAAOyyB,EACP5yB,MAAO04D,EAAQ94D,MAAMmR,KAAK8wE,MAAM/uB,cAChC7yD,IAAKy4D,EAAQ94D,MAAMiR,GAAGgxE,MAAM/uB,eAE9B,CACEoD,UAA4B,QAAjBwC,EAAAA,EAAQxC,iBAARwC,IAAAA,EAAAA,EAAqB,kBAChCopB,QAAS,CACP,eAAgB,UAAUrpF,EAAAA,SAKRujC,sBAAT9jB,IAAAA,GAC6C,QAD7CA,EAAAA,EACXlmB,QAAQ0E,IAAWoI,EAAAA,GAAiB5M,SAASwE,EAAMA,gBADxCwhB,IAAAA,OAAAA,EAAAA,EAEX5Z,MAAK,CAACzO,EAAG0O,KAAMikF,EAAAA,EAAAA,IAAwB3yF,EAAG0O,KAExCkkF,EAA6C7hE,aAAAA,EAAAA,EAAQzuB,KAAKuE,IACvD,CACLnG,KAAMmG,EAAMA,MACZsE,OAAQ,CAACtE,EAAM+/B,iBAIb8C,GAAY8oD,EAAAA,EAAAA,iBAAgB,CAChCt/D,MAAO4+D,EAAmB5+D,MAC1BviB,OAAQiiF,QAAAA,EAAuB,KAGjCvE,EAAWM,KAAK,CAAE76D,KAAM,CAAC4V,GAAYznC,MAAO29B,EAAAA,aAAaC,MAC3D,CAAE,MAAO5yB,GACPohF,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAa30B,OAClD,CAEA,OAAOojF,CACT,GA5DA,E,CA8DcoD,iBAAAA,CACZ5oB,EACAlhD,EACA0mE,G,kBAHF,eAKE,MAAM9nB,EAAUsC,EAAQtC,QAAQpkE,QAAQlC,GACX,oBAApBA,EAAOoxF,WAGhB,GAAuB,IAAnB9qB,EAAQrkE,OACV,MAAM,IAAI+I,MAAM,wDAGlBojF,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAasvC,UAEhD,MAAM,mBAAE4iB,EAAkB,WAAE/uD,GAAe,EAAKpgB,YAAYgF,EAAI4+C,EAASsC,GAEzE,I,IA0BExgD,EAjBewgD,EARf,MAAMxgD,QAAiBV,EAAGjX,YACxB,kBACA,CACEJ,MAAOyyB,EACP5yB,MAAO04D,EAAQ94D,MAAMmR,KAAK8wE,MAAM/uB,cAChC7yD,IAAKy4D,EAAQ94D,MAAMiR,GAAGgxE,MAAM/uB,eAE9B,CACEoD,UAA4B,QAAjBwC,EAAAA,EAAQxC,iBAARwC,IAAAA,EAAAA,EAAqB,kBAChCopB,QAAS,CACP,eAAgB,UAAUrpF,EAAAA,QAK1BiqF,EAAmB,CAAEnyF,KAAMiwF,EAA4B5rF,KAAM6lD,EAAAA,UAAU+E,OAAQxkD,OAAQ,GAAIub,OAAQ,CAAC,GACpGosE,EAA0B,CAC9BpyF,KAAMkwF,EACN7rF,KAAM6lD,EAAAA,UAAU8B,OAChBvhD,OAAQ,GACRub,OAAQ,CAAC,GAELqsE,EAAqB,CAAEryF,KAAMmwF,EAA6B9rF,KAAM6lD,EAAAA,UAAU+E,OAAQxkD,OAAQ,GAAIub,OAAQ,CAAC,GACvGssE,EAAmB,CAAEtyF,KAAMowF,EAA2B/rF,KAAM6lD,EAAAA,UAAU+E,OAAQxkD,OAAQ,GAAIub,OAAQ,CAAC,GAE1F,QAAf2B,EAAAA,EAAS1X,cAAT0X,IAAAA,GAAAA,EAAiBrc,SAASwD,I,IAIEA,EAHrByjF,EAAAA,GAAiB5wF,SAASmN,EAAM3I,SACnCgsF,EAAU1nF,OAAOoB,KAAKiD,EAAM3I,OAC5BisF,EAAiB3nF,OAAOoB,KAAKiD,EAAMo3B,aACnCmsD,EAAY5nF,OAAOoB,MAAkB,QAAbiD,EAAAA,EAAMG,eAANH,IAAAA,OAAAA,EAAAA,EAAetN,QAASsN,EAAMG,QAAQmF,KAAK,MAAQ,sBAC3Ek+E,EAAU7nF,OAAOoB,KAAKiD,EAAMzK,MAC9B,IAGF,MAAM2kC,GAAY8oD,EAAAA,EAAAA,iBAAgB,CAChCt/D,MAAO4+D,EAAmB5+D,MAC1BviB,OAAQ,CAACkiF,EAAWC,EAAkBC,EAAaC,KAGrD3E,EAAWM,KAAK,CAAE76D,KAAM,CAAC4V,GAAYznC,MAAO29B,EAAAA,aAAaC,MAC3D,CAAE,MAAO5yB,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,0BACvBqhF,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAa30B,OAClD,CAEA,OAAOojF,CACT,GAhEA,E,CAmEciD,SAAAA,CACZzoB,EACAlhD,EACA0mE,G,OAHF,eAKE,GAA+B,IAA3BxlB,EAAQtC,QAAQrkE,OAClB,MAAM,IAAI+I,MAAM,+CAGlB,MAAMhL,EAAS4oE,EAAQtC,QAAQ,GACzB2sB,EAAejzF,EAAOizF,aAC5B,IAAKA,EACH,MAAM,IAAIjoF,MAAM,iDAGlB,MAAMynF,EAAsB/qE,EAAGimE,8BAA8B,CAAC3tF,GAAS4oE,EAAQ15D,YACzE4zB,GAAa8uD,EAAAA,EAAAA,IAAuBa,EAAoB,GAAGloF,KAAKqB,QAAQ,OAAQ,OAEtFwiF,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAasvC,UAEhD,I,IA4BgBikB,EAIgBA,EAtBftqB,EATf,MAAMsqB,QAA4CxrE,EAAGjX,YACnD,eACA,CACEJ,MAAOyyB,EACP5yB,MAAO04D,EAAQ94D,MAAMmR,KAAK8wE,MAAM/uB,cAChC7yD,IAAKy4D,EAAQ94D,MAAMiR,GAAGgxE,MAAM/uB,cAC5B33D,MAAO,KAET,CACE+6D,UAA4B,QAAjBwC,EAAAA,EAAQxC,iBAARwC,IAAAA,EAAAA,EAAqB,SAChCopB,QAAS,CACP,eAAgB,UAAUrpF,EAAAA,QAIhCuqF,SAAAA,EAAgBr/D,KAAK9lB,OAAOS,MAAK,CAAC2kF,EAAmBC,KACnD,MAAMC,EAA4BF,EAAInnF,MAAM,GACtCsnF,EAA4BF,EAAIpnF,MAAM,GAC5C,OAAOklC,OAAOoiD,GAAgBpiD,OAAOmiD,EAAa,IAIpD,MAAME,GAAKhB,EAAAA,EAAAA,iBAAgB,CACzB7hF,OAAQ,CACN,CAEEjQ,KAAMisC,EAAAA,GACNxhC,OAAQgoF,SAA2B,QAA3BA,EAAAA,EAAgBr/D,KAAK9lB,cAArBmlF,IAAAA,OAAAA,EAAAA,EAA6B7wF,KAAKyK,GACjCA,EAAE0mF,OAAOP,MAGpB,CAAExyF,KAAM,SAAUyK,OAAQgoF,SAA2B,QAA3BA,EAAAA,EAAgBr/D,KAAK9lB,cAArBmlF,IAAAA,OAAAA,EAAAA,EAA6B7wF,KAAKyK,GAAMokC,OAAOpkC,EAAEd,MAAM,UAIrFoiF,EAAWM,KAAK,CAAE76D,KAAM,CAAC0/D,IAC3B,CAAE,MAAOvmF,GACP5C,EAAAA,EAAOW,MAAMiC,GACbohF,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAa30B,OAClD,CAIA,OAFAojF,EAAWO,WAEJP,CACT,GAjEA,E,CAmEc3O,SAAAA,CACZ7W,EACAlhD,EACA0mE,G,OAHF,eAKE,GAA+B,IAA3BxlB,EAAQtC,QAAQrkE,OAClB,MAAM,IAAI+I,MAAM,+CAGlB,I,IAQiB49D,EAPf,MAAM6qB,QAAuC/rE,EAAGjX,YAC9C,SACA,CACEP,MAAO04D,EAAQ94D,MAAMmR,KAAK8wE,MAAM/uB,cAChC7yD,IAAKy4D,EAAQ94D,MAAMiR,GAAGgxE,MAAM/uB,eAE9B,CACEoD,UAA4B,QAAjBwC,EAAAA,EAAQxC,iBAARwC,IAAAA,EAAAA,EAAqB,SAChCopB,QAAS,CACP,eAAgB,UAAUrpF,EAAAA,QAM1B4qF,GAAKhB,EAAAA,EAAAA,iBAAgB,CACzB7hF,OAAQ,CAAC,CAAEjQ,KAAM,SAAUyK,OAAQuoF,aAAAA,EAAAA,EAAgB5/D,SAErDu6D,EAAWM,KAAK,CAAE76D,KAAM,CAAC0/D,GAAKvxF,MAAO29B,EAAAA,aAAaC,MACpD,CAAE,MAAO5yB,GACPohF,EAAWM,KAAK,CAAE76D,KAAM,GAAI7xB,MAAO29B,EAAAA,aAAa30B,OAClD,CAIA,OAFAojF,EAAWO,WAEJP,CACT,GApCA,E,CAsCAsF,cAAAA,GACE,OAAOpjF,QAAQC,QAAQ,CAAEqzB,OAAQ,UAAWpkC,QAAS,yBAA0BpB,MAAO,WACxF,CAjbAqL,WAAAA,CAAYic,EAAkB0P,GAC5B1rB,MAAMgc,EAAU0P,EAClB,EAwbF,QANA,WACEwyD,EAAAA,GAAW+L,0BAA0B,CACnChjB,WAAY,IAAImgB,EAAsB,kBAAmBL,IAE7D,C,mFCreO,SAASpwB,EAAkB71D,EAAuBopF,EAA4BC,GAAe,GAClG,MAAMlvE,GAAiB9F,EAAAA,EAAAA,IAAkBrU,GAEzC,IAAIspF,EAA0B,GAC1BD,GAEED,IAAuBpkF,EAAAA,KACzBskF,EAA0B,KAAKtkF,EAAAA,YAInC,MAAMgQ,EAAemF,EAAe3iB,MAAM6F,QACpC4E,GAASw4B,EAAAA,EAAAA,IAA2BtgB,GAG1C,GAAInF,EAAavd,OAAQ,CACvB,GAAe,UAAXwK,EACF,MAAO,wBAAwBkqE,EAAAA,OAAoBmd,KAA2BC,EAAAA,MAAqBnsB,EAAAA,MAAqBosB,EAAAA,MAAyB7tE,EAAAA,MAAqB8tE,EAAAA,sBAAmCL,KAE3M,GAAe,SAAXnnF,EACF,MAAO,wBAAwBkqE,EAAAA,OAAoBmd,KAA2BC,EAAAA,MAAqBnsB,EAAAA,MAAqBosB,EAAAA,MAAyBE,EAAAA,MAAoBD,EAAAA,sBAAmCL,KAE1M,GAAe,WAAXnnF,EACF,MAAO,wBAAwBkqE,EAAAA,OAAoBmd,KAA2BC,EAAAA,MAAqBnsB,EAAAA,MAAqBosB,EAAAA,MAAyBG,EAAAA,MAAoBF,EAAAA,sBAAmCL,IAE5M,CACA,MAAO,wBAAwBjd,EAAAA,OAAoBmd,KAA2BC,EAAAA,MAAqBnsB,EAAAA,MAAqBosB,EAAAA,MAAyBC,EAAAA,sBAAmCL,IACtL,CAMO,SAASzxE,EAA6B1X,GAC3C,OAAQA,GACN,KAAKkB,EAAAA,GACH,OAAOyoF,EAAAA,GACT,KAAK3kF,EAAAA,GACH,OAAO4kF,EAAAA,GACT,QACE,MAAMtpF,EAAQ,IAAIC,MAAM,0BAA0BP,KAKlD,MAJAL,EAAAA,EAAOW,MAAMA,EAAO,CAClBN,eACAsC,IAAK,wDAAwDtC,MAEzDM,EAEZ,C,yGCpEO,SAASupF,EAAkB9pF,GAEhC,MAAMrE,EAAavE,EAAAA,GAAWwE,YAAYoE,EAAUnE,EAAAA,GACXzE,EAAAA,GAAW4Y,eAClDrU,GACCiU,GAAMA,aAAay8D,EAAAA,IAEW9qE,SAASwhF,GAAMA,EAAEgH,gBAIpB3yF,EAAAA,GAAWy7B,gBAAgBl3B,EAAYiY,EAAAA,GAC/CrS,SAASwhF,GAAMA,EAAEgH,eACzC,CAEO,SAASx4D,EAAetK,EAAmBC,EAAoBlnB,GACpE,MAAMkd,GAAK5Z,EAAAA,EAAAA,IAAsBtD,GAAU4D,YAC3ComF,EAAAA,EAAAA,IAAiC9sE,EAAI+J,EAAWC,GAChD4iE,EAAkB9pF,EACpB,CAEO,SAASwsE,EAAoBvlD,EAAmBC,EAAoBlnB,GACzE,MAAMkd,GAAK5Z,EAAAA,EAAAA,IAAsBtD,GAAU4D,YAC3CqmF,EAAAA,EAAAA,IAA6B/sE,EAAI+J,EAAWC,GAC5C4iE,EAAkB9pF,EACpB,C,qOCkBA,MAAMkqF,EAAgBz2D,IACpB,GAAIA,EAAQ,CAEV,GADyB7nB,OAAOlL,OAAOmtC,EAAAA,WAC5Bj2C,SAAS67B,GAClB,OAAOA,CAEX,CACgB,EAOX,SAAS02D,EAAwBC,GACtC,OAAQA,GACN,IAAK,OACH,MAAO,OACT,IAAK,SACH,MAAO,SACT,IAAK,GAEL,IAAK,qBACH,MAAO,qBACT,QACE,MAAO,QAEb,CAEO,SAASC,EAA2BC,GACzC,OAAQA,GACN,IAAK,MACL,IAAK,QACL,IAAK,WACL,IAAK,UACL,IAAK,QACH,OAAOA,EACT,QACE,MAAO,SAEb,CAEO,SAASztD,EAAuB33B,G,IACVA,EAA3B,MAAMqlF,EAAa,IAAIxmF,IAAkC,QAA9BmB,EAAAA,aAAAA,EAAAA,EAASrN,KAAKgK,GAAMA,EAAEgC,oBAAtBqB,IAAAA,EAAAA,EAAqC,IAGhEqlF,EAAW5uD,OAAO,sBAGlB,MAAM6uD,EAAejmF,MAAMkS,KAAK8zE,GAEhC,OAA4B,IAAxBC,EAAa/yF,OACR0yF,EAAwBK,EAAa,IAItB,IAApBD,EAAWn3F,KACN,qBAIF,OACT,CAEO,SAASk+B,EAAkB3G,EAAmB3qB,G,IAOasoF,EANhE,MAAMtwD,GAAsBC,EAAAA,EAAAA,IAAuBj4B,GAC7CsoF,EAAyCtwD,aAAAA,EAAAA,EAAqB9xB,OAAO,GACrEukF,EAAwCzyD,aAAAA,EAAAA,EAAqB9xB,OAAO,GAEpE6c,EAAQ0nE,aAAAA,EAAAA,EAAY/pF,OAAOkN,QAAQ+c,G,IAEuB29D,EADhE,MAAMrmF,OACM1N,IAAVwuB,IAAkC,IAAXA,EAAeonE,EAAoD,QAA5B7B,EAAAA,SAAmB,QAAnBA,EAAAA,EAAa5nF,cAAb4nF,IAAAA,OAAAA,EAAAA,EAAsBvlE,UAAtBulE,IAAAA,EAAAA,EAAgC,SAAM/zF,EAEtG,YAAeA,IAAX0N,GACFrC,EAAAA,EAAOC,KAAK,yCAA0C,CAAE8qB,cACjD,SAEF1oB,CACT,CAEO,SAASo4B,EACdi4B,EACAmH,EACA9nC,EACA+4D,EACAC,GAEA,MAAO,CAACjhE,EAAkBkhE,KACxB,MAAMC,EAAYX,EAAaQ,EAAYlzF,MAAMi8B,QAC3C1J,EAAQ2D,EAAAA,GAAcC,aACzBwlC,UAAU,SAAU,CAAEvhD,YAAY,IAClCgsB,qBAAqB,cAAe,GACpC5P,SAASskC,EAAS5oC,IAClBmQ,mBAAkB,GAClB3L,QACC,IAAIgG,EAAAA,GAAqB,CACvBC,gBAAiB,CAAC,IAkCrB,SAAmCzK,GACxC,OAAQwG,GACCA,EAAOmE,MACZx8B,EAAAA,EAAAA,MAAI,IACK,CAAC6xB,KAIhB,CA1CkCohE,CAA0BphE,OAGrDkE,aAAaC,EAAAA,IACbE,QAAQ,IAAIlC,EAAAA,GAAU,CAAEW,qBAAsB,CAAE9C,QAAOiB,UAAW2nC,EAAS5oC,GAAQzC,UAAW0jE,MAC9F18D,iBAAiB,CAChB,IAAI4D,EAAAA,GAAmB,CAAEnI,QAAOiI,eAAcj/B,YAAai4F,IAAa3lF,EAAAA,OAsB5E,OAnBIy0D,IAAUn/B,EAAAA,UAAUC,MACtBxQ,EACG6T,qBAAqB,WAAY,CAAEC,KAAMC,EAAAA,aAAaC,SACtDH,qBAAqB,cAAe,KACpCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAa,GAClChQ,aAAaC,EAAAA,IACb+P,qBAAqB,YAAatD,EAAAA,UAAUC,MAG7CswD,IACF9gE,EAAMopC,UAAU,SAAU,CACxBvhD,YAAY,EACZ4jD,MAAO,CAACq1B,KAGV9gE,EAAMghE,eAAe,MAGhB,IAAIz9D,EAAAA,GAAiB,CAC1B5tB,KAAMqqB,EAAMoE,SACZ,CAEN,CAkBO,SAAS8gC,EACdvlC,EACA3xB,EACAiI,GAEA,MAAMgrF,EAAYthE,GAAQuhE,EAAAA,EAAAA,GAAsBlzF,EAAK2xB,GAASwhE,EAAAA,EAAUC,OAExE,GAAIH,EAEF,OAiBG,SAAoC1wF,EAAiBvC,GAC1D,OAAQuC,GACN,KAAK4wF,EAAAA,EAAUE,QACb,OAAO5xE,EAAAA,GAET,KAAK0xE,EAAAA,EAAUC,OACb,OAAO52E,EAAAA,GAET,KAAK22E,EAAAA,EAAUG,mBAEb,OAAItzF,IAAQiN,EAAAA,GACH7D,EAAAA,GAEF4W,EAAAA,GAET,QAAS,CACP,MAAMohB,EAAM,IAAI34B,MAAM,0BAA0BzI,KAEhD,MADA6H,EAAAA,EAAOW,MAAM44B,EAAK,CAAE7+B,OAAMiI,IAAK,0BAA0BxK,MACnDohC,CACR,EAEJ,CAtCWmyD,CAA2BN,EAAWjzF,GAI/C,MAAMwzF,EAAqBj6D,EAAkBv5B,EAAKiI,GAClD,MAA2B,uBAAvBurF,EACKxzE,EAAAA,IAGTnY,EAAAA,EAAOC,KAAK,mEAAoE,CAC9E9H,MACAwzF,mBAAoBA,QAAAA,EAAsB,KAGrCh3E,EAAAA,GACT,CAyBO,SAASkmB,EAA2Bv0B,GAKzC,OAAO22B,EAJS32B,EAAO1O,MAAM6F,QAAQxF,KAAKH,IACjCyK,EAAAA,EAAAA,IAAyBzK,GAAQuK,SAI5C,CAEO,SAASq7B,EAAW/B,GACzB,MAAqB,aAAdA,GAA0C,UAAdA,GAAuC,UAAdA,CAC9D,CAuBO,SAASC,EAAqBjC,EAAqBvB,G,IAIgBwzD,EAHxE,MAAMf,EAAwCzyD,aAAAA,EAAAA,EAAqB9xB,OAAO,GACpEslF,EAAwCxzD,aAAAA,EAAAA,EAAqB9xB,OAAO,GACpE6c,EAAQ0nE,aAAAA,EAAAA,EAAY/pF,OAAOkN,QAAQ2rB,GACzC,YAAiBhlC,IAAVwuB,IAAkC,IAAXA,EAAesnE,EAA2BmB,SAAkB,QAAlBA,EAAAA,EAAY9qF,cAAZ8qF,IAAAA,OAAAA,EAAAA,EAAqBzoE,SAAUxuB,CACzG,CAEO,SAAS4jC,EACdoB,EACApf,EACA6d,G,IAQgEswD,EAGGkD,EATnE,MAAMlD,EAAyCtwD,aAAAA,EAAAA,EAAqB9xB,OAAO,GACrEukF,EAAwCzyD,aAAAA,EAAAA,EAAqB9xB,OAAO,GACpEslF,EAAwCxzD,aAAAA,EAAAA,EAAqB9xB,OAAO,GACpE6c,EAAQ0nE,aAAAA,EAAAA,EAAY/pF,OAAOkN,QAAQ2rB,GAEnCgyD,OACMh3F,IAAVwuB,IAAkC,IAAXA,EAAeonE,EAAwB7B,SAAmB,QAAnBA,EAAAA,EAAa5nF,cAAb4nF,IAAAA,OAAAA,EAAAA,EAAsBvlE,IAAU,QAE1F0oE,OACMl3F,IAAVwuB,IAAkC,IAAXA,EAAesnE,EAA2BmB,SAAkB,QAAlBA,EAAAA,EAAY9qF,cAAZ8qF,IAAAA,OAAAA,EAAAA,EAAqBzoE,SAAUxuB,EAG5F2Q,EAAUiV,EAAe3iB,MAAM6F,QAAQxF,KAAKH,I,IAUlB4wF,EAT9B,MAAMvlE,EAAQ0nE,aAAAA,EAAAA,EAAY/pF,OAAOkN,QAAQlW,EAAOK,KAC1C2zF,GAAwBvpF,EAAAA,EAAAA,IAAyBzK,GACvD,GAAIg0F,EAAsBzpF,OACxB,OAAOypF,EAAsBzpF,O,IAMDqmF,EAF9B,MAAMrmF,OACM1N,IAAVwuB,IAAkC,IAAXA,EACnBonE,EAAoD,QAA5B7B,EAAAA,SAAmB,QAAnBA,EAAAA,EAAa5nF,cAAb4nF,IAAAA,OAAAA,EAAAA,EAAsBvlE,UAAtBulE,IAAAA,EAAAA,EAAgC,cACxD/zF,EACN,OAAO0N,QAAAA,EAAU,OAAO,IAK1B,IAAI0pF,EAAuB,GACvBC,EAA0B,GAEH,uBAAvBL,EACFK,EAA0B,KAAKryD,QAG/BoyD,EAAuB,KAAKpyD,QAW9B,OAhFK,SAA0BA,EAAqB34B,GACpD,OAAIA,EAAQ26B,WAAa,CAAC,QAAS,YAAY3jC,SAASgJ,EAAQ26B,WAE5D,kBAAiBswD,EAAAA,EAAAA,IAAsBjrF,eACvCA,EAAQ26B,UACR,IAAIhC,qCAEG34B,EAAQ26B,WAAmC,UAAtB36B,EAAQ26B,UAEpC,kBAAiBswD,EAAAA,EAAAA,IAAsBjrF,eAAuB24B,EAAc,mCAGvE,WAAWA,wBAAiCsyD,EAAAA,EAAAA,IAAsBjrF,gBAE7E,CAkESkrF,CAAiBvyD,EAPU,CAChCqyD,0BACAD,uBACA1pF,OAhBa46B,EAAuB,IAAI33B,EAASqmF,IAiBjDhwD,UAAWkwD,GAIf,C,4FCvUO,SAASvD,EAAwB3yF,EAAkB0O,GACxD,OAAsB,IAAlB1O,EAAE4mC,YACG,EAEa,IAAlBl4B,EAAEk4B,aACI,EAEH5mC,EAAE4mC,YAAcl4B,EAAEk4B,WAC3B,CAIO,SAASkG,EAAgB/b,GAC9B,MAAM1lB,EAAU,IAAI0lB,GACfA,EAAO1uB,SAASoN,EAAAA,KACnBpE,EAAQ8pB,QAAQ1lB,EAAAA,IAGlB,MAAM+mF,EAAsCnrF,EAAQ/I,KAAKuE,IAAW,CAClEA,QACAoF,MAAOgG,OAAOpL,OAGhB,MAAO,CAAC,CAAEA,MAAO,MAAOoF,MAAOi8B,EAAAA,OAAyBsuD,EAC1D,CACO,MACMvD,EAAmB,CAAC,kBAAmBxjF,EAAAA,GADpB,SAGnBR,EAAmB,CAAC,wBAAyB,oBACnD,SAAS86B,EAAgBhZ,GAC9B,MACMylE,EADU,IAAIzlE,GACgCzuB,KAAKuE,IAAW,CAClEA,QACAoF,MAAOgG,OAAOpL,OAGhB,MAAO,CAAC,CAAEA,MAAO,MAAOoF,MAAOi8B,EAAAA,OAAyBsuD,EAC1D,CAGO,SAASpvE,EAAiBjlB,G,IAIdA,EAAjB,QAHcmxE,EAAAA,EAAAA,IAA4BnxE,EAAO8J,QAC7CsnE,EAAAA,EAAAA,IAAgCpxE,EAAO8J,OACvC9J,EAAO8J,UACwB,QAAlB9J,EAAAA,EAAO+J,mBAAP/J,IAAAA,OAAAA,EAAAA,EAAqB,GACxC,C,sKCvCO,MAAMiqC,EAAwC,uCAE9C,SAASC,EAAiB5hC,EAAuBu5B,EAAqByyD,GAC3E,IAAIC,EAAuB,GACvBL,EAA0B,GAE9B,MAAM1lF,GAASmO,EAAAA,EAAAA,IAAkBrU,GAC3BiC,GAASw4B,EAAAA,EAAAA,IAA2Bv0B,GAQ1C,OANI8lF,GAAcA,IAAehnF,EAAAA,GAC/BinF,EAAuB,KAAKD,UACnBA,GAAcA,IAAehnF,EAAAA,KACtC4mF,EAA0B,MAAMI,YAG3BzzD,EAAAA,EAAAA,GACL,wBAAuBszD,EAAAA,EAAAA,IAAsB,CAC3CI,uBACAL,0BACA3pF,8BACoBs3B,KACtB,CAAE1P,aAAc,KAAK0P,MAAiB9Q,MAAO,0BAEjD,CAEO,SAASyjE,EAAoBjiE,GAElC,OADeA,EAAOpyB,KAAKonC,IAAc6P,EAAAA,EAAAA,IAA2B7P,KACtDqqB,SAAStmD,GAAOA,EAAI,CAACA,GAAK,IAC1C,CAEO,SAASwiC,EAAsBztC,EAAayJ,EAAexB,GAChE,MAAMmV,GAA4BC,EAAAA,EAAAA,IAA6BpV,GACzD05C,EAA2D,IAAnDvkC,EAA0B3d,MAAM6F,QAAQ5F,OAEhDu6B,EAAmC,wBADfV,EAAAA,EAAAA,IAAkBv5B,EAAKiI,GAG3CyxB,EAAetc,EAA0B3d,MAAM6F,QAAQslB,MAAMjrB,GAC7Ds6B,GACK/uB,EAAAA,EAAAA,IAAoBvL,EAAOiK,WAAajK,EAAO8J,QAAUA,GAE3DyB,EAAAA,EAAAA,IAAoBvL,EAAOiK,YAAaQ,EAAAA,EAAAA,IAAyBzK,GAAQ8J,QAAUA,IAG5F,OAAIk4C,IAAUjoB,IACZpB,EAAAA,EAAAA,IAAat4B,EAAKyJ,EAAO,UAAWxB,EAAUgyB,EAAaja,EAAAA,GAAexD,EAAAA,IACnE,aAEP8b,EAAAA,EAAAA,IAAat4B,EAAKyJ,EAAO,SAAUxB,EAAUgyB,EAAaja,EAAAA,GAAexD,EAAAA,IAClE,SAEX,CAEO,SAASgxB,EAAsBxtC,EAAayJ,EAAexB,GAChE,MAAMmsF,GAAiBz2E,EAAAA,EAAAA,IAAkB1V,GACnC05C,EAAgD,IAAxCyyC,EAAe30F,MAAM6F,QAAQ5F,OACrCg6B,EAAe06D,EAAe30F,MAAM6F,QAAQslB,MAC/CjrB,GAAWA,EAAO8J,QAAUA,IAASyB,EAAAA,EAAAA,IAAoBvL,EAAOiK,YAGnE,OAAI+3C,IAAUjoB,IACZpB,EAAAA,EAAAA,IAAat4B,EAAKyJ,EAAO,UAAWxB,EAAUwZ,EAAAA,IACvC,aAEP6W,EAAAA,EAAAA,IAAat4B,EAAKyJ,EAAO,SAAUxB,EAAUwZ,EAAAA,IACtC,SAEX,CAEO,SAAS4yE,EAAiBr0F,EAAas0F,EAAqBrsF,GAEjE,OAAOssF,EAAkBv0F,EAAKs0F,GADP32E,EAAAA,EAAAA,IAAkB1V,GAE3C,CAEO,SAASusF,EAAiBx0F,EAAas0F,EAAqBrsF,GAEjE,OAAOssF,EAAkBv0F,EAAKs0F,GADPh4E,EAAAA,EAAAA,IAAkBrU,GAE3C,CAEO,SAASwsF,EAAmBz0F,EAAas0F,EAAqBrsF,GAEnE,OAAOssF,EAAkBv0F,EAAKs0F,GADLn3E,EAAAA,EAAAA,IAAoBlV,GAE/C,CAEO,SAASssF,EAAkBv0F,EAAas0F,EAAqB10F,GAClE,MAAM80F,EAAmB90F,EAASH,MAAM6F,QACrC3F,QAAQA,GAAWA,EAAOK,MAAQA,IAAOkL,EAAAA,EAAAA,IAAoBvL,EAAOiK,YACpE9J,KAAKH,GAAYC,EAASH,MAAMvB,OAASse,EAAAA,IAAapS,EAAAA,EAAAA,IAAyBzK,GAAQ8J,MAAQ9J,EAAO8J,QACnGkrF,EAAkB/0F,EAASH,MAAM6F,QACpC3F,QAAQA,GAAWA,EAAOK,MAAQA,IAAO4lF,EAAAA,EAAAA,IAAoBjmF,EAAOiK,YACpE9J,KAAKH,GAAYC,EAASH,MAAMvB,OAASse,EAAAA,IAAapS,EAAAA,EAAAA,IAAyBzK,GAAQ8J,MAAQ9J,EAAO8J,QAEzG,OAAO6qF,EAAU30F,QAAQ0E,IACnBswF,EAAgB90F,SAASwE,KAGM,IAA5BqwF,EAAiBh1F,QAAgBg1F,EAAiB70F,SAASwE,KAEtE,C,0HCrGO,SAASk7E,EACdztE,EACA8iF,EACA9uD,EACAu5C,GAEA,GAAIv5C,IAAS+uD,EAAAA,2BAA2BC,gBAAiB,CACvD,MAAMruE,EAASmuE,QAAAA,EAAiB,GAChC,OAAsB,IAAlBnuE,EAAO/mB,QAAgB+mB,EAAO5mB,SAASiS,GAClC,GAEF,CAACA,EACV,CAKA,IAAI2U,GAAUmuE,aAAAA,EAAAA,EAAel1F,QAAqBk1F,EAAZvV,EACtC,OAAI54D,EAAO5mB,SAASiS,GACX2U,EAAO9mB,QAAQo1F,GAAkBA,IAAkBjjF,IAGrD,IAAI2U,EAAQ3U,EACrB,CAEO,SAASwtE,EAAyBptD,GACvC,OAAOA,EAAOpyB,KAAKonC,I,IAAc6P,E,OAA2B7P,QAA3B6P,EAAAA,EAA2B7P,UAA3B6P,IAAAA,EAAAA,EAAyC,MAAM,GAClF,CAEO,SAASA,EAA2BplB,G,IAC1BA,EAAf,MAAMpD,EAAwB,QAAfoD,EAAAA,EAAMxjB,OAAO,UAAbwjB,IAAAA,OAAAA,EAAAA,EAAiBpD,OAEhC,IAAKA,EACH,OAAO,KAGT,MAAM/d,EAAOqD,OAAOrD,KAAK+d,GACzB,OAAoB,IAAhB/d,EAAK9Q,OACA,KAGF6uB,EAAO/d,EAAK,GACrB,CAMO,SAASwkF,EAAiB3V,EAAqBp3E,GACpD,MAAMgtF,GAAex4E,EAAAA,EAAAA,IAAkBxU,GACjCitF,EAAeD,EAAax1F,MAAM6F,QACrC3F,QAAQA,IAAWuL,EAAAA,EAAAA,IAAoBvL,EAAOiK,YAC9C9J,KAAKH,GAAWA,EAAO8J,MAAMI,MAAM,KAAK/J,IAAIq1F,KAC5C7iF,KAAK,KACF8iF,EAAiBH,EAAax1F,MAAM6F,QACvC3F,QAAQA,IAAWimF,EAAAA,EAAAA,IAAoBjmF,EAAOiK,YAC9C9J,KAAKH,GAAWA,EAAO8J,MAAMI,MAAM,KAAK/J,IAAIq1F,KAC5C7iF,KAAK,KACR,OAAO+sE,EAAU1/E,QAAQmS,IACnBsjF,EAAev1F,SAASiS,KAGG,IAAxBojF,EAAax1F,QAAgBw1F,EAAar1F,SAASiS,KAE9D,CAEA,SAASqjF,EAAmBrjF,GAC1B,MAAc,OAAVA,EACK,OAEFA,CACT,CAQO,SAASy7B,EAAsBz7B,EAAe7J,GACnD,MAAMw2D,GAAchiD,EAAAA,EAAAA,IAAkBxU,GAChC05C,EAA6C,IAArC8c,EAAYh/D,MAAM6F,QAAQ5F,OAClCg6B,EAAe+kC,EAAYh/D,MAAM6F,QAAQslB,MAC5CjrB,GAAWA,EAAO8J,QAAUqI,IAAS5G,EAAAA,EAAAA,IAAoBvL,EAAOiK,YAOnE,MAJc,SAAVkI,IACFA,EAAQ,MAGN6vC,IAAUjoB,IACZpB,EAAAA,EAAAA,IAAarrB,EAAAA,GAAsB6E,EAAO,UAAW7J,EAAUmB,EAAAA,IACxD,aAEPkvB,EAAAA,EAAAA,IAAarrB,EAAAA,GAAsB6E,EAAO,SAAU7J,EAAUmB,EAAAA,IACvD,SAEX,C,gHC/EA,SAASisF,EAASC,EAAmBp3F,EAAcslC,GACjD,MAAMx2B,EAAQsoF,EAAMC,eAAer3F,GACnC,QAAc1B,IAAVwQ,EAIJ,OAAOA,EAAMzK,OAASihC,EAAYx2B,OAAQxQ,CAC5C,CAEO,MAAMg5F,EAA2B,YAC3BC,EAAsB,OACtBC,EAA0B,WAC1BC,EAAoB,KACpB9kE,EAAwB,SAE9B,SAAS+kE,EAAuBC,GACrC,MAAMrqF,EAAiB,CAAC,EAMxB,OAJAqI,OAAOC,QAAQ+hF,GAAgBrsF,SAAQ,EAAEssF,EAAGhsF,MAC1C0B,EAAOsqF,GAAkB,iBAANhsF,EAAiBA,EAAIO,KAAKC,UAAUR,EAAE,IAGpD0B,CACT,CAEO,SAASqqD,EAAelkC,G,IACzBA,EAAJ,OAAc,QAAVA,EAAAA,EAAM1nB,YAAN0nB,IAAAA,OAAAA,EAAAA,EAAYpvB,QAAS6uD,EAAAA,cAAcC,SAOlC,SAAiC1/B,GACtC,MAAM2jE,EAAQ,IAAIS,EAAAA,WAAWpkE,GAEvBqkE,EAAiBX,EAASC,EAAOE,EAA0BptC,EAAAA,UAAUC,MACrErJ,EAAYq2C,EAASC,EAAOG,EAAqBrtC,EAAAA,UAAU+E,QAGjE,QAAuB3wD,IAAnBw5F,QAA8Cx5F,IAAdwiD,EAClC,OAAO,K,IAGaq2C,EAAtB,MAAMY,EAAyE,QAAzDZ,EAAAA,EAASC,EAAOI,EAAyBttC,EAAAA,UAAU+E,eAAnDkoC,IAAAA,EAAAA,EAA8D,K,IACpEA,EAAhB,MAAMtsC,EAA6D,QAAnDssC,EAAAA,EAASC,EAAOK,EAAmBvtC,EAAAA,UAAU+E,eAA7CkoC,IAAAA,EAAAA,EAAwD,K,IACpDA,EAApB,MAAMa,EAAoE,QAAtDb,EAAAA,EAASC,EAAOzkE,EAAuBu3B,EAAAA,UAAUmD,cAAjD8pC,IAAAA,EAAAA,EAA2D,KAEzE9mE,EAAyB,OAAhB2nE,EAAuB,KAAOA,EAAYvtF,OAEnDupD,EAAcojC,EAAMnnF,OAAOxO,QAC/B,CAAC8O,EAAGY,IACFA,IAAM2mF,EAAehrE,OACrB3b,IAAM2vC,EAAUh0B,OAChB3b,KAAM4mF,aAAAA,EAAAA,EAAejrE,QACrB3b,KAAM05C,aAAAA,EAAAA,EAAS/9B,QACf3b,KAAM6mF,aAAAA,EAAAA,EAAalrE,SAGvB,MAAO,CACL9Q,IAAKyX,EACLotB,UAAWi3C,EACXh3C,YACAi3C,gBACAltC,UACAotC,kBAAmB,IAAM5nE,EACzB6nE,oBAAqB,KACrBzhC,0BAA2B,IAAkB,OAAXpmC,EAAkBA,EAAOzuB,IAAI81F,GAA0B,KACzFS,kBAAmB,IAAuB,OAAhBH,EAAuBA,EAAYh4F,KAAO,KACpEg0D,cAEJ,CA5CWokC,CAAwB3kE,GA+C5B,SAA8BA,GACnC,MAAM2jE,EAAQ,IAAIS,EAAAA,WAAWpkE,GACvBotB,EAAYu2C,EAAMiB,oBAAoBnuC,EAAAA,UAAUC,MAChDrJ,EAAYs2C,EAAMiB,oBAAoBnuC,EAAAA,UAAU+E,QAGtD,QAAkB3wD,IAAduiD,QAAyCviD,IAAdwiD,EAC7B,OAAO,K,IAGmBs2C,EAA5B,MAAMc,EAA2C,QAArBd,EAAAA,EAAMC,eAAe,eAArBD,IAAAA,EAAAA,EAAgC,K,IACtCA,EAAtB,MAAMW,EAAqC,QAArBX,EAAAA,EAAMC,eAAe,gBAArBD,IAAAA,EAAAA,EAAiC,K,IACvCA,EAAhB,MAAMvsC,EAA+B,QAArBusC,EAAAA,EAAMC,eAAe,aAArBD,IAAAA,EAAAA,EAA8B,MAMvCY,EAAaM,GA6BtB,SACElB,EACAmB,EACA9kE,GAGA,MAAMukE,EAAcZ,EAAMC,eAAe,UACzC,QAAoB/4F,IAAhB05F,GAA6BA,EAAY3zF,OAAS6lD,EAAAA,UAAUmD,MAAO,CACrE,MAAM5iD,EAASutF,EAAYvtF,OAAO7I,IAAI81F,GACtC,MAAO,CAACM,EAAa,IAAMvtF,EAC7B,CAEE,MAAO,CAAC,KAAM,IAMlB,SAAyB8tF,EAAkB/2F,GACzC,MAAMg3F,EAAaD,EAAUloE,OAC7B,QAAmB/xB,IAAfk6F,EAA0B,CAC5B,MAAMlrF,EAAS,IAAIgB,MAAM9M,GAEzB,OADA8L,EAAOpQ,KAAKs7F,GACLlrF,CACT,CACE,OAAO,IAEX,CAfwBmrF,CAAgBF,EAAW9kE,EAAMjyB,QAEzD,CA3C8Bk3F,CAAiBtB,EAAOt2C,EAAWrtB,GAEzDugC,EAAcojC,EAAMnnF,OAAOxO,QAC/B,CAAC8O,EAAGY,IACFA,IAAM0vC,EAAU/zB,OAChB3b,IAAM2vC,EAAUh0B,OAChB3b,KAAM+mF,aAAAA,EAAAA,EAAqBprE,QAC3B3b,KAAM4mF,aAAAA,EAAAA,EAAejrE,QACrB3b,KAAM05C,aAAAA,EAAAA,EAAS/9B,QACf3b,KAAM6mF,aAAAA,EAAAA,EAAalrE,SAGvB,MAAO,CACL+zB,YACAC,YACAo3C,sBACAH,gBACAltC,UACAotC,kBAAmBK,EACnB7hC,0BAA2B6hC,EAC3BH,kBAAmB,K,IAAMH,E,OAAiB,QAAjBA,EAAAA,aAAAA,EAAAA,EAAah4F,YAAbg4F,IAAAA,EAAAA,EAAqB,IAAI,EAClDhkC,cACAh4C,IAAKyX,EAET,CAvFWklE,CAAqBllE,EAEhC,CAuHO,SAAS0tB,EAAYjC,G,IACnBA,EAAP,OAAgC,QAAzBA,EAAAA,aAAAA,EAAAA,EAAW2B,UAAU7gD,YAArBk/C,IAAAA,EAAAA,EAA6Bo4C,CACtC,CAEO,SAASh2C,EAAYpC,G,IACnBA,EAAP,OAAgC,QAAzBA,EAAAA,aAAAA,EAAAA,EAAW4B,UAAU9gD,YAArBk/C,IAAAA,EAAAA,EAA6Bq4C,CACtC,CAEO,SAASljC,EAAUnV,G,IACjBA,EAAAA,EAAP,OAA+B,QAAxBA,EAAAA,SAAkB,QAAlBA,EAAAA,EAAW2L,eAAX3L,IAAAA,OAAAA,EAAAA,EAAoBl/C,YAApBk/C,IAAAA,EAAAA,EAA4Bu4C,CACrC,CAEO,SAASp3B,EAAsBrsC,G,IAIlBA,EAHlB,IAAIvkB,EAAQ,EACRC,EAAM,EAEV,MAAMmxC,EAAqB,QAAT7sB,EAAAA,EAAO,UAAPA,IAAAA,OAAAA,EAAAA,EAAW/jB,OAAOyc,MAAM5d,GAAUA,EAAMzK,OAAS6lD,EAAAA,UAAUC,OAC7E,GAAItJ,EAAW,CACb,MAAMp2C,EAAS,IAAIo2C,EAAUp2C,QAAQsD,OAC/B6qF,EAAcnuF,EAAO,GAAKA,EAAOA,EAAOjJ,OAAS,GACvDiO,EAAQmpF,EAAcnuF,EAAO,GAAKA,EAAOA,EAAOjJ,OAAS,GACzDkO,EAAMkpF,EAAcnuF,EAAOA,EAAOjJ,OAAS,GAAKiJ,EAAO,EACzD,CACA,MAAO,CAAEgF,QAAOC,MAClB,CAEO,MAAMmpF,EAAqB,gBAC3B,SAASv4B,EAAqB7wD,EAAeC,GAClD,MAAM+jB,GAAQqlE,EAAAA,EAAAA,kBAAiB,CAC7B,CACE3uC,KAAM16C,EACNspF,QAASrpF,EACTspF,UAAU,EACVv4F,KAAM,8CACNF,MAAO,6BAQX,OALAkzB,EAAMzzB,KAAO64F,EACbplE,EAAM1nB,KAAO,CACXktF,UAAWC,EAAAA,UAAUC,aAGhB1lE,CACT,CAEO,SAASwoC,EAAkBjoC,GAChC,OAAyB,IAAlBA,EAAOxyB,QAAsD,IAAtCwyB,EAAO,GAAG/jB,OAAO,GAAGxF,OAAOjJ,MAC3D,C,iBClOA,IAAI43F,EAEG,SAASC,IACTD,IACHA,EAAkB,IAAIE,EAE1B,C,2BAKO,MAAMA,EAEJlmB,oBAAAA,GACL,OAAO9qE,KAAKixF,iBACd,CAEOzkB,gBAAAA,CAAiBxR,GACjBh7D,KAAKixF,oBACRjxF,KAAKixF,kBAAoB,CAAC,GAG5BjxF,KAAKixF,kBAAkB7nB,cAAgBpO,CACzC,CAEO4R,cAAAA,CAAe5R,GACfh7D,KAAKixF,oBACRjxF,KAAKixF,kBAAoB,CAAC,GAG5BjxF,KAAKixF,kBAAkB5nB,YAAcrO,CACvC,CAEO+R,cAAAA,CAAe/R,GACfh7D,KAAKixF,oBACRjxF,KAAKixF,kBAAoB,CAAC,GAG5BjxF,KAAKixF,kBAAkBlzD,YAAci9B,CACvC,CAEO4P,oBAAAA,CAAqB3xE,GAC1B+G,KAAKixF,kBAAoB,CACvB7nB,cAAenwE,EAAMmwE,cACrBC,YAAapwE,EAAMowE,YACnBtrC,YAAa9kC,EAAM8kC,YACnBgC,QAAS9mC,EAAM8mC,QACf+zB,UAAW76D,EAAM66D,UACjB+C,eAAgB59D,EAAM49D,eAE1B,C,+BAtCiE7gE,G,EAAzDi7F,uB,EAAR,M,uFAyCK,SAAStmB,IACd,OAAOmmB,CACT,C,sTC9CA,IAAII,EAcG,SAASC,EAAsBrwC,EAA0BswC,GAC9D,OAAOhpE,EAAAA,QAAQC,UAAUy4B,EAGpB,SAAiCswC,GACtC,O,sUAAO,IACF/jF,OAAOC,QAAQ8a,EAAAA,QAAQ4xC,sBAAsBxtB,QAAoB,CAACC,GAAMjzC,EAAKyJ,MAC1E8lB,EAAAA,GAAmB1vB,SAASG,KAC9BizC,EAAIjzC,GAAOyJ,GAGNwpC,IACN,CAAC,GACD2kD,EAEP,CAdiCC,CAAwBD,GACzD,CAeO,SAAStkD,EAAsBwkD,EAAqBzzF,EAAeigC,G,IAEnD1gC,EACCA,EAFtB,MAAMA,EAAavE,EAAAA,GAAWwE,YAAYygC,EAAcxgC,EAAAA,GAClDi0F,EAA0C,QAA3Bn0F,EAAAA,EAAWnE,MAAMuc,kBAAjBpY,IAAAA,OAAAA,EAAAA,EAA6BiK,OAAOqhB,UACnD8oE,EAA2C,QAA3Bp0F,EAAAA,EAAWnE,MAAMuc,kBAAjBpY,IAAAA,OAAAA,EAAAA,EAA6BiK,OAAOshB,WAE1D,GAAI4oE,GAAgBC,EAAe,CACjC,IAAIC,EAnCR,SAAgC5zF,EAAeyzF,EAAqB3oE,EAAoBD,EAAY,WAClG,OAAI7qB,IAAUqhC,EAAAA,IAAsBoyD,IAAYppE,EAAAA,GAAWrqB,OAClDopB,EAAAA,EAAAA,IAAY,GAAG7mB,EAAAA,GAAUC,WAAWqoB,MAAayhD,EAAAA,EAAAA,IAAaxhD,MAAevoB,EAAAA,GAAU2nB,UACrFlqB,IAAUqhC,EAAAA,IAAsBoyD,IAAYppE,EAAAA,GAAW1hB,OACzDygB,EAAAA,EAAAA,IAAY,GAAG7mB,EAAAA,GAAUC,WAAWqoB,MAAayhD,EAAAA,EAAAA,IAAaxhD,MAAevoB,EAAAA,GAAUuH,WAEvFsf,EAAAA,EAAAA,IACL,GAAG7mB,EAAAA,GAAUC,WAAWqoB,MAAayhD,EAAAA,EAAAA,IAAaxhD,MAAe2oE,MAAWnnB,EAAAA,EAAAA,IAAatsE,KAG/F,CAyBkB6zF,CAAuB7zF,EAAOyzF,EAASE,EAAeD,GACpE,MAAMI,EAAUR,EAAsBM,GAGtC,GAAI3zD,EAAc,EACQ6sC,EAAAA,EAAAA,MACRC,qBAAqB9sC,EAAa7kC,MACpD,CAEA,OAAO04F,CACT,CAEA,MAAO,EACT,CAQO,SAAS3vD,EAAyBsvD,EAAqBzzF,EAAeigC,GAC3E,MAAMtlC,EAAOs0C,EAAsBwkD,EAASzzF,EAAOigC,GAC/CtlC,GACFw6E,EAAex6E,EAEnB,CAQO,SAAS6rB,EAAsBqE,EAAmBC,EAAoBwiC,GAE3E,OADqBgmC,EAAsBroE,EAAAA,GAAOpB,KAAKiB,EAAYD,GAAYyiC,EAEjF,CAEO,SAAS4d,EAAoBjoB,EAAiBhjB,EAA4BszD,G,IAEzDh0F,EACDA,EAFrB,MAAMA,EAAavE,EAAAA,GAAWwE,YAAYygC,EAAcxgC,EAAAA,GAClDk0F,EAA2C,QAA3Bp0F,EAAAA,EAAWnE,MAAMuc,kBAAjBpY,IAAAA,OAAAA,EAAAA,EAA6BiK,OAAOshB,WACpD4oE,EAA0C,QAA3Bn0F,EAAAA,EAAWnE,MAAMuc,kBAAjBpY,IAAAA,OAAAA,EAAAA,EAA6BiK,OAAOqhB,UAEzD,GAAI8oE,EAAe,CAEjB,OAAOL,GADSlqE,EAAAA,EAAAA,IAAY,GAAG7mB,EAAAA,GAAUC,WAAWkxF,MAAgBpnB,EAAAA,EAAAA,IAAaqnB,MAAkB1wC,KAC7DswC,EACxC,CACA,MAAO,EACT,CASO,SAAS1mB,EAAwB5pB,EAAiBhjB,EAA4BszD,GACnF,MAAMQ,EAAgB7oB,EAAoBjoB,EAAMhjB,EAAcszD,GAE9D,GAAIQ,EAAJ,CAEE,GAAI9zD,EAAc,EACQ6sC,EAAAA,EAAAA,MACRC,qBAAqB9sC,EAAa7kC,MACpD,CAEA+5E,EAAe4e,EAEjB,MACF,CAEO,SAAS5e,EAAeD,GAC7Bme,EAAgBne,EAChBlhE,EAAAA,gBAAgBtO,KAAKwvE,EACvB,CAEO,SAAS72E,IAEd,MAAM8d,EAAWnI,EAAAA,gBAAgBoI,cACjCpI,EAAAA,gBAAgBtO,KAAKyW,EAASkgD,SAAWlgD,EAASG,OACpD,CAKO,SAASsO,IACd,MAAMzO,EAAWnI,EAAAA,gBAAgBoI,cAC3B43E,GAAaC,EAAAA,EAAAA,IAAiBhpE,EAAAA,GAAOzoB,WACrCyyE,EAAa94D,EAASkgD,SAAWlgD,EAASG,OAC1CA,EAAStI,EAAAA,gBAAgBkgF,YAE3BF,IAAe/e,GAAcA,EAAWz5E,SAASw4F,KAIhD13E,EAAOtY,IAAI,eAOdmxE,EAAe6e,IALXX,GACFr/E,EAAAA,gBAAgBhP,QAAQquF,GAE1Br/E,EAAAA,gBAAgBtO,KAAKsuF,IAIzB,C,wJCxJO,MAAMG,UAA6B9mE,EAAAA,GAKjCoP,UAAAA,GACL,MAAMl7B,EAAYvG,EAAAA,GAAWqZ,aAAalS,MAO1CA,KAAgC,0BAAEZ,EACpC,CAbAsB,WAAAA,CAAYy/C,GACVx/C,MAAMw/C,EACR,E,+8BC2BF,MAAM8xC,EAAqB,OACdC,EAA8B,UAC9BC,EAA+B,WAC/BC,EAAiC,oBACjCC,EAA+B,WAC/BC,EAAkC,2BAClCC,EAAiC,oBAEvC,SAASjjE,EAAuBvD,GACrCA,EAAUymE,2BAA2BN,EAA4BvgE,QAAQ8gE,cAAc,CACrFnzD,KAAM,QACNqlC,WAAY,oBAEd54C,EAAUymE,2BAA2BL,EAA6BxgE,QAAQ8gE,cAAc,CACtFnzD,KAAM,QACNqlC,WAAY,mBAEd54C,EAAUymE,2BAA2BJ,EAA+BzgE,QAAQ8gE,cAAc,CACxFnzD,KAAM,QACNqlC,WAAY,qBAEd54C,EAAUymE,2BAA2BH,EAA6B1gE,QAAQ8gE,cAAc,CACtFnzD,KAAM,QACNqlC,WAAY,kBAEd54C,EAAUymE,2BAA2BF,EAAgC3gE,QAAQ8gE,cAAc,CACzFnzD,KAAM,QACNqlC,WAAY,YAEd54C,EAAUymE,2BAA2BD,EAA+B5gE,QAAQ8gE,cAAc,CACxFnzD,KAAM,QACNqlC,WAAY,YAEhB,CAEO,SAASpN,EACdm7B,GAEA,OAAOA,EACJrzD,qBAAqB,WAAY,CAAEC,KAAMC,EAAAA,aAAaC,SACtDH,qBAAqB,cAAe,KACpCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAa,GAClCA,qBAAqB,cAAe,GACpCA,qBAAqB,YAAatD,EAAAA,UAAUC,MAC5C3M,aAAaC,EAClB,CAEO,SAASqjE,EACdD,GAEA,OAAOA,EACJrzD,qBAAqB,WAAY,CAAEC,KAAMC,EAAAA,aAAaC,SACtDH,qBAAqB,cAAe,KACpCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAa,GAClCA,qBAAqB,YAAatD,EAAAA,UAAUC,KACjD,CAMO,SAAS42D,EAAwB7qE,EAAkB8qE,GACxDA,EACGjwE,MAAM,CACLiJ,GAAIinE,EAAAA,eAAeC,QACnB1wF,QAAS,CACPi9B,KAAM,UACNglC,MAAOv8C,EACP1H,OAAQ,cACR2yE,UAAU,KAGbC,0BAA6D,WAAY,CACxE7/E,QAAQ,EACRyO,SAAS,EACTiM,KAAK,IAIT,MAAM/B,EAAY8mE,EAAejjE,QAEjC7D,EAAUA,EAAU7yB,OAAS,GAAGg6F,YAAc,gBAChD,CAKO,SAAS7sD,EAAwB7a,EAAiBE,EAAqBjqB,GAC5E,MAAM0xF,GAAgB3E,EAAAA,EAAAA,KAAiB1V,EAAAA,EAAAA,IAAyBptD,GAASjqB,GACnEic,EAAS65C,EAA0B67B,EAAAA,GAAoBhkE,cAAcC,aACzEujE,EAAwB9xF,KAAK,KAAMqyF,IAEjCz1E,aAAkB21E,EAAAA,IACpB7nE,EAAM8nE,oBAAoB51E,EAAOkS,SAAS,EAE9C,CAMO,SAAS0W,EACd9sC,EACAgyB,EACAE,EACAjqB,GAEA,MAAMqsF,GAAYH,EAAAA,EAAAA,IAAoBjiE,GAChC6nE,GAAgB1F,EAAAA,EAAAA,IAAiBr0F,EAAKs0F,EAAWrsF,GAEjDic,EAASi1E,EAA4BS,EAAAA,GAAoBhkE,cAC3DmkE,EAAcr6F,QAChBwkB,EAAO2R,aAAaujE,EAAwB9xF,KAAK,KAAMyyF,IAErD71E,aAAkB21E,EAAAA,IACpB7nE,EAAM8nE,oBAAoB51E,EAAOkS,SAAS,EAE9C,CAKO,SAAS2W,EACd/sC,EACAgyB,EACAE,EACAjqB,GAEA,MAAMqsF,GAAYH,EAAAA,EAAAA,IAAoBjiE,GAGhC6nE,EACkB,wBAHExgE,EAAAA,EAAAA,IAAkBv5B,EAAKiI,IAI3CwsF,EAAAA,EAAAA,IAAmBz0F,EAAKs0F,EAAWrsF,IACnCusF,EAAAA,EAAAA,IAAiBx0F,EAAKs0F,EAAWrsF,GAEjCic,EAASi1E,EAA4BS,EAAAA,GAAoBhkE,cAE3DmkE,EAAcr6F,QAChBwkB,EAAO2R,aAAaujE,EAAwB9xF,KAAK,KAAMyyF,IAErD71E,aAAkB21E,EAAAA,IACpB7nE,EAAM8nE,oBAAoB51E,EAAOkS,SAAS,EAE9C,CAEA,SAAS4jE,IACP,OAAQ7hE,GACCA,EAAOmE,MACZx8B,EAAAA,EAAAA,MAAKwxB,GACIA,EAAKxxB,KAAI,CAAC6xB,EAAOkhE,IACf,OACFlhE,GAAAA,CACHxjB,OAAQwjB,EAAMxjB,OAAOrO,KAAI,CAACmL,EAAGs/C,KAE3B,GAAIt/C,EAAE1I,OAAS6lD,EAAAA,UAAUC,KACvB,OAAOp9C,EAET,MAAMynB,GAAcunE,EAAAA,EAAAA,qBAAoBhvF,EAAG0mB,EAAOL,GAClD,OAAO,OACFrmB,GAAAA,CACHiZ,OAAQ,OACHjZ,EAAEiZ,QAAM,CACXwO,cACAj0B,MAAO,CACLqnC,KAAMo0D,EAAAA,iBAAiBC,yB,UAU3C,CAEO,SAASC,IACd,OAAQjiE,GACCA,EAAOmE,MACZx8B,EAAAA,EAAAA,MAAKwxB,GACIA,EACJxxB,KAAK2nD,IACAA,EAAEt5C,OAAOzO,OAAS,GAGjB+nD,EAAEt5C,OAAO,GAAG+V,OAAOuO,oBACtBg1B,EAAEt5C,OAAO,GAAG+V,OAAOuO,kBAAoBgmE,GAHhChxC,KAOVx7C,MAAK,CAACzO,EAAG0O,KACR,GAAI1O,EAAE2Q,OAAOzO,OAAS,GAAKwM,EAAEiC,OAAOzO,OAAS,EAC3C,OAAO,EAET,MAAM26F,EAA4B78F,EAAE2Q,OAAO,GAAG+V,OAAOuO,kBAC/C6nE,GAAOD,aAAAA,EAAAA,EAAOjxE,MAAM0vE,IACtB,GACAuB,aAAAA,EAAAA,EAAOjxE,MAAMyvE,IACb,GACAwB,aAAAA,EAAAA,EAAOjxE,MAAMwvE,IACb,GACAyB,aAAAA,EAAAA,EAAOjxE,MAAMuvE,MAEb0B,aAAAA,EAAAA,EAAOjxE,MAAMsvE,IADb,EAGA,EACE6B,EAA4BruF,EAAEiC,OAAO,GAAG+V,OAAOuO,kBAarD,OAAO6nE,IAZMC,aAAAA,EAAAA,EAAOnxE,MAAM0vE,IACtB,GACAyB,aAAAA,EAAAA,EAAOnxE,MAAMyvE,IACb,GACA0B,aAAAA,EAAAA,EAAOnxE,MAAMwvE,IACb,GACA2B,aAAAA,EAAAA,EAAOnxE,MAAMuvE,MAEb4B,aAAAA,EAAAA,EAAOnxE,MAAMsvE,IADb,EAGA,EAEc,MAK9B,CAEO,SAASxkB,EAAuBzjD,GACrC,OAAO,IAAI+nE,EAAqB,CAC9B5tF,WAAY,CAAEioB,IAAKq7D,EAAAA,qBACnBz9D,QAASA,GAEb,CAEO,SAASqP,EAAerP,EAAsB+pE,GAMnD,MAAMC,EAAWhqE,EAAQ7F,MAAM9c,I,IAAUA,E,OAAkB,QAAlBA,EAAAA,EAAMgkB,oBAANhkB,IAAAA,OAAAA,EAAAA,EAAoB+B,cAAchQ,SAAS,QAAQ,IACtF66F,EAAkBjqE,EAAQ7F,MAC7B9c,GAAUA,EAAM4iB,QAAU4/C,EAAAA,IAA0BxiE,EAAM4iB,QAAU6/C,EAAAA,KAGvE,OAAIkqB,EACK,IAAIt+D,EAAAA,GAAqB,CAC9B1G,MAAOmL,EAAoB,GACzBh2B,WAAY,CAAEioB,IAAKq7D,EAAAA,qBACnBz9D,QAASA,GACN+pE,IAELp+D,gBAAiB,CAACg+D,KAIjBM,GAUHjqE,EAAUA,EAAQ3wB,KAAKgO,GAAW,OAC7BA,GAAAA,CACH,aAAI0L,GAEF,QADkBkiC,EAAAA,EAAAA,QAAkCJ,EAAAA,EAAAA,SAC/BE,EAAAA,GAAcC,WAAak/C,EAAAA,EAAmBC,SAAWD,EAAAA,EAAmBE,OACnG,MAIGj6D,EAAoB,GACzBh2B,WAAY,CAAEioB,IAAKq7D,EAAAA,qBACnBz9D,QAASA,GACN+pE,KArBI,IAAIr+D,EAAAA,GAAqB,CAC9B1G,MAAOmL,EAAoB,GACzBh2B,WAAY,CAAEioB,IAAKq7D,EAAAA,qBACnBz9D,QAASA,GACN+pE,IAELp+D,gBAAiB,CAAC49D,IAiBxB,CAEO,SAASp5D,EAAoB45D,GAClC,OAAO,IAAI9oE,EAAAA,GAAiB,GAC1B9mB,WAAY,CAAEioB,IAAKq7D,EAAAA,qBACnBz9D,QAAS,IACN+pE,GAEP,C,qDC/TO,MAAMp0F,E,QAAYglB,GACZ0D,EAAkB,MAAM1oB,IAG9B,SAASqnB,EAAYqtE,GAC1B,MAAO,GAAGhsE,KAAmBgsE,GAC/B,C,6lCCaO,MAAM3mB,EAAqB,CAChCnsE,EACA6mF,EACAkM,EACArK,IAEO,WACFsK,GAAAA,CACHnM,WACAn+D,MAAOm+D,IACJkM,GAAAA,CACHnwF,WAAY,CAAEioB,IAAKooE,EAAAA,IACnBjzF,OACA0oF,iBASSlwD,EAAiB,CAACx4B,EAAc+yF,IACpC,OACFC,EACAD,GAAAA,CACH/yF,SAIEgzF,EAAqB,CACzBtqE,MAAO,IACP2jD,UAAW,QACX6mB,WAAY,OACZC,oBAAqB/0F,EAAAA,IAGV20E,EAAmB,CAC9B/yE,EACA6mF,EACA6B,EACAqK,IAEO5mB,EAAmBnsE,EAAM6mF,EAAU,KAAKkM,GAAwBrK,GAGlE,SAAS7uE,EAAwBvc,EAAkCmgF,GAExE,OAD2B,IAAIp6E,EAAAA,EAAkB/F,GACvBu8E,cAAc,CAAE4D,cAC5C,CAEO,SAASvjE,EAAsBzL,G,IAOlBA,EAMFA,EAAAA,EAThB,OAAIA,EAAKhN,MACA,CACLA,OAAO2xF,EAAAA,EAAAA,IAA8B3kF,EAAKhN,OAC1CC,YAAa,CAAW,QAAV+M,EAAAA,EAAKpS,aAALoS,IAAAA,EAAAA,EAAcA,EAAKhN,QAI9B,CACLA,MAAOgN,EAAKhN,MACZC,YAAa,CAAyB,QAAxB+M,EAAU,QAAVA,EAAAA,EAAKpS,aAALoS,IAAAA,EAAAA,EAAcA,EAAKhN,aAAnBgN,IAAAA,EAAAA,EAA4B,IAE9C,CAEO,SAAS+L,EACd/L,EACA9W,G,IAIUA,EADD8W,EACC9W,EAFV,MAAMqN,EAAoB,CACxBvD,MAAiB,QAAVgN,EAAAA,EAAKhN,aAALgN,IAAAA,EAAAA,EAAc,GACrBvM,OAA4B,QAApBvK,EAAAA,SAAY,QAAZA,EAAAA,EAAQsK,YAARtK,IAAAA,OAAAA,EAAAA,EAAcuK,cAAdvK,IAAAA,EAAAA,EAAwB,S,IAOhB8W,EAMFA,EAThB,MAAqB,uBAAjBzJ,EAAM9C,OACD,CACLT,OAAO2xF,EAAAA,EAAAA,IAA8BpuF,EAAMvD,OAC3CC,YAAa,CAAW,QAAV+M,EAAAA,EAAKpS,aAALoS,IAAAA,EAAAA,EAAczJ,EAAMvD,QAI/B,CACLA,OAAO2xF,EAAAA,EAAAA,IAA8B/wF,KAAKC,UAAU0C,IACpDtD,YAAa,CAAW,QAAV+M,EAAAA,EAAKpS,aAALoS,IAAAA,EAAAA,EAAczJ,EAAMvD,OAEtC,CAEO,SAASiZ,EAAmBpd,EAAgCmgF,GAEjE,OAD0B,IAAIp6E,EAAAA,EAAkB/F,GACvB+1F,cAAc,CAAE5V,cAC3C,CAEO,SAASnlE,EAA2Bhb,EAAgCmgF,GAEzE,OAD0B,IAAIp6E,EAAAA,EAAkB/F,GACvBg2F,gBAAgB,CAAE7V,cAC7C,CAEO,SAASplE,EAAwB/a,EAAgCmgF,GAEtE,OAD0B,IAAIp6E,EAAAA,EAAkB/F,GACvBi2F,cAAc,CAAE9V,cAC3C,CAsCO,SAAS3iE,EAAsBxd,GAEpC,OADA8kB,EAAAA,EAAAA,GAAgB9kB,GACTA,EACJxF,KAAKH,IACJ,IAAKA,EAAO8J,MACV,MAAO,GAGT,MAAMA,EA5CL,SAAsC9J,G,IAIWA,EAEAA,EAGFA,EAPpD,OAAIA,EAAOiK,WAAa2e,EAAAA,GAAaa,OAASzpB,EAAOiK,WAAa2e,EAAAA,GAAaC,cACzE7oB,EAAOK,MAAQypB,EAAAA,GAAwBC,gBAClC27D,EAAAA,GAAWE,gCAA4C,QAAZ5lF,EAAAA,EAAO8J,aAAP9J,IAAAA,EAAAA,EAAgB,IAE3D0lF,EAAAA,GAAWC,gCAA4C,QAAZ3lF,EAAAA,EAAO8J,aAAP9J,IAAAA,EAAAA,EAAgB,IAG7D0lF,EAAAA,GAAWC,gCAA4C,QAAZ3lF,EAAAA,EAAO8J,aAAP9J,IAAAA,EAAAA,EAAgB,GAEtE,CAiCoB67F,CAA6B77F,GAC3C,OA5BN,SAA8BA,EAA+B8J,GAE3D,OAAI9J,EAAOK,MAAQypB,EAAAA,GAAwBC,gBACrC/pB,EAAOiK,WAAa2e,EAAAA,GAAaE,eAAiB9oB,EAAOiK,WAAa2e,EAAAA,GAAaC,cAC9E,GAAGD,EAAAA,GAAaE,sBAAsBhf,KAExC,GAAG8e,EAAAA,GAAac,cAAc5f,KAGhC,GAAG9J,EAAOiK,aAAaH,IAChC,CAkBagyF,CAAqB97F,EAAQ8J,EAAM,IAE3C6I,KAAK,IACV,CACO,SAAS4sB,EAAmBC,GACjC,MAAc,OAAVA,EACKA,EAC4B,WAA1BA,EAAM79B,UAAU,EAAG,GACrB,SAAS69B,MAGXA,CACT,CAEO,SAASmhD,EAAqBnhD,GACnC,MAA8B,WAA1BA,EAAM79B,UAAU,EAAG,IAAuC,OAApB69B,EAAMvrB,OAAO,GAC9CurB,EAAMvrB,MAAM,GAAGA,MAAM,GAAI,GAG3BurB,CACT,CAEO,SAASkwD,EAAuB9uD,GACrC,OAAOA,EAAWl3B,QAAQ,WAAY,IACxC,CAGO,MAAMm0D,EAAa,G,wVCjLnB,eAAK52D,G,mGAAAA,C,CAAL,C,IAOA,WAAK8nB,G,uCAAAA,C,CAAL,C,IAaA,MAAMY,EAAS,CACpBzoB,QAAS,KAAM4mB,EAAAA,EAAAA,IAAY,WAC3BS,KAAM,CAACiB,EAAoBD,EAAY,aACrCzB,EAAAA,EAAAA,IAAY,WAAwByB,MAAayhD,EAAAA,EAAAA,IAAaxhD,WAChEhhB,OAAQ,CAACghB,EAAoBD,EAAY,aACvCzB,EAAAA,EAAAA,IAAY,WAAwByB,MAAayhD,EAAAA,EAAAA,IAAaxhD,aAChE9sB,SAAU,CAAC8sB,EAAoBD,EAAY,aACzCzB,EAAAA,EAAAA,IAAY,WAAwByB,MAAayhD,EAAAA,EAAAA,IAAaxhD,eAChEZ,OAAQ,CAACY,EAAoBD,EAAY,aACvCzB,EAAAA,EAAAA,IAAY,WAAwByB,MAAayhD,EAAAA,EAAAA,IAAaxhD,cAGrDM,EAAa,CACxBprB,MAAO,CAAC8qB,EAAoBD,EAAY,UAAWwsE,KACjDjuE,EAAAA,EAAAA,IACE,WAAwByB,MAAayhD,EAAAA,EAAAA,IAAaxhD,YAAmCusE,KAEzF1uF,MAAO,CAACmiB,EAAoBD,EAAY,UAAWwsE,KACjDjuE,EAAAA,EAAAA,IACE,WAAwByB,MAAayhD,EAAAA,EAAAA,IAAaxhD,YAAmCusE,MAI9EztE,EAA4D,CACvEpnB,QAAS,YACTqnB,KAAM,8BACN/f,OAAQ,gCACR9L,SAAU,kCACVksB,OAAQ,iCAGGC,EAAmE,CAC9ExhB,MAAO,+CACP3I,MAAO,gDAMIwpB,EAAmB,CAAC,OAAQ,KAAM,OAAO3K,EAAAA,KAAkB,OAAOzB,EAAAA,MAElE8N,EAAqB,CAChC,OACA,KACA,OACA,aACA,oBACA,eACA,kBACA,aACA/L,EAAAA,GACA,OAAOA,EAAAA,KACP,OAAON,EAAAA,KACP,OAAOzB,EAAAA,KACP,OAAOjF,EAAAA,KACP,OAAOpT,EAAAA,KACP,OAAOq+B,EAAAA,KACP,OAAO+C,EAAAA,KACP,OAAOtnB,EAAAA,KACP,OAAOO,EAAAA,KACP,OAAOzD,EAAAA,KACP,OAAO6C,EAAAA,MAGF,SAAStc,IACd,MAAMia,EAAWnI,EAAAA,gBAAgBoI,cAEjC,OADaD,EAASkgD,SAAS9sD,MAAM4M,EAASkgD,SAAShtD,YAAY,KAAO,EAAG8M,EAASkgD,SAAShhE,OAEjG,CAOO,SAASknC,IACd,MAAMpmB,EAAWnI,EAAAA,gBAAgBoI,cAC3Bk7E,EAAa,qCAEbC,EADWp7E,EAASkgD,SAAS9sD,MAAM4M,EAASkgD,SAAS7qD,QAAQ8lF,GAAcA,GAAoB,GACxE9xF,MAAM,KAEnC,IAAIqlB,EAAY0sE,EAAY,GAC5B,MAAMzsE,EAAaysE,EAAY,GACzB3/E,EAAiB2/E,EAAY,GAKnC,OAHI1sE,IAAcib,EAAAA,KAChBjb,EAAYgb,EAAAA,IAEP,CAAEhb,YAAWC,aAAYlT,iBAClC,CAEO,SAASwyD,IACd,MACMotB,EADWxjF,EAAAA,gBAAgBoI,cACFigD,SAAS72D,MAAM,KAE9C,OADagyF,EAAcA,EAAcn8F,OAAS,EAEpD,CAEO,SAAS44F,EAAiBhxC,EAAcswC,GAC7C,OAAOhpE,EAAAA,QAAQC,UAAUy4B,EAUpB,SAA4BswC,GACjC,O,sUAAO,IACF/jF,OAAOC,QAAQ8a,EAAAA,QAAQ4xC,sBAAsBxtB,QAAoB,CAACC,GAAMjzC,EAAKyJ,MAC1EokB,EAAiBhuB,SAASG,KAC5BizC,EAAIjzC,GAAOyJ,GAGNwpC,IACN,CAAC,GACD2kD,EAEP,CArBiCkE,CAAmBlE,GACpD,CACO,SAASxoE,EAAuBpT,GACrC,MAAO,CACLkT,UAAWlT,EAAWnO,OAAOqhB,UAC7BC,WAAYnT,EAAWnO,OAAOshB,WAC9BlT,eAAgBD,EAAWnO,OAAOoO,eAEtC,CAqBO,SAASgrB,EAAkBh/B,GAChC,MAAMmsF,GAAiBz2E,EAAAA,EAAAA,IAAkB1V,GACzC,IAAI,UAAEinB,EAAS,WAAEC,GAAeyX,IAC5B1X,IAAcgb,EAAAA,KAChBhb,EAAYib,EAAAA,IAGd,IADqBiqD,EAAe30F,MAAM6F,QAAQslB,MAAMjrB,GAAWA,EAAOK,MAAQkvB,IAC/D,CACjB,MAAM1O,EAAWnI,EAAAA,gBAAgBoI,cAEjC5Y,EAAAA,EAAOqN,KAAK,oCAAqC,CAC/Cga,YACA/W,IAAK,GAAGqI,EAASkgD,WAAWlgD,EAASG,UAEzC,CAGA,IAD0ByzE,EAAe30F,MAAM6F,QAAQslB,MAAMjrB,IAAWgxE,EAAAA,EAAAA,IAAahxE,EAAO8J,SAAW0lB,IAC/E,CACtB,MAAM3O,EAAWnI,EAAAA,gBAAgBoI,cAEjC5Y,EAAAA,EAAOqN,KAAK,qCAAsC,CAChDia,aACAhX,IAAK,GAAGqI,EAASkgD,WAAWlgD,EAASG,UAEzC,CACF,C,iSCtLO,SAAS0nD,EAAkBlpE,GAChC,OAAOE,EAAAA,GAAWwE,YAAY1E,EAAO2E,EAAAA,EACvC,CAMO,SAASwE,EAAcyzF,GAC5B,OAAO18F,EAAAA,GAAW8gB,YAAY47E,EAAad,EAAAA,GAC7C,CAEO,SAASrrE,EAAaizC,GAC3B,OAAOxjE,EAAAA,GAAW8gB,YAAY0iD,EAAamC,EAAAA,IAA0B37D,QAAQ,OAAQ,IACvF,CAEO,SAASuyD,EAAmBiH,GACjC,OAAOxjE,EAAAA,GAAW8gB,YAAY0iD,EAAam5B,EAAAA,IAAiC3yF,QAAQ,OAAQ,IAC9F,CAWO,SAAe4b,EAAkB82E,G,OAAlB92E,EAAAA,MAAAA,KAAAA,U,UAAAA,I,eAAf,UAAiC82E,GAItC,aAHkB3zF,EAAAA,EAAAA,oBAAmBC,IAAI4yF,EAAAA,GAAqB,CAAExM,cAAe,CAAEhlF,MAAOsyF,IAI1F,EALsB92E,E,8KAAAA,EAAAA,MAAAA,KAAAA,U,CAWf,SAAS4R,EAA2BklE,GACzC,OAAO18F,EAAAA,GAAWy7B,gBAAgBihE,EAAarqE,EAAAA,GACjD,CAMO,SAASD,EACdxa,EACAglF,EACAC,GAEA,MAAM11E,EAAMnnB,EAAAA,GAAWuY,WAAWX,EAAOglF,GACzC,OAAIz1E,aAAe01E,EACV11E,GACU,OAARA,GACT3e,EAAAA,EAAOC,KAAK,wBAAwBo0F,EAAWpwF,cAG1C,KACT,CAEO,SAASqN,EAAclC,G,IACrBA,EAAP,OAA2B,QAApBA,EAAAA,EAAMxX,MAAMsE,gBAAZkT,IAAAA,OAAAA,EAAAA,EAAsB2T,MAAMogE,GAAMA,aAAahnE,EAAAA,IACxD,C,kEC5EA,MAAMm4E,EAAK,IAAIC,EAAAA,EAAO,CACpBC,UAAW,EACXC,SAAU,EACVC,SAAU,EACVC,SAAU,EACVC,SAAU,IAGL,SAAS5/D,EAAYD,EAAoB9uB,EAAeiE,GAC7D,MAAO2qF,EAAMxnF,EAAMynF,GAASR,EAAGx7E,OAAOic,EAAU9uB,EAAO,EAAG,KAE1D,IAAI8uF,EAA0B,GAC1BC,EAA0B,IAAI7wF,IAClC,GAAI0wF,GAAQC,EAAO,CAMjB,MAAMG,EAAO,CAACr4B,EAAcs4B,KACtBA,GACFF,EAAWlgF,IAAI8nD,EACjB,EAIF,IAAK,IAAIp1D,EAAI,EAAGA,EAAIstF,EAAMj9F,OAAQ2P,IAAK,CACrC,IAAI2tF,EAAUL,EAAMttF,GAGpB+sF,EAAAA,EAAOa,UAAUrgE,EAAS1nB,EAAKk1E,IAAI4S,IAAW9nF,EAAKgoF,OAAOF,GAAUF,GAEpEF,EAAc7yF,KAAK6yB,EAAS1nB,EAAKk1E,IAAI4S,IACvC,CAEAjrF,EAAS,CAAC6qF,EAAe,IAAIC,IAC/B,MAAY/uF,GACViE,EAAS,GAEb,CAEO,MAAM0vC,GAAuB07C,EAAAA,EAAAA,UAAetgE,EAAa,I,8PCpCzD,MAAM6E,EAAkB,cAElBjG,GAAa2hE,EAAAA,EAAAA,UACxB,CAAClrE,EAAqBwJ,EAAgBliB,KACpC,GAAe,iBAAXkiB,EACF,OAAO2hE,EAAiBnrE,EAAQ1Y,GAGnB,aAAXkiB,GACF4hE,EAAoBprE,GAGtB,MAAM09B,EAAW1oB,I,IAgBbq2D,EAdF,IACE,GAAe,gBAAX7hE,EACF,OAAO8hE,EAA+Bt2D,GACjC,GAAe,aAAXxL,EACT,OAAO+hE,EAAsBvrE,EAAQgV,EAEzC,CAAE,MAAOz8B,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,mBAGvBkxB,EAASoa,EAAAA,UAAUC,MACrB,CACA,MAAMwnD,EAAernD,EAAAA,cAAc7tC,IAAIqzB,G,IAErC6hE,E,IACK9zF,EAAP,OAAoB,QAAbA,GAD4C,QAAjD8zF,EAAmB,QAAnBA,EAAAA,EAAavqD,cAAbuqD,IAAAA,OAAAA,EAAAA,EAAAA,KAAAA,EAAsBr2D,EAAU/4B,OAAO,IAAI,GAAM,UAAjDovF,IAAAA,EAAAA,GAA0DG,EAAAA,EAAAA,iBAAgBx2D,EAAU/4B,OAAO,IAAI,GAAM,IAC1FutB,UAANjyB,IAAAA,EAAAA,EAAiB,CAAC,EAGrBk0F,EAAczrE,EAAOpyB,KAAKonC,IAAe,CAC7Cz9B,MAAOmmD,EAAQ1oB,GACfA,UAAWA,MAcb,OAXAy2D,EAAY1xF,MAAK,CAACzO,EAAG0O,SACH1P,IAAZgB,EAAEiM,YAAmCjN,IAAZ0P,EAAEzC,MACtByC,EAAEzC,MAAQjM,EAAEiM,MAEd,IAGS,QAAd+P,GACFmkF,EAAY9uC,UAGP8uC,EAAY79F,KAAI,EAAGonC,eAAgBA,GAAU,IAEtD,CAAChV,EAAqBwJ,EAAgBliB,KACpC,MAAMokF,EAAiB1rE,EAAOxyB,OAAS,EAAIwyB,EAAO,GAAG/jB,OAAO,GAAGxF,OAAO,GAAK,EACrEk1F,EACJ3rE,EAAOxyB,OAAS,EACZwyB,EAAOA,EAAOxyB,OAAS,GAAGyO,OAAO,GAAGxF,OAAOupB,EAAOA,EAAOxyB,OAAS,GAAGyO,OAAO,GAAGxF,OAAOjJ,OAAS,GAC/F,EACAo+F,EAAa5rE,EAAOxyB,OAAS,GAAIq3C,EAAAA,EAAAA,IAA2B7kB,EAAO,IAAM,GACzE6rE,EAAY7rE,EAAOxyB,OAAS,GAAIq3C,EAAAA,EAAAA,IAA2B7kB,EAAOA,EAAOxyB,OAAS,IAAM,GAExFs+F,EAAe9rE,EAAOpyB,KACzB6xB,GACCA,EAAMjyB,OACN,IACAiyB,EAAMxjB,OAAOrO,KAAKkN,GAAUA,EAAM9O,KAAO,IAAM8O,EAAMrE,OAAO,GAAK,IAAMqE,EAAMrE,OAAOqE,EAAMrE,OAAOjJ,OAAS,OAE9G,MAAO,GAAGo+F,KAAcC,KAAaH,KAAkBC,KAAiB3rE,EAAOxyB,UAAUs+F,KAAgBtiE,KAAUliB,GAAW,IAIrHgkF,EAAkClsE,IAC7C,IAAK2sE,IACH,MAAM,IAAIx1F,MAAM,2CAGlB,MAAM0F,EAASmjB,EAAKnjB,OAAOxO,QAAQsL,GAAMA,EAAE1I,OAAS6lD,EAAAA,UAAU8B,SAExDg0C,EAAa/vF,EAAO,GAAGxF,OAAOjJ,OAEpC,IAAIy+F,EAAel9F,KAAKyrF,MAAMwR,EAAa,MAAQ,EAC/CC,EAAe,IAEjBA,EAAel9F,KAAKy0D,KAAKyoC,EAAe,IAG1C,MAAMC,EAASjwF,EAAO,GAAGxF,OAAOhJ,QAAO,CAAC8O,EAAGY,IAAMA,EAAI8uF,GAAiB,IAEhEx1F,EAAS,IAAI01F,aAAaD,GAGhC,OAFeE,EAAAA,oBAAoBC,gBAAgBC,mBAAmB71F,GAExDo6D,QAAQrjE,MAAM,EAGjB29F,EAAmB,CAACnrE,EAAqB1Y,KACpD,MAAMgiB,EAAe,IAAItJ,GAYzB,OAXAsJ,EAAavvB,MAAK,CAACzO,EAAG0O,KACpB,MAAMuyF,GAAS1nD,EAAAA,EAAAA,IAA2Bv5C,GACpCkhG,GAAS3nD,EAAAA,EAAAA,IAA2B7qC,GAC1C,OAAKuyF,GAAWC,GAGaA,QAAtBD,EAAAA,aAAAA,EAAAA,EAAQE,cAAcD,UAAtBD,IAAAA,EAAAA,EAFE,E,IAEFA,CAAkC,IAEzB,SAAdjlF,GACFgiB,EAAaqzB,UAERrzB,CAAY,EAGf8hE,EAAuBprE,IAC3B,IAAK+rE,IACH,OAIF,MAAMW,GAASC,EAAAA,EAAAA,qBAAoB,CAAE5sE,OAAQC,IAC7C,IAAK0sE,EACH,OAIF,MACME,EADeF,EAAOzwF,OAAOxO,QAAQsL,GAAMA,EAAE1I,OAAS6lD,EAAAA,UAAU8B,SAC1CqH,SAASr/B,GAAW,IAAImsE,aAAansE,EAAOvpB,UAExE,IACE,MAAMo2F,EAAWC,EAAAA,gBAAgBC,OAAO,CAAE56C,YAAa,KAAO66C,WAAWJ,GACzEK,EAAWJ,EAASK,QACtB,CAAE,MAAO30F,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,8CACzB,GAGF,IAAI20F,EAEG,MAAM1B,EAAwB,CAACvrE,EAAqBZ,KACzD,IAAK2sE,IACH,MAAM,IAAIx1F,MAAM,2CAElB,IAAK02F,EACH,MAAM,IAAI12F,MAAM,qCAGlB,MAAMuiB,EAAQkH,EAAOrc,QAAQyb,GAC7B,OAAI6tE,EAASE,cAAcr0E,GAAOs0E,UACzBH,EAASE,cAAcr0E,GAAOu0E,iBAAiB7/F,OAGjD,CAAC,EAGGu+F,EAAgB,KAC3B,MAAMuB,EAAiC,iBAAhBC,YAMvB,OAJKD,IACH58F,EAAAA,EAAAA,IAAqBC,EAAAA,GAAkBC,gBAAiBC,EAAAA,GAAoBD,gBAAgB4jF,oBAGvF8Y,CAAO,C,qWC1JhB,MAAME,EAAiD,GAAGt0E,EAAAA,uBACpDu0E,EAA+C,GAAGv0E,EAAAA,iCAClDw0E,EAAsB,GAAGx0E,EAAAA,gBACzBy0E,EAAgC,GAAGz0E,EAAAA,kBAGlC,SAASxf,EAAkCk0F,EAAyB5wE,GACzE,IAAK4wE,GAA0B,iBAAVA,EACnB,MAAO,GAET,MAAM9/F,EAAM+/F,EAAkCD,EAAO5wE,GACrD,IAAI8wE,EAAwB,GAC5B,IACEA,GAAc5vE,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAMtT,aAAaI,QAAQpH,IAAQ,MACzE,CAAE,MAAOyK,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,sDACzB,CAKA,OAHKgC,MAAMrD,QAAQ62F,KACjBA,EAAc,IAETA,CACT,CAGO,SAAS/N,EAAiC6N,EAAyB5wE,EAAmBC,GAC3F,IAAK2wE,GAA0B,iBAAVA,EACnB,OAEF,MAAM9/F,EAAM+/F,EAAkCD,EAAO5wE,GACrD,IAAI+uD,EAAqB,GACzB,IACEA,GAAW7tD,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAMtT,aAAaI,QAAQpH,IAAQ,MACtE,CAAE,MAAOyK,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,sDACzB,CAEKgC,MAAMrD,QAAQ80E,KACjBA,EAAW,IAIb,MAAMgiB,EAAkBhiB,EAASt+E,QAAQw+E,GAAoBA,IAAYhvD,IACzE8wE,EAAgBttE,QAAQxD,GAExBnoB,aAAaC,QAAQjH,EAAKqK,KAAKC,UAAU21F,GAC3C,CAEO,SAAS/N,EAA6B4N,EAAsB5wE,EAAmBC,GACpF,IAAK2wE,IAAU5wE,IAAcC,GAA+B,iBAAV2wE,EAChD,OAEF,MAAM9/F,EAAM+/F,EAAkCD,EAAO5wE,GACrD,IAAI+uD,EAAqB,GACzB,IACEA,GAAW7tD,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAMtT,aAAaI,QAAQpH,IAAQ,MACtE,CAAE,MAAOyK,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,sDACzB,CAEKgC,MAAMrD,QAAQ80E,KACjBA,EAAW,IAEb,MAAMgiB,EAAkBhiB,EAASt+E,QAAQw+E,GAAoBA,IAAYhvD,IACzEnoB,aAAaC,QAAQjH,EAAKqK,KAAKC,UAAU21F,GAC3C,CAEO,SAASpmB,EAAqBimB,EAAe5wE,GAClD,IAAK4wE,IAAU5wE,EACb,OAGF,MAAMlvB,EAAMkgG,EAA0BJ,GAEtC,IAAI7hB,EAAqB,GACzB,IACEA,GAAW7tD,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAMtT,aAAaI,QAAQpH,IAAQ,MACtE,CAAE,MAAOyK,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,+CACzB,CAMA,GAJKgC,MAAMrD,QAAQ80E,KACjBA,EAAW,KAGwB,IAAjCA,EAASpoE,QAAQqZ,GAAmB,CAEtC,MAAM+wE,EAAkBhiB,EAASt+E,QAAQwgG,GAAoBA,IAAYjxE,IACzE+wE,EAAgBttE,QAAQzD,GAExBloB,aAAaC,QAAQjH,EAAKqK,KAAKC,UAAU21F,GAC3C,CACF,CAEO,SAASppB,EAA0BipB,EAAe5wE,GACvD,IAAK4wE,IAAU5wE,EACb,OAEF,MAAMlvB,EAAMkgG,EAA0BJ,GACtC,IAAI7hB,EAAqB,GACzB,IACEA,GAAW7tD,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAMtT,aAAaI,QAAQpH,IAAQ,MACtE,CAAE,MAAOyK,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,sDACzB,CAEKgC,MAAMrD,QAAQ80E,KACjBA,EAAW,IAEb,MAAMgiB,EAAkBhiB,EAASt+E,QAAQwgG,GAAoBA,IAAYjxE,IACzEloB,aAAaC,QAAQjH,EAAKqK,KAAKC,UAAU21F,GAC3C,CAEO,SAAS3pB,EAA2BwpB,GACzC,IAAKA,GAA0B,iBAAVA,EACnB,MAAO,GAET,MAAM9/F,EAAMkgG,EAA0BJ,GACtC,IAAIM,EAAqB,GACzB,IACEA,GAAWhwE,EAAAA,EAAAA,IAAiB/lB,KAAKiQ,MAAMtT,aAAaI,QAAQpH,IAAQ,MACtE,CAAE,MAAOyK,GACP5C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,sDACzB,CAKA,OAHKgC,MAAMrD,QAAQi3F,KACjBA,EAAW,IAENA,CACT,CAEA,SAASL,EAAkC56E,EAAY+J,GAMrD,OAJEA,EADEA,IAAcib,EAAAA,GACJ,GAEA,IAAIjb,IAEX,GAAGwwE,KAAkDv6E,IAAK+J,GACnE,CAEA,SAASgxE,EAA0B/6E,GACjC,MAAO,GAAGw6E,KAAgDx6E,GAC5D,CAEO,SAASjE,I,IACPla,EAAP,OAA4B44F,QAArB54F,EAAAA,aAAaI,QAAQw4F,UAArB54F,IAAAA,EAAAA,OAA6CxK,CACtD,CAEO,SAAS6mB,EAA+By8E,GAC7C94F,aAAaC,QAAQ24F,EAAqBE,EAC5C,CAEA,MAAMO,EAA2B,GAAGj1E,EAAAA,iBAC7B,SAASqW,EACdhkC,EACA6iG,EACAC,G,IAEmBv5F,EAAnB,MACMw9D,GAD4E,QAA/Dx9D,EAAAA,aAAaI,QAAQ,GAAGi5F,KAA4B5iG,eAApDuJ,IAAAA,EAAAA,EAAoE,IAC9D6C,MAAM,KAC/B,IAAK26D,EAAM,KAAOA,EAAM,GACtB,MAAO,CAAE9oC,OAAQ4kE,EAAe9mF,UAAW+mF,GAI7C,MAAO,CAAE7kE,OAFM8oC,EAAM,GAEJhrD,UADCgrD,EAAM,GAE1B,CAEO,SAASluB,EAAoB74C,EAAgBi+B,EAAgBliB,GAE9DkiB,GAAUliB,GACZxS,aAAaC,QAAQ,GAAGo5F,KAA4B5iG,OAAa,GAAGi+B,KAAUliB,IAElF,CAEA,SAASgnF,EAAqBv4F,GAG5B,MAAO,IAFIw4F,EAAAA,EAAAA,IAAkBx4F,OACTy4F,EAAAA,EAAAA,IAAez4F,IAErC,CAEO,SAAS8nB,EAAmB9nB,GACjC,MAAM04F,EAASH,EAAqBv4F,GAC9B24F,EAAe55F,aAAaI,QAAQ,GAAGgkB,EAAAA,MAAiBu1E,iBAC9D,OAAIC,EACKv2F,KAAKiQ,MAAMsmF,GAEb,EACT,CAEO,SAASlqC,EAAmBzuD,EAAuBkG,GACxD,MAAMwyF,EAASH,EAAqBv4F,GACpCjB,aAAaC,QAAQ,GAAGmkB,EAAAA,MAAiBu1E,gBAAsBt2F,KAAKC,UAAU6D,GAChF,CAGA,MAAM0yF,EAA+B,GAAGz1E,EAAAA,iBACjC,SAASmwB,EAAgB5sC,EAAuBmyF,GACrD,MAAMC,EAAqB/5F,aAAaI,QAAQ,GAAGy5F,KAAgClyF,KACnF,OAAOoyF,GAA0CD,CACnD,CAEO,SAASlmD,EAAajsC,EAAuBlF,GAClD,IAAIu3F,EAAcv3F,EAAMqC,WACH,kBAAVrC,GAAwBA,IACjCu3F,EAAc,IAEhBh6F,aAAaC,QAAQ,GAAG45F,KAAgClyF,IAAUqyF,EACpE,CAGA,MAAMC,EAA+B,kCAC9B,SAASjjC,EAAoBrvD,EAAqBlF,GACvD,MAAMzJ,EAAM,GAAGihG,KAAgCtyF,SACjCnS,IAAViN,EAIJzC,aAAaC,QAAQjH,EAAKyJ,GAHxBzC,aAAak6F,WAAWlhG,EAI5B,CAEO,SAAS46D,EAAoBjsD,GAClC,OAAOqH,QAAQhP,aAAaI,QAAQ,GAAG65F,KAAgCtyF,KACzE,CAKA,MAAMwyF,EAAsC,yCACrC,SAASlxE,I,IACKjpB,EAAnB,MAAMo6F,EAAkCD,QAArBn6F,EAAAA,aAAaI,QAAQ+5F,UAArBn6F,IAAAA,EAAAA,EAA6D,GAChF,OAAQo6F,GACN,IAAK,QACL,IAAK,OACH,OAAOA,EACT,QACE,MAAO,OAEb,CAEO,SAAS5nC,EAAyBj3D,GACvCyE,aAAaC,QAAQk6F,EAAqC5+F,EAC5D,CAGA,MAAM8+F,EAAuC,GAAGj2E,EAAAA,uBACzC,SAAS6sC,EAAkBzuC,GAChC,IAAIw3E,EAAcx3E,EAAc1d,WAC3B0d,IACHw3E,EAAc,IAGhBh6F,aAAaC,QAAQ,GAAGo6F,kBAAsDL,EAChF,CAEO,SAAS9oC,EAAmB7uC,GACjC,IAAI23E,EAAc33E,EAAMvd,WACnBud,IACH23E,EAAc,IAGhBh6F,aAAaC,QAAQ,GAAGo6F,UAA8CL,EACxE,CAEO,SAASppC,EAAuBrtC,GACrC,IAAIy2E,EAAcz2E,EAAUze,WACvBye,IACHy2E,EAAc,IAGhBh6F,aAAaC,QAAQ,GAAGo6F,cAAkDL,EAC5E,CAEO,SAASxpC,EAAkBspC,GAEhC,MAAuB,SADH95F,aAAaI,QAAQ,GAAGi6F,oBACLP,CACzC,CAEO,SAASrpC,EAAmBqpC,GAEjC,MAAuB,SADH95F,aAAaI,QAAQ,GAAGi6F,YACLP,CACzC,CAEO,SAASppC,EAAuBopC,GAErC,MAAuB,SADH95F,aAAaI,QAAQ,GAAGi6F,gBACLP,CACzC,CAGA,MAAMQ,EAAiC,GAAGl2E,EAAAA,kBAKnC,SAASia,EACd12B,EACAhG,GAEA,MAAM6C,EAASxE,aAAaI,QAAQ,GAAGk6F,KAAkC3yF,K,IAEhEhG,EADT,OAAe,OAAX6C,GACmC1B,QAA9BnB,EAAAA,EAAOiiB,MAAM9gB,GAAM0B,IAAW1B,WAA9BnB,IAAAA,EAAAA,EAGF,IACT,CAEO,SAASysB,EAAwEzmB,EAAWlF,GACjGzC,aAAaC,QAAQ,GAAGq6F,KAAkC3yF,IAAUlF,EACtE,CAEA,MAAM83F,EAA4C,GAAGn2E,EAAAA,6BAC9C,SAASk7D,IAEd,QADct/E,aAAaI,QAAQm6F,EAErC,CAEA,MAAMC,EAAmC,GAAGp2E,EAAAA,gCAErC,SAASizD,IACd,MAAM50E,EAAQzC,aAAaI,QAAQo6F,GACnC,OAAO/3F,EAAQ0G,SAAS1G,EAAO,SAAMjN,CACvC,CACO,SAAS47E,EAA6BqpB,GAC3Cz6F,aAAaC,QAAQu6F,EAAkCC,EAAU31F,SAAS,IAC5E,CAEO,SAASigC,IAEd,OADc/kC,aAAaI,QAAQy4F,EAErC,CACO,SAAS3zD,EAAejsC,GAC7B+G,aAAaC,QAAQ44F,EAA+B5/F,EACtD,C,kCCtVO,MAAMvE,EAAU,CACrBgmG,UAAW,CACTzmG,UAAW,2BACX0mG,OAAQ,yBACRC,OAAQ,yBACRtnD,OAAQ,8BAEVxb,qBAAsB,CACpBne,OAAQ,+BAEVsK,OAAQ,CACN42E,cAAe,wCAEjBriG,UAAW,CACToL,WAAY,CACVvG,MAAO,sEAETy9F,SAAU,CAAC,EACXvhB,YAAa,CACXl8E,MAAO,iEAEToiB,OAAQ,CACNC,UAAW,+CAGf4pB,WAAY,CACV/hB,OAAQ,CAAC,EACTpgB,OAAQ,CAAC,EACToiC,OAAQ,CACNmG,eAAgB,8BAChBnO,gBAAiB,+BACjBgM,kBAAmB,kCACnBC,aAAc,4BACdG,aAAc,4BACdnE,qBAAsB,CACpB3vC,aAAc,oCACd6wC,aAAc,oCACdC,aAAc,oCACdd,iBAAkB,gCAClBM,qBAAsB,iCACtBV,0BAA2B,iCAE3Bc,cAAe,gCACfC,kBAAmB,iCACnBF,uBAAwB,oCAK9BtmB,MAAO,CACLE,eAAgB,oCAChBkqD,oBAAqB,oCACrB2sB,eAAgB,4BAChBC,sBAAuB,oCACvB50E,sBAAuB,sCACvBP,wBAAyB,wCACzB5B,OAAQ,CACNC,eAAgB,iCAIpBvvB,sBAAuB,CACrBs+C,WAAY,0BACZgoD,YAAa,2BACbl0B,YAAa,2BACbT,QAAS,uBACTQ,UAAW,yBACXH,UAAW,yBACX/sE,oBAAqB,oCACrBhF,oBAAqB,oCACrBK,oBAAqB,qCAEvBoG,SAAU,CACRqnE,aAAc,4BACdpmE,sBAAuB,sCACvBE,sBAAuB,uCAEzB0+F,gBAAiB,CACfj3E,OAAQ,gCACRk3E,MAAO,4BAET74C,MAAO,CACLvrD,QAAS,4BACTwrD,YAAa,sBACbmD,WAAY,4B,yGChFT,MAAM4P,EAAYnP,IACvB,GAAIj+C,UAAUiL,WAAahZ,OAAOihG,gBAChClzF,UAAUiL,UAAUkoF,UAAUl1C,OACzB,CACL,MAAMn8C,EAAKH,SAASyxF,cAAc,YAClCtxF,EAAGvH,MAAQ0jD,EACXt8C,SAASlJ,KAAK46F,YAAYvxF,GAC1BA,EAAGqtB,SACHxtB,SAAS2xF,YAAY,QACrB3xF,SAASlJ,KAAK86F,YAAYzxF,EAC5B,GAoBK,MAIMo4C,EAAuB,CAACs5C,EAAmBpxE,EAAyB1rB,KAC/E,MAAM4a,EAAWnI,EAAAA,gBAAgBoI,cAC3Bm4C,EAAehqC,EAAAA,QAAQ4xC,qBAI7B,OAHA5H,EAAY,KAA0BhzD,EAAU8Y,KAAK+hD,cACrD7H,EAAY,GAAwBhzD,EAAU4Y,GAAGiiD,cACjD7H,EAAa8pC,GAAar4F,KAAKC,UAAUgnB,GATdqxE,EAUP/zE,EAAAA,QAAQC,UAAUrO,EAASkgD,SAAU9H,GATlD,GAAGz3D,OAAOqf,SAAS2+C,aAAah+D,OAAOqf,SAAS4+C,OAAOl7C,EAAAA,OAAO6M,YAAY4xE,IADvD,IAACA,CAU4C,EAGlE,SAAStzE,EAAsB8P,GACpC,OAAIA,EAAMz/B,QACDy/B,aAAAA,EAAAA,EAAOyjE,OAAO,GAAGC,eAAgB1jE,EAAMvrB,MAAM,IAGtD/L,EAAAA,EAAOC,KAAK,2BACLq3B,EACT,CAEO,SAAS83C,EAAa93C,EAAez/B,EAAgBojG,GAC1D,OAAO3jE,EAAM79B,UAAU,EAAG5B,IAAWojG,GAAY3jE,EAAMz/B,OAASA,EAAS,IAAM,GACjF,CAEO,SAAS28D,EAA8BhT,GAE5C,MAAM3qC,GAAOsuD,EAAAA,EAAAA,UAAS3jB,EAAI05C,YAAc,GAClCvkF,GAAKwuD,EAAAA,EAAAA,UAAS3jB,EAAI05C,YAAc,GAWtC,MATc,CACZrkF,OACAF,KACAtE,IAAK,CACHwE,OACAF,MAKN,C,+SC5BO,SAASs1E,EAAsBjrF,GACpC,MAAM,qBACJqrF,EAAuB,GAAE,wBACzBL,EAA0B,GAAE,qBAC5BD,EAAuB,GAAE,OACzB1pF,GACErB,EAEJ,OAAQqB,GACN,IAAK,qBACH,MAAO,IAAIkqE,EAAAA,KAAkB8f,MAAyBL,KAA2BmP,EAAAA,MAAmBxR,EAAAA,MAAqBnsB,EAAAA,MAAqBosB,EAAAA,MAAyBmC,KAAwBlC,EAAAA,KACjM,IAAK,OACH,MAAO,IAAItd,EAAAA,KAAkB8f,MAAyBL,KAA2BmP,EAAAA,MAAmBxR,EAAAA,MAAqBnsB,EAAAA,MAAqBosB,EAAAA,MAAyBE,EAAAA,MAAoBiC,KAAwBlC,EAAAA,KACrN,IAAK,SACH,MAAO,IAAItd,EAAAA,KAAkB8f,MAAyBL,KAA2BmP,EAAAA,MAAmBxR,EAAAA,MAAqBnsB,EAAAA,MAAqBosB,EAAAA,MAAyBG,EAAAA,MAAoBgC,KAAwBlC,EAAAA,KACrN,QACE,MAAO,IAAItd,EAAAA,KAAkB8f,MAAyBL,KAA2BmP,EAAAA,MAAmBxR,EAAAA,MAAqBnsB,EAAAA,MAAqBosB,EAAAA,MAAyB7tE,EAAAA,MAAqBgwE,KAAwBlC,EAAAA,KAE1N,CAEO,SAASt1E,EAAoBnF,GAClC,MAAMrX,EAAWP,EAAAA,GAAW4jG,eAAez/E,EAAAA,GAAcvM,GACzD,KAAMrX,aAAoB2jB,EAAAA,IACxB,MAAM,IAAI9a,MAAM,0BAElB,OAAO7I,CACT,CAEO,SAAS+d,EAAkB1G,GAChC,OAAOojB,EAAwB5Y,EAAAA,GAAYxK,EAC7C,CAEO,SAASqkE,EAAyBrkE,GACvC,OAAOojB,EAAwBskD,EAAAA,GAAoB1nE,EACrD,CAEO,SAASkG,EAAoBlG,GAClC,OAAOojB,EAAwBra,EAAAA,GAAc/I,EAC/C,CAGO,SAASoG,EAA6BpG,GAC3C,OAAOojB,EAAwBntB,EAAAA,GAAyB+J,EAC1D,CAEO,SAASqF,EAAkBrF,GAChC,OAAOojB,EAAwB7d,EAAAA,GAAYvF,EAC7C,CAEO,SAASwF,EAAkBxF,GAChC,OAAOojB,EAAwBjxB,EAAAA,GAAY6N,EAC7C,CAEO,SAASogD,EAAsBpgD,GACpC,MAAMrX,EAAWP,EAAAA,GAAW4jG,eAAex/E,EAAAA,GAAiBxM,GAC5D,KAAMrX,aAAoB4hB,EAAAA,IACxB,MAAM,IAAI/Y,MAAM,6BAElB,OAAO7I,CACT,CAEO,SAAS2pC,EAAwBtyB,GACtC,MAAMrX,EAAWP,EAAAA,GAAW4jG,eAAez4D,EAAAA,GAAoBvzB,GAC/D,KAAMrX,aAAoB8jB,EAAAA,GACxB,MAAM,IAAIjb,MAAM,gCAElB,OAAO7I,CACT,CAEO,SAAS28E,EAA6BtlE,GAC3C,MAAMrX,EAAWP,EAAAA,GAAW4jG,eAAe1kB,EAAAA,GAAwBtnE,GACnE,KAAMrX,aAAoB8jB,EAAAA,GACxB,MAAM,IAAIjb,MAAM,+BAElB,OAAO7I,CACT,CAEO,SAAS4/B,EAAwBvoB,GACtC,MAAMrX,EAAWP,EAAAA,GAAW4jG,eAAex7D,EAAAA,GAAoBxwB,GAC/D,KAAMrX,aAAoB8jB,EAAAA,GACxB,MAAM,IAAIjb,MAAM,gCAElB,OAAO7I,CACT,CAEO,SAAS2L,EAAsB0L,GACpC,MAAMrX,EAAWP,EAAAA,GAAW4jG,eAAe//E,EAAAA,GAAgBjM,GAC3D,KAAMrX,aAAoBqjB,EAAAA,IACxB,MAAM,IAAIxa,MAAM,4BAElB,OAAO7I,CACT,CAEO,SAASiqB,EAAuB5S,GACrC,MAAMrX,EAAWP,EAAAA,GAAW4jG,eAAepgF,EAAAA,GAAkB5L,GAC7D,KAAMrX,aAAoB4hB,EAAAA,IACxB,MAAM,IAAI/Y,MAAM,8BAElB,OAAO7I,CACT,CAEO,SAASy6B,EAAwBT,EAAgC3iB,GACtE,MAAMrX,EAAWP,EAAAA,GAAW4jG,eAAerpE,EAAc3iB,GAEzD,KAAMrX,aAAoB4hB,EAAAA,IACxB,MAAM,IAAI/Y,MAAM,sCAAsCmxB,0BAExD,OAAOh6B,CACT,CAEO,SAASo+E,EAAkC/1E,GAChD,MAAMrI,EAAWP,EAAAA,GAAW4jG,eAAe3kB,EAAAA,GAA0Br2E,GACrE,KAAMrI,aAAoB8jB,EAAAA,GACxB,MAAM,IAAIjb,MAAM,sCAElB,OAAO7I,CACT,CAEO,SAASk6E,EAAoC7xE,GAClD+1E,EAAkC/1E,GAAU/B,SAAS,CACnDuD,MAAO,KACPpF,MAAO,IAEX,CAEO,SAASqyE,EAAgCzuE,GAC9C,MAAMrI,EAAWP,EAAAA,GAAW4jG,eAAexkB,EAAAA,GAAmBx2E,GAC9D,KAAMrI,aAAoB4hB,EAAAA,IACxB,MAAM,IAAI/Y,MAAM,+BAElB,OAAO7I,CACT,CAEO,SAASm6E,EAAmC/5E,EAAaiI,GAC9DyuE,EAAgCzuE,GAAU/B,SAAS,CACjDZ,QAAS,CACP,CAEEmE,MAAO,KACPG,SAAU,KACV5J,IAAKA,KAIb,CAEO,SAASuc,EAA2Bqd,GACzC,MAAO,OAAOA,GAChB,CAOO,SAASxvB,EACdzK,EACAi6B,EAAuBpd,EAAAA,IAEvB,IAAIoI,EAAAA,EAAAA,IAAiBjlB,GACnB,MAAO,CACL8J,MAAO9J,EAAO8J,MACdS,OAAQ,sBAIZ,IACE,MAAMg5F,GAAepyB,EAAAA,EAAAA,IAA4BnxE,EAAO8J,QACpDsnE,EAAAA,EAAAA,IAAgCpxE,EAAO8J,OACvC9J,EAAO8J,MACLgvB,GAAa0qE,EAAAA,EAAAA,IAAiB94F,KAAKiQ,MAAM4oF,IAC/C,IAAmB,IAAfzqE,EACF,OAAOA,EAEP,MAAM,IAAIqlB,EAAAA,GAAe,kDAE7B,CAAE,MAAOrzC,GAQP,GAPIA,aAAaqzC,EAAAA,GACfj2C,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,gDAAgDovB,IAAgBnwB,MAAO9J,EAAO8J,QAErG5B,EAAAA,EAAOW,MAAMiC,EAAG,CAAED,IAAK,6CAA6CovB,IAAgBnwB,MAAO9J,EAAO8J,QAIhG9J,EAAO8J,MACT,MAAO,CACLA,MAAO9J,EAAO8J,MACdS,OAAQ,SAGZ,MAAMO,CACR,CACF,CAEO,SAASiuB,EACdkB,EACAj6B,GAEA,OAAIi6B,IAAiBpd,EAAAA,IAAc7c,EAC1ByK,EAAyBzK,GAG3B,CACL8J,MAAO9J,aAAAA,EAAAA,EAAQ8J,MAEnB,CAEO,SAASi3F,EAAezpF,GAE7B,OAGK,SACLmsF,GAEA,MAAM7iB,EAAc6iB,EAA0B99F,QAC3C3F,QAAQA,GAAWA,EAAOK,MAAQmqC,EAAAA,KAClCrqC,KAAKH,GAAWA,EAAO8J,QAE1B,IAAK82E,EACH,MAAM,IAAI93E,MAAM,uCAElB,OAAO83E,EAAY,EACrB,CAdS8iB,CADgB1lF,EAAkB1G,GACaxX,MACxD,CAeO,SAASghG,EAAkBxpF,GAEhC,OADmB1L,EAAsB0L,GACvBpL,UACpB,C,sIC1QO,SAASs7B,EAA6BvjC,GAC3C,MAAMpE,EAAYH,EAAAA,GAAWC,aAAasE,GAC1C,IAAI0/F,EAAoC,GAExC,IAAK,MAAM1jG,KAAYJ,EAAUC,MAAMD,UACjCI,aAAoB4hB,EAAAA,IAAwB5hB,EAASH,MAAM6F,QAAQ5F,QACrE4jG,EAAiBv5F,KAAKnK,GAEpBA,aAAoB8jB,EAAAA,GAA0B9jB,EAASH,MAAMgK,OAAiC,eAAxB7J,EAASH,MAAMvB,MACvFolG,EAAiBv5F,KAAKnK,GAG1B,OAAO0jG,CACT,CAEO,SAASh8D,EAAer/B,GAE7B,MAAMrE,EAAavE,EAAAA,GAAWwE,YAAYoE,EAAUnE,EAAAA,GACpDF,EAAWsC,SAAS,CAClB7D,SAAU,KAGa8kC,EAA6BvjC,GAErC4F,SAAS5J,IACxB,GAAIA,aAAoB4hB,EAAAA,IAA+C,yBAAvB5hB,EAASH,MAAMO,IAAgC,CAC7F,IAAI,UAAEkvB,IAAc0X,EAAAA,EAAAA,MAEhB1X,IAAcgb,EAAAA,KAChBhb,EAAYib,EAAAA,IAEdvqC,EAASsG,SAAS,CAChBZ,QAAS1F,EAASH,MAAM6F,QAAQ3F,QAAQA,GAAWA,EAAOK,MAAQkvB,KAEtE,MAAWtvB,aAAoB4hB,EAAAA,GAC7B5hB,EAASsG,SAAS,CAChBZ,QAAS,KAEF1F,aAAoB8jB,EAAAA,GAC7B9jB,EAASsG,SAAS,CAChBuD,MAAO,GACP9K,KAAM,IAEV,GAEJ,CAEO,MAAMkf,EAAmB,SAAUje,GACxC,MAAM2jG,EAAM3jG,EAASH,MAAM+jG,KAG3B,GAAID,GAAO3jG,EAASH,MAAM6F,QAAQ6F,MAAMxL,GAAWA,EAAOK,MAAQujG,EAAIvjG,KAAOL,EAAOiK,WAAa6B,EAAAA,GAASC,QACxG,OAAO+3F,EAAAA,GAGT,MAAMC,EAAc9jG,EAASH,MAAMvB,OAASujB,EAAAA,GACtCkiF,EAAyB/jG,EAASH,MAAM6F,QAAQ3F,QAAQA,IAAWuL,EAAAA,EAAAA,IAAoBvL,EAAOiK,YAAWlK,OACzGkkG,IAAuBL,aAAAA,EAAAA,EAAKvjG,MAAkC,IAA3B2jG,EACnCE,GAAsBN,aAAAA,EAAAA,EAAKvjG,MAAO2jG,EAAyB,EAGjE,GAAID,IAAgBE,GAAuBC,GACzC,OAAOJ,EAAAA,GAIT,GAAIF,aAAAA,EAAAA,EAAKt5F,KAAM,CACb,MACM1H,EAD+BghG,EAAIt5F,KACvB1H,KAElB,GAAa,UAATA,GAA6B,UAATA,GAA6B,aAATA,EAC1C,OAAOuhG,EAAAA,EAEX,CAEA,OAAO3hF,EAAAA,EACT,C","sources":["webpack://grafana-lokiexplore-app/./Components/FilterButton.tsx","webpack://grafana-lokiexplore-app/./Components/GrotError.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/InterceptBanner.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/GiveFeedbackButton.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/CustomVariableValueSelectors.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/PatternTag.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/PatternControls.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/VariableLayoutScene.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/LayoutScene.tsx","webpack://grafana-lokiexplore-app/./services/TagValuesProviders.ts","webpack://grafana-lokiexplore-app/./services/TagKeysProviders.ts","webpack://grafana-lokiexplore-app/./services/Mousetrap.ts","webpack://grafana-lokiexplore-app/./services/KeybindingSet.ts","webpack://grafana-lokiexplore-app/./services/keyboardShortcuts.ts","webpack://grafana-lokiexplore-app/./Components/NoLokiSplash.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/IndexScene.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/LevelsVariableScene.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/LineFilterVariable.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/LineFilterVariablesScene.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/ShowLogsButtonScene.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/ToolbarScene.tsx","webpack://grafana-lokiexplore-app/./Components/Pages.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/GoToExploreButton.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/AddToInvestigationButton.tsx","webpack://grafana-lokiexplore-app/./Components/Panels/PanelMenu.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/AddToFiltersButton.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/BreakdownSearchScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/ByFrameRepeater.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/EmptyLayoutScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/FieldSelector.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/FieldValuesBreakdownScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/FieldsAggregatedBreakdownScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/FieldsBreakdownScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/LabelsAggregatedBreakdownScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/LabelBreakdownScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/LabelValuesBreakdownScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/LayoutSwitcher.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/NoMatchingLabelsScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Panels/ValueSummary.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/SearchInput.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/NumericFilterPopoverScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/SelectLabelActionScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/SortByScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/StatusWrapper.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/TimeSeriesLimit.ts","webpack://grafana-lokiexplore-app/./services/mixins.ts","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LineFilter/RegexIconButton.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LineFilter/LineFilterCaseSensitivityButton.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/LineFilterInput.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LineFilter/LineFilterEditor.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LogOptionsScene.tsx","webpack://grafana-lokiexplore-app/./Components/Table/Context/TableColumnsContext.tsx","webpack://grafana-lokiexplore-app/./Components/Table/Context/TableCellContext.tsx","webpack://grafana-lokiexplore-app/./Components/Table/Context/TableHeaderContext.tsx","webpack://grafana-lokiexplore-app/./Components/Table/ColumnSelection/LogsColumnSearch.tsx","webpack://grafana-lokiexplore-app/./Components/Table/ColumnSelection/LogsTableEmptyFields.tsx","webpack://grafana-lokiexplore-app/./Components/Table/ColumnSelection/LogsTableNavField.tsx","webpack://grafana-lokiexplore-app/./Components/Table/ColumnSelection/LogsTableActiveFields.tsx","webpack://grafana-lokiexplore-app/./Components/Table/ColumnSelection/LogsTableAvailableFields.tsx","webpack://grafana-lokiexplore-app/./Components/Table/ColumnSelection/LogsTableMultiSelect.tsx","webpack://grafana-lokiexplore-app/./Components/Table/ColumnSelection/ColumnSelectionDrawerWrap.tsx","webpack://grafana-lokiexplore-app/./Components/Table/DefaultCellWrapComponent.tsx","webpack://grafana-lokiexplore-app/./Components/Table/Context/QueryContext.tsx","webpack://grafana-lokiexplore-app/./Components/Table/CellContextMenu.tsx","webpack://grafana-lokiexplore-app/./Components/Table/constants.ts","webpack://grafana-lokiexplore-app/./Components/Table/DefaultPill.tsx","webpack://grafana-lokiexplore-app/./Components/Table/LineActionIcons.tsx","webpack://grafana-lokiexplore-app/./Components/Table/DefaultCellComponent.tsx","webpack://grafana-lokiexplore-app/./Components/Table/LogLinePill.tsx","webpack://grafana-lokiexplore-app/./Components/Table/Scroller.tsx","webpack://grafana-lokiexplore-app/./Components/Table/RawLogLineText.tsx","webpack://grafana-lokiexplore-app/./Components/Table/LogLineCellComponent.tsx","webpack://grafana-lokiexplore-app/./Components/Table/LogsTableHeader.tsx","webpack://grafana-lokiexplore-app/./Components/Table/LogsTableHeaderWrap.tsx","webpack://grafana-lokiexplore-app/./Components/Table/Table.tsx","webpack://grafana-lokiexplore-app/./Components/Table/TableWrap.tsx","webpack://grafana-lokiexplore-app/./Components/Table/TableProvider.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LogsTableScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LineFilter/LineFilterScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LogsListScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/CopyLinkButton.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LogsPanelError.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LogsPanelScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LogsVolumeActions.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/LogsVolumePanel.tsx","webpack://grafana-lokiexplore-app/./Components/IndexScene/ShareButtonScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/FilterByPatternsButton.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternFieldLabelStatsRow.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternFieldLabelStats.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternNameLabel.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternsLogsSampleScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternsTableExpandedRow.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternsViewTableScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternsFrameScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternsViewTextSearch.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternsNotDetected.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/Breakdowns/Patterns/PatternsBreakdownScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceScene/BreakdownViews.ts","webpack://grafana-lokiexplore-app/./Components/ServiceScene/ActionBarScene.tsx","webpack://grafana-lokiexplore-app/./services/migrations.ts","webpack://grafana-lokiexplore-app/./Components/ServiceScene/ServiceScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/FavoriteServiceHeaderActionScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/SelectServiceButton.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/ConfigureVolumeError.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/NoServiceSearchResults.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/TabPopoverScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/ServiceSelectionTabsScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/NoServiceVolume.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/AddLabelToFiltersHeaderActionScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/ServiceSelectionPaginationScene.tsx","webpack://grafana-lokiexplore-app/./Components/ServiceSelectionScene/ServiceSelectionScene.tsx","webpack://grafana-lokiexplore-app/./Components/Table/LogsHeaderActions.tsx","webpack://grafana-lokiexplore-app/./services/CustomConstantVariable.ts","webpack://grafana-lokiexplore-app/./services/ExpressionBuilder.ts","webpack://grafana-lokiexplore-app/./services/analytics.ts","webpack://grafana-lokiexplore-app/./services/comparison.ts","webpack://grafana-lokiexplore-app/./services/logql.ts","webpack://grafana-lokiexplore-app/./services/combineResponses.ts","webpack://grafana-lokiexplore-app/./services/shardQuerySplitting.ts","webpack://grafana-lokiexplore-app/./services/datasource.ts","webpack://grafana-lokiexplore-app/./services/expressions.ts","webpack://grafana-lokiexplore-app/./services/favorites.ts","webpack://grafana-lokiexplore-app/./services/fields.ts","webpack://grafana-lokiexplore-app/./services/filters.ts","webpack://grafana-lokiexplore-app/./services/labels.ts","webpack://grafana-lokiexplore-app/./services/levels.ts","webpack://grafana-lokiexplore-app/./services/logsFrame.ts","webpack://grafana-lokiexplore-app/./services/metadata.ts","webpack://grafana-lokiexplore-app/./services/navigate.ts","webpack://grafana-lokiexplore-app/./services/LogsSceneQueryRunner.ts","webpack://grafana-lokiexplore-app/./services/panel.ts","webpack://grafana-lokiexplore-app/./services/plugin.ts","webpack://grafana-lokiexplore-app/./services/query.ts","webpack://grafana-lokiexplore-app/./services/routing.ts","webpack://grafana-lokiexplore-app/./services/scenes.ts","webpack://grafana-lokiexplore-app/./services/search.ts","webpack://grafana-lokiexplore-app/./services/sorting.ts","webpack://grafana-lokiexplore-app/./services/store.ts","webpack://grafana-lokiexplore-app/./services/testIds.ts","webpack://grafana-lokiexplore-app/./services/text.ts","webpack://grafana-lokiexplore-app/./services/variableGetters.ts","webpack://grafana-lokiexplore-app/./services/variableHelpers.ts"],"sourcesContent":["import { css } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { testIds } from 'services/testIds';\n\ntype Props = {\n onInclude: () => void;\n onClear: () => void;\n isIncluded: boolean;\n onExclude: () => void;\n isExcluded: boolean;\n buttonFill: 'solid' | 'outline' | 'text';\n titles?: {\n include: string;\n exclude: string;\n };\n hideExclude?: boolean;\n};\n\nexport const FilterButton = (props: Props) => {\n const { isExcluded, isIncluded, onInclude, onExclude, onClear, titles, buttonFill, hideExclude } = props;\n const styles = useStyles2(getStyles, isIncluded, isExcluded, hideExclude);\n return (\n
\n \n Include\n \n {!hideExclude && (\n \n Exclude\n \n )}\n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, isIncluded: boolean, isExcluded: boolean, hideExclude?: boolean) => {\n return {\n container: css({\n display: 'flex',\n justifyContent: 'center',\n }),\n includeButton: css({\n borderRadius: 0,\n borderRight: isIncluded || hideExclude ? undefined : 'none',\n }),\n excludeButton: css({\n borderRadius: `0 ${theme.shape.radius.default} ${theme.shape.radius.default} 0`,\n borderLeft: isExcluded ? undefined : 'none',\n }),\n };\n};\n","import React from 'react';\n\nimport { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2, EmptyState } from '@grafana/ui';\n\ntype Props = {\n children?: React.ReactNode;\n};\n\nexport const GrotError = ({ children }: React.PropsWithChildren) => {\n const styles = useStyles2(getStyles);\n return (\n
\n \n {children && children}\n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrap: css({\n margin: '0 auto',\n }),\n };\n};\n","import { Alert, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport function InterceptBanner(props: { onRemove: () => void }) {\n const styles = useStyles2(getStyles);\n return (\n <>\n \n
\n \n \n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n alert: css({\n flex: 'none',\n }),\n };\n}\n","import React from 'react';\nimport { Icon, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport const GiveFeedbackButton = () => {\n const styles = useStyles2(getStyles);\n return (\n
\n \n Give feedback\n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css({\n display: 'flex',\n marginLeft: 'auto',\n gap: theme.spacing(1),\n position: 'relative',\n top: theme.spacing(-1),\n }),\n feedback: css({\n alignSelf: 'center',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n '&:hover': {\n color: theme.colors.text.link,\n },\n }),\n };\n};\n","import {\n ControlsLayout,\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n VariableValueSelectWrapper,\n} from '@grafana/scenes';\nimport React from 'react';\n\nexport interface VariableValueSelectorsState extends SceneObjectState {\n layout?: ControlsLayout;\n include?: string[];\n exclude?: string[];\n}\n\nexport class CustomVariableValueSelectors extends SceneObjectBase {\n public static Component = CustomVariableValueSelectorsRenderer;\n}\n\nfunction CustomVariableValueSelectorsRenderer({ model }: SceneComponentProps) {\n const variablesSetState = sceneGraph.getVariables(model).useState();\n let variables = variablesSetState.variables;\n\n if (model.state.include?.length) {\n variables = variablesSetState.variables.filter((variable) =>\n model.state.include?.includes(variable.state.name ?? '')\n );\n }\n if (model.state.exclude?.length) {\n variables = variablesSetState.variables.filter(\n (variable) => !model.state.exclude?.includes(variable.state.name ?? '')\n );\n }\n\n return (\n <>\n {variables.map((variable) => (\n \n ))}\n \n );\n}\n","import { css } from '@emotion/css';\nimport { Button, Icon, Tag, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport React, { useState } from 'react';\nimport { testIds } from 'services/testIds';\n\ninterface Props {\n onRemove(): void;\n pattern: string;\n size?: PatternSize;\n}\n\ntype PatternSize = 'sm' | 'lg';\n\nexport const PatternTag = ({ onRemove, pattern, size = 'lg' }: Props) => {\n const styles = useStyles2(getStyles);\n const [expanded, setExpanded] = useState(false);\n return (\n
setExpanded(!expanded)} onMouseLeave={() => setExpanded(false)}>\n \n \n \n \n
\n );\n};\n\nconst PREVIEW_WIDTH: Record = {\n sm: 50,\n lg: Math.round(window.innerWidth / 8),\n};\n\nfunction getPatternPreview(pattern: string, size: PatternSize) {\n const length = pattern.length;\n if (length < PREVIEW_WIDTH[size]) {\n return pattern;\n }\n\n const substringLength = Math.round(PREVIEW_WIDTH[size] * 0.4);\n\n return `${pattern.substring(0, substringLength)} … ${pattern.substring(length - substringLength)}`;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n pattern: css({\n display: 'flex',\n fontFamily: 'monospace',\n gap: theme.spacing(0.25),\n cursor: 'pointer',\n overflow: 'hidden',\n }),\n tag: css({\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n backgroundColor: theme.colors.secondary.main,\n border: `solid 1px ${theme.colors.secondary.border}`,\n color: theme.colors.secondary.text,\n boxSizing: 'border-box',\n padding: theme.spacing(0.25, 0.75),\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n removeButton: css({\n paddingLeft: 2.5,\n paddingRight: 2.5,\n }),\n };\n};\n","import React from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { PatternTag } from './PatternTag';\nimport { css } from '@emotion/css';\nimport { useStyles2, Text } from '@grafana/ui';\nimport { USER_EVENTS_ACTIONS, USER_EVENTS_PAGES, reportAppInteraction } from 'services/analytics';\nimport { testIds } from 'services/testIds';\nimport { AppliedPattern } from '../../services/variables';\nimport { addCurrentUrlToHistory } from '../../services/navigate';\n\ntype Props = {\n patterns: AppliedPattern[] | undefined;\n onRemove: (patterns: AppliedPattern[]) => void;\n};\nexport const PatternControls = ({ patterns, onRemove }: Props) => {\n const styles = useStyles2(getStyles);\n\n if (!patterns || patterns.length === 0) {\n return null;\n }\n\n const includePatterns = patterns.filter((pattern) => pattern.type === 'include');\n const excludePatterns = patterns.filter((pattern) => pattern.type !== 'include');\n\n const onRemovePattern = (pattern: AppliedPattern) => {\n addCurrentUrlToHistory();\n onRemove(patterns.filter((pat) => pat !== pattern));\n reportAppInteraction(USER_EVENTS_PAGES.service_details, USER_EVENTS_ACTIONS.service_details.pattern_removed, {\n includePatternsLength: includePatterns.length - (pattern?.type === 'include' ? 1 : 0),\n excludePatternsLength: excludePatterns.length - (pattern?.type !== 'include' ? 1 : 0),\n type: pattern.type,\n });\n };\n\n return (\n
\n {includePatterns.length > 0 && (\n
\n \n Included pattern{patterns.length > 1 ? 's' : ''}\n \n
\n {includePatterns.map((p) => (\n onRemovePattern(p)} />\n ))}\n
\n
\n )}\n {excludePatterns.length > 0 && (\n
\n \n Excluded pattern{excludePatterns.length > 1 ? 's' : ''}:\n \n
\n {excludePatterns.map((p) => (\n 1 ? 'sm' : 'lg'}\n onRemove={() => onRemovePattern(p)}\n />\n ))}\n
\n
\n )}\n
\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n patternsContainer: css({\n overflow: 'hidden',\n }),\n patterns: css({\n display: 'flex',\n gap: theme.spacing(1),\n alignItems: 'center',\n flexWrap: 'wrap',\n }),\n };\n}\n","import { SceneComponentProps, SceneFlexLayout, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { GiveFeedbackButton } from './GiveFeedbackButton';\nimport { CustomVariableValueSelectors } from './CustomVariableValueSelectors';\nimport { PatternControls } from './PatternControls';\nimport { IndexScene } from './IndexScene';\nimport { CONTROLS_VARS_DATASOURCE, CONTROLS_VARS_FIELDS_COMBINED, LayoutScene } from './LayoutScene';\nimport { useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { AppliedPattern } from '../../services/variables';\n\ntype HeaderPosition = 'sticky' | 'relative';\ninterface VariableLayoutSceneState extends SceneObjectState {\n position: HeaderPosition;\n}\nexport class VariableLayoutScene extends SceneObjectBase {\n static Component = ({ model }: SceneComponentProps) => {\n const indexScene = sceneGraph.getAncestor(model, IndexScene);\n const { controls, patterns } = indexScene.useState();\n\n const layoutScene = sceneGraph.getAncestor(model, LayoutScene);\n const { lineFilterRenderer, levelsRenderer } = layoutScene.useState();\n\n const styles = useStyles2((theme) => getStyles(theme, model.state.position));\n\n return (\n \n <>\n {/* First row - datasource, timepicker, refresh, labels, button */}\n {controls && (\n
\n
\n
\n {controls.map((control) => {\n return control instanceof SceneFlexLayout ? (\n \n ) : null;\n })}\n
\n
\n
\n \n
\n {controls.map((control) => {\n return control.state.key === CONTROLS_VARS_DATASOURCE ? (\n \n ) : null;\n })}\n\n
\n {controls.map((control) => {\n return !(control instanceof CustomVariableValueSelectors) &&\n !(control instanceof SceneFlexLayout) ? (\n \n ) : null;\n })}\n
\n
\n
\n
\n )}\n\n {/* 2nd row - Combined fields (fields + metadata) + Levels - custom renderer */}\n
\n {levelsRenderer && }\n {controls && (\n
\n
\n {controls.map((control) => {\n return control instanceof CustomVariableValueSelectors &&\n control.state.key === CONTROLS_VARS_FIELDS_COMBINED ? (\n \n ) : null;\n })}\n
\n
\n )}\n
\n\n {/* 3rd row - Patterns */}\n
\n indexScene.setState({ patterns })}\n />\n
\n\n {/* 4th row - Line filters - custom renderer */}\n
\n {lineFilterRenderer && }\n
\n \n \n );\n };\n}\n\n// @todo remove hardcoded height: https://github.com/grafana/grafana/issues/103795\nconst grafanaTopBarHeight = 40;\nfunction getStyles(theme: GrafanaTheme2, position: HeaderPosition) {\n return {\n firstRowWrapper: css({\n '& > div > div': {\n gap: '16px',\n label: 'first-row-wrapper',\n\n [theme.breakpoints.down('lg')]: {\n flexDirection: 'column',\n },\n },\n }),\n controlsFirstRowContainer: css({\n label: 'controls-first-row',\n display: 'flex',\n gap: theme.spacing(2),\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n [theme.breakpoints.down('md')]: {\n flexDirection: 'column-reverse',\n },\n }),\n controlsRowContainer: css({\n '&:empty': {\n display: 'none',\n },\n label: 'controls-row',\n display: 'flex',\n // @todo add custom renderers for all variables, this currently results in 2 \"empty\" rows that always take up space\n gap: theme.spacing(2),\n alignItems: 'flex-start',\n [theme.breakpoints.down('lg')]: {\n flexDirection: 'column',\n },\n }),\n stickyControlsContainer: css({\n position: 'sticky',\n top: grafanaTopBarHeight,\n left: 0,\n background: theme.colors.background.canvas,\n zIndex: theme.zIndex.navbarFixed,\n gap: theme.spacing(0),\n boxShadow: theme.shadows.z1,\n }),\n controlsContainer: css({\n label: 'controlsContainer',\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n padding: theme.spacing(2),\n }),\n filters: css({\n label: 'filters',\n display: 'flex',\n }),\n filtersWrap: css({\n label: 'filtersWrap',\n display: 'flex',\n gap: theme.spacing(2),\n width: 'calc(100% - 450)',\n flexWrap: 'wrap',\n alignItems: 'flex-end',\n }),\n controlsWrapper: css({\n label: 'controlsWrapper',\n display: 'flex',\n flexDirection: 'column',\n marginTop: theme.spacing(0.375),\n }),\n timeRangeDatasource: css({\n label: 'timeRangeDatasource',\n display: 'flex',\n gap: theme.spacing(1),\n flexWrap: 'wrap',\n justifyContent: 'flex-end',\n }),\n timeRange: css({\n label: 'timeRange',\n display: 'flex',\n flexDirection: 'row',\n gap: theme.spacing(1),\n }),\n };\n}\n","import { GrafanaTheme2 } from '@grafana/data';\nimport { SceneComponentProps, sceneGraph, SceneObject, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { IndexScene } from './IndexScene';\nimport { css } from '@emotion/css';\nimport { InterceptBanner } from './InterceptBanner';\n\nimport { PLUGIN_ID } from '../../services/plugin';\nimport { logger } from '../../services/logger';\nimport { LineFilterVariablesScene } from './LineFilterVariablesScene';\nimport { VariableLayoutScene } from './VariableLayoutScene';\nimport { LevelsVariableScene } from './LevelsVariableScene';\nimport { getDrilldownSlug, PageSlugs } from '../../services/routing';\n\ninterface LayoutSceneState extends SceneObjectState {\n interceptDismissed: boolean;\n lineFilterRenderer?: LineFilterVariablesScene;\n levelsRenderer?: LevelsVariableScene;\n variableLayout?: SceneObject;\n}\n\nconst interceptBannerStorageKey = `${PLUGIN_ID}.interceptBannerStorageKey`;\n\nexport const CONTROLS_VARS_FIRST_ROW_KEY = 'vars-row__datasource-labels-timepicker-button';\nexport const CONTROLS_VARS_METADATA_ROW_KEY = 'vars-metadata';\nexport const CONTROLS_VARS_LEVELS_ROW_KEY = 'vars-levels';\nexport const CONTROLS_VARS_FIELDS = 'vars-fields';\nexport const CONTROLS_VARS_FIELDS_COMBINED = 'vars-fields-metadata';\nexport const CONTROLS_VARS_TIMEPICKER = 'vars-timepicker';\nexport const CONTROLS_VARS_REFRESH = 'vars-refresh';\nexport const CONTROLS_VARS_TOOLBAR = 'vars-toolbar';\nexport const CONTROLS_VARS_DATASOURCE = 'vars-ds';\nexport const CONTROLS_VARS_LABELS = 'vars-labels';\n\nexport class LayoutScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({\n ...state,\n interceptDismissed: !!localStorage.getItem(interceptBannerStorageKey),\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n static Component = ({ model }: SceneComponentProps) => {\n const indexScene = sceneGraph.getAncestor(model, IndexScene);\n const { contentScene } = indexScene.useState();\n const { interceptDismissed, variableLayout } = model.useState();\n\n if (!contentScene) {\n logger.warn('content scene not defined');\n return null;\n }\n\n const styles = useStyles2(getStyles);\n return (\n
\n
\n {!interceptDismissed && (\n {\n model.dismiss();\n }}\n />\n )}\n\n {variableLayout && }\n\n {/* Final \"row\" - body */}\n
{contentScene && }
\n
\n
\n );\n };\n\n public onActivate() {\n const slug = getDrilldownSlug();\n this.setState({\n lineFilterRenderer: new LineFilterVariablesScene({}),\n levelsRenderer: new LevelsVariableScene({}),\n variableLayout: new VariableLayoutScene({ position: slug === PageSlugs.explore ? 'sticky' : 'relative' }),\n });\n }\n\n public dismiss() {\n this.setState({\n interceptDismissed: true,\n });\n localStorage.setItem(interceptBannerStorageKey, 'true');\n }\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n bodyContainer: css({\n flexGrow: 1,\n display: 'flex',\n minHeight: '100%',\n flexDirection: 'column',\n }),\n container: css({\n flexGrow: 1,\n display: 'flex',\n minHeight: '100%',\n flexDirection: 'column',\n maxWidth: '100vw',\n }),\n body: css({\n label: 'body-wrapper',\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n padding: `0 ${theme.spacing(2)} ${theme.spacing(2)}`,\n }),\n controlsContainer: css({\n label: 'controlsContainer',\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n }),\n };\n}\n","import { AdHocFiltersVariable, AdHocFilterWithLabels, SceneObject } from '@grafana/scenes';\nimport { DataSourceGetTagValuesOptions, GetTagResponse, MetricFindValue, ScopedVars, TimeRange } from '@grafana/data';\nimport { BackendSrvRequest, DataSourceWithBackend, getDataSourceSrv } from '@grafana/runtime';\nimport { getDataSource } from './scenes';\nimport { logger } from './logger';\nimport { LokiDatasource, LokiQuery } from './lokiQuery';\nimport { getDataSourceVariable, getValueFromFieldsFilter } from './variableGetters';\nimport { AdHocFiltersWithLabelsAndMeta, DetectedFieldType, VAR_LEVELS } from './variables';\nimport { isArray } from 'lodash';\nimport { FilterOp } from './filterTypes';\nimport { getFavoriteLabelValuesFromStorage } from './store';\nimport { UIVariableFilterType } from '../Components/ServiceScene/Breakdowns/AddToFiltersButton';\nimport { ExpressionBuilder } from './ExpressionBuilder';\nimport { isOperatorInclusive, isOperatorRegex } from './operatorHelpers';\n\ntype FetchDetectedLabelValuesOptions = {\n expr?: string;\n timeRange?: TimeRange;\n limit?: number;\n scopedVars?: ScopedVars;\n throwError: boolean;\n};\n\nexport type FetchDetectedFieldsOptions = {\n expr: string;\n timeRange?: TimeRange;\n limit?: number;\n scopedVars?: ScopedVars;\n};\n\nexport type DetectedFieldsResult = Array<{\n label: string;\n type: DetectedFieldType;\n cardinality: number;\n parsers: Array<'logfmt' | 'json'> | null;\n}>;\n\nexport interface LokiLanguageProviderWithDetectedLabelValues {\n fetchDetectedLabelValues: (\n labelName: string,\n queryOptions?: FetchDetectedLabelValuesOptions,\n requestOptions?: Partial\n ) => Promise;\n\n fetchDetectedFields: (\n queryOptions?: FetchDetectedFieldsOptions,\n requestOptions?: Partial\n ) => Promise;\n}\n\nexport const getDetectedFieldValuesTagValuesProvider = async (\n filter: AdHocFiltersWithLabelsAndMeta,\n variable: AdHocFiltersVariable,\n expr: string,\n sceneRef: SceneObject,\n timeRange: TimeRange,\n variableType: UIVariableFilterType\n): Promise<{\n replace?: boolean;\n values: MetricFindValue[];\n}> => {\n const datasourceUnknownType = await getDataSourceSrv().get(getDataSource(sceneRef));\n // Narrow the DataSourceApi type to DataSourceWithBackend\n if (!(datasourceUnknownType instanceof DataSourceWithBackend)) {\n logger.error(new Error('getTagValuesProvider: Invalid datasource!'));\n throw new Error('Invalid datasource!');\n }\n\n // Assert datasource is Loki\n const lokiDatasource = datasourceUnknownType as LokiDatasource;\n // Assert language provider is LokiLanguageProvider\n const languageProvider = lokiDatasource.languageProvider as LokiLanguageProviderWithDetectedLabelValues;\n\n let values: MetricFindValue[] = [];\n\n if (languageProvider && languageProvider.fetchDetectedLabelValues) {\n const options: FetchDetectedLabelValuesOptions = {\n expr,\n limit: 1000,\n timeRange,\n throwError: true,\n };\n\n const requestOptions: Partial = {\n showErrorAlert: false,\n };\n\n try {\n let results = await languageProvider.fetchDetectedLabelValues(filter.key, options, requestOptions);\n if (results && isArray(results)) {\n // Always return all level values\n if (variableType === VAR_LEVELS) {\n return { replace: true, values: results.map((key) => ({ text: key })) };\n }\n\n const currentFilters = variable.state.filters;\n\n // Remove values that are already used, if an exact match is found\n let valuesToRemove: string[] = [];\n currentFilters.forEach((filter) => {\n const value = filter.valueLabels?.[0] ?? filter.value;\n if (isOperatorRegex(filter.operator)) {\n value.split('|').forEach((v) => valuesToRemove.push(v));\n } else {\n valuesToRemove.push(value);\n }\n });\n\n const filteredResults = results.filter((value) => {\n return !valuesToRemove.includes(value);\n });\n\n if (filter.meta?.parser !== 'structuredMetadata') {\n if (filter.value) {\n const valueDecoded = getValueFromFieldsFilter(filter, variableType);\n return {\n replace: true,\n values: filteredResults.map((v) => ({\n text: v,\n value: JSON.stringify({\n value: v,\n parser: valueDecoded.parser,\n }),\n })),\n };\n } else {\n // if the filter is wip, we trust that the parser was returned in the getTagKeys method, and added to the meta prop on the filter\n return {\n replace: true,\n values: filteredResults.map((v) => ({\n text: v,\n value: JSON.stringify({\n value: v,\n parser: filter.meta?.parser ?? 'mixed',\n }),\n })),\n };\n }\n } else {\n values = filteredResults.map((r) => ({ text: r }));\n }\n } else {\n values = [];\n logger.error(results, { msg: 'fetchDetectedLabelValues error!' });\n }\n } catch (e) {\n logger.error(e, {\n msg: 'getDetectedFieldValuesTagValuesProvider: loki missing detected_field/.../values endpoint. Upgrade to Loki 3.3.0 or higher.',\n });\n values = [];\n }\n } else {\n logger.warn(\n 'getDetectedFieldValuesTagValuesProvider: fetchDetectedLabelValues is not defined in Loki datasource. Upgrade to Grafana 11.4 or higher.'\n );\n values = [];\n }\n\n return { replace: true, values };\n};\n\nexport function tagValuesFilterAdHocFilters(\n existingFilters: AdHocFilterWithLabels[],\n filter: AdHocFilterWithLabels<{}>\n) {\n let oldFiltersFiltered = existingFilters.filter(\n (f) => !(isOperatorInclusive(filter.operator) && f.key === filter.key)\n );\n\n // If there aren't any inclusive filters, we need to ignore the exclusive ones as well, or Loki will throw an error\n if (!oldFiltersFiltered.some((filter) => isOperatorInclusive(filter.operator))) {\n oldFiltersFiltered = [];\n }\n\n return oldFiltersFiltered;\n}\n\nexport async function getLabelsTagValuesProvider(\n variable: AdHocFiltersVariable,\n filter: AdHocFilterWithLabels\n): Promise<{\n replace?: boolean;\n values: GetTagResponse | MetricFindValue[];\n}> {\n const datasource_ = await getDataSourceSrv().get(getDataSource(variable));\n if (!(datasource_ instanceof DataSourceWithBackend)) {\n logger.error(new Error('getTagValuesProvider: Invalid datasource!'));\n throw new Error('Invalid datasource!');\n }\n const datasource = datasource_ as LokiDatasource;\n\n if (datasource && datasource.getTagValues) {\n // Filter out other values for this key so users can include other values for this label\n const filterTransformer = new ExpressionBuilder(variable.state.filters);\n const filters = filterTransformer.getJoinedLabelsFilters();\n const filtersFiltered = tagValuesFilterAdHocFilters(filters, filter);\n\n const options: DataSourceGetTagValuesOptions = {\n key: filter.key,\n filters: filtersFiltered,\n };\n\n let results = await datasource.getTagValues(options);\n\n if (isArray(results)) {\n results = results.filter((result) => {\n // Filter out values that we already have added as filters\n return !variable.state.filters\n .filter((f) => f.key === filter.key)\n .some((f) => {\n if (isOperatorRegex(f.operator)) {\n const values = f.value.split('|');\n return values.some((value) => value === result.text);\n } else {\n // If true, the results should be filtered out\n return f.operator === FilterOp.Equal && f.value === result.text;\n }\n });\n });\n const favoriteValuesArray = getFavoriteLabelValuesFromStorage(\n getDataSourceVariable(variable).getValue()?.toString(),\n filter.key\n );\n const favoriteValuesSet = new Set(favoriteValuesArray);\n if (favoriteValuesArray.length) {\n results.sort((a, b) => {\n return (favoriteValuesSet.has(b.text) ? 1 : -1) - (favoriteValuesSet.has(a.text) ? 1 : -1);\n });\n }\n }\n\n return { replace: true, values: results };\n } else {\n logger.error(new Error('getTagValuesProvider: missing or invalid datasource!'));\n return { replace: true, values: [] };\n }\n}\n","import { logger } from './logger';\nimport { LokiDatasource, LokiQuery } from './lokiQuery';\nimport {\n DataSourceGetTagKeysOptions,\n getDefaultTimeRange,\n GetTagResponse,\n KeyValue,\n MetricFindValue,\n ScopedVars,\n TimeRange,\n} from '@grafana/data';\nimport { AdHocFiltersVariable, SceneObject } from '@grafana/scenes';\nimport { BackendSrvRequest, DataSourceWithBackend, getDataSourceSrv } from '@grafana/runtime';\nimport { getDataSource } from './scenes';\nimport { LABELS_TO_REMOVE } from './filters';\nimport { DetectedFieldsResult, LokiLanguageProviderWithDetectedLabelValues } from './TagValuesProviders';\nimport { LEVEL_VARIABLE_VALUE, ParserType, VAR_FIELDS_AND_METADATA, VAR_LEVELS } from './variables';\nimport { UIVariableFilterType } from '../Components/ServiceScene/Breakdowns/AddToFiltersButton';\nimport { ExpressionBuilder } from './ExpressionBuilder';\n\nexport async function getLabelsTagKeysProvider(variable: AdHocFiltersVariable): Promise<{\n replace?: boolean;\n values: GetTagResponse | MetricFindValue[];\n}> {\n const datasource_ = await getDataSourceSrv().get(getDataSource(variable));\n if (!(datasource_ instanceof DataSourceWithBackend)) {\n logger.error(new Error('getTagKeysProvider: Invalid datasource!'));\n throw new Error('Invalid datasource!');\n }\n const datasource = datasource_ as LokiDatasource;\n\n if (datasource && datasource.getTagKeys) {\n const filtersTransformer = new ExpressionBuilder(variable.state.filters);\n const filters = filtersTransformer.getJoinedLabelsFilters();\n\n const options: DataSourceGetTagKeysOptions = {\n filters,\n };\n\n const tagKeys = await datasource.getTagKeys(options);\n const result: MetricFindValue[] = Array.isArray(tagKeys) ? tagKeys : [];\n const filteredResult = result.filter((key) => !LABELS_TO_REMOVE.includes(key.text));\n\n return { replace: true, values: filteredResult };\n } else {\n logger.error(new Error('getTagKeysProvider: missing or invalid datasource!'));\n return { replace: true, values: [] };\n }\n}\n\ntype DetectedFieldQueryOptions = {\n expr: string;\n timeRange?: TimeRange;\n limit?: number;\n scopedVars?: ScopedVars;\n sceneRef: SceneObject;\n variableType: UIVariableFilterType;\n};\n\nexport async function getFieldsKeysProvider({\n limit,\n timeRange,\n scopedVars,\n expr,\n sceneRef,\n variableType,\n}: DetectedFieldQueryOptions): Promise<{\n replace?: boolean;\n values: MetricFindValue[];\n}> {\n const datasource_ = await getDataSourceSrv().get(getDataSource(sceneRef));\n if (!(datasource_ instanceof DataSourceWithBackend)) {\n logger.error(new Error('getTagKeysProvider: Invalid datasource!'));\n throw new Error('Invalid datasource!');\n }\n const datasource = datasource_ as LokiDatasource;\n const languageProvider = datasource.languageProvider as LokiLanguageProviderWithDetectedLabelValues;\n\n const options: DetectedFieldQueryOptions = {\n expr,\n timeRange,\n scopedVars,\n variableType,\n sceneRef,\n limit,\n };\n\n // @todo delete after min supported grafana is upgraded to >=11.6\n // see ced526b3e37baded9082ffc3c2378a21201801b6 before this all got messed up\n const fetchDetectedFieldsFn =\n (datasource &&\n typeof languageProvider.fetchDetectedFields === 'function' &&\n languageProvider.fetchDetectedFields.bind(languageProvider)) ||\n function (opts: DetectedFieldQueryOptions) {\n return fetchDetectedFields(datasource, opts);\n };\n\n // fetchDetectedFields did not make the 11.5 cutoff, so is only available in 11.6, to keep this PR from needing to wait for 2 months before release, we're going to copy over the implementation into Grafana Logs Drilldown\n if (fetchDetectedFieldsFn && typeof fetchDetectedFieldsFn === 'function') {\n const tagKeys: DetectedFieldsResult | Error = await fetchDetectedFieldsFn(options);\n\n if (tagKeys instanceof Error) {\n logger.error(tagKeys, { msg: 'Failed to fetch detected fields' });\n throw tagKeys;\n }\n\n const result: MetricFindValue[] = tagKeys\n .filter((field) => {\n if (variableType === VAR_LEVELS) {\n return field.label === LEVEL_VARIABLE_VALUE;\n }\n\n if (variableType === VAR_FIELDS_AND_METADATA && field.label !== LEVEL_VARIABLE_VALUE) {\n return true;\n }\n\n return field.parsers !== null;\n })\n .map((field) => {\n if (variableType === VAR_FIELDS_AND_METADATA) {\n let parser: ParserType = field.parsers?.length === 1 ? field.parsers[0] : 'mixed';\n if (field.parsers === null) {\n parser = 'structuredMetadata';\n }\n\n const type = field.type;\n\n return {\n text: field.label,\n value: field.label,\n group: parser,\n meta: {\n parser,\n type,\n },\n };\n }\n\n return { text: field.label, value: field.label };\n });\n\n result.sort((a, b) => {\n if (a.group === 'structuredMetadata' && b.group !== 'structuredMetadata') {\n return -1;\n }\n if (a.group !== 'structuredMetadata' && b.group === 'structuredMetadata') {\n return 1;\n }\n return 0;\n });\n\n return { replace: true, values: result };\n } else {\n logger.error(new Error('getTagKeysProvider: missing or invalid datasource!'));\n return { replace: true, values: [] };\n }\n}\n\nconst EMPTY_SELECTOR = '{}';\n// @todo delete after min supported grafana is upgraded to >=11.6\nasync function fetchDetectedFields(\n datasource: LokiDatasource,\n queryOptions: DetectedFieldQueryOptions,\n requestOptions?: Partial\n): Promise {\n if (!('interpolateString' in datasource) || typeof datasource?.interpolateString !== 'function') {\n throw new Error('Datasource missing interpolateString method');\n }\n\n const interpolatedExpr =\n queryOptions.expr && queryOptions.expr !== EMPTY_SELECTOR\n ? datasource.interpolateString(queryOptions.expr, queryOptions.scopedVars)\n : undefined;\n\n if (!interpolatedExpr) {\n throw new Error('fetchDetectedFields requires query expression');\n }\n\n const url = `detected_fields`;\n const range = queryOptions?.timeRange ?? getDefaultTimeRange();\n const rangeParams = datasource.getTimeRangeParams(range);\n const { start, end } = rangeParams;\n const params: KeyValue = { start, end, limit: queryOptions?.limit ?? 1000 };\n params.query = interpolatedExpr;\n\n return new Promise(async (resolve, reject) => {\n try {\n const data: { limit: number; fields: DetectedFieldsResult } = await datasource.getResource(\n url,\n params,\n requestOptions\n );\n resolve(data.fields);\n } catch (error) {\n console.error('error', error);\n reject(error);\n }\n });\n}\n","/**\n * Originally from https://github.com/ccampbell/mousetrap\n *\n * Copyright 2012-2017 Craig Campbell\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 * http://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 * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.5\n * @url craig.is/killing/mice\n */\n\ninterface ExtendedKeyboardEvent extends KeyboardEvent {\n returnValue: boolean; // IE returnValue\n}\n\ntype MousetrapCallback = (e: ExtendedKeyboardEvent, combo: string) => boolean | void;\n\ninterface KeyInfo {\n key: string;\n modifiers: string[];\n action: string;\n}\n\ninterface CallbackInfo {\n /**\n * Modifiers (such as `ctrl`) involved in this binding\n */\n modifiers: string[];\n\n /**\n * A single key press binding, such as `t` (for `t v`) or `ctrl + z`\n */\n combo: string;\n\n /**\n * If this binding is a part of a sequence (`t v`, but not `ctrl + z`), this is the full sequence\n */\n seq?: string;\n\n /**\n * The event type, such as keydown, keyup, or keypress\n */\n action: string;\n level: number | undefined;\n callback: MousetrapCallback;\n}\n\n/**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n */\nlet MAP: Record = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta',\n};\n\n/**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n */\nlet KEYCODE_MAP: Record = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111: '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n};\n\n/**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivalents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n */\nlet SHIFT_MAP: Record = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n $: '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n _: '-',\n '+': '=',\n ':': ';',\n '\"': \"'\",\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\',\n};\n\n/**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n */\nlet SPECIAL_ALIASES: Record = {\n option: 'alt',\n command: 'meta',\n return: 'enter',\n escape: 'esc',\n plus: '+',\n mod: /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl',\n};\n\n/**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n */\nlet REVERSE_MAP: Record | null = null;\n\n/**\n * loop through the f keys, f1 to f19 and add them to the map\n * programmatically\n */\nfor (let i = 1; i < 20; ++i) {\n MAP[111 + i] = 'f' + i;\n}\n\n/**\n * loop through to map numbers on the numeric keypad\n */\nfor (let i = 0; i <= 9; ++i) {\n // This needs to use a string cause otherwise since 0 is falsey\n // mousetrap will never fire for numpad 0 pressed as part of a keydown\n // event.\n //\n // @see https://github.com/ccampbell/mousetrap/pull/258\n MAP[i + 96] = i.toString();\n}\n\n/**\n * takes the event and returns the key character\n */\nfunction characterFromEvent(event: KeyboardEvent): string {\n // for keypress events we should return the character as is\n if (event.type === 'keypress') {\n let character = String.fromCharCode(event.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!event.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (MAP[event.which]) {\n return MAP[event.which];\n }\n\n if (KEYCODE_MAP[event.which]) {\n return KEYCODE_MAP[event.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(event.which).toLowerCase();\n}\n\n/**\n * checks if two arrays are equal\n */\nfunction modifiersMatch(modifiers1: string[], modifiers2: string[]): boolean {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n}\n\n/**\n * takes a key event and figures out what the modifiers are\n */\nfunction eventModifiers(event: KeyboardEvent): string[] {\n let modifiers = [];\n\n if (event.shiftKey) {\n modifiers.push('shift');\n }\n\n if (event.altKey) {\n modifiers.push('alt');\n }\n\n if (event.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (event.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n}\n\n/**\n * prevents default for this event\n */\nfunction preventDefault(event: KeyboardEvent): void {\n if (event.preventDefault) {\n event.preventDefault();\n return;\n }\n\n event.returnValue = false;\n}\n\n/**\n * stops propagation for this event\n */\nfunction stopPropagation(event: KeyboardEvent): void {\n if (event.stopPropagation) {\n event.stopPropagation();\n return;\n }\n\n event.cancelBubble = true;\n}\n\n/**\n * determines if the keycode specified is a modifier key or not\n */\nfunction isModifier(key: string): boolean {\n return key === 'shift' || key === 'ctrl' || key === 'alt' || key === 'meta';\n}\n\n/**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n */\nfunction getReverseMap() {\n if (!REVERSE_MAP) {\n REVERSE_MAP = {};\n for (let key in MAP) {\n const keyNumber = parseInt(key, 10);\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (keyNumber > 95 && keyNumber < 112) {\n continue;\n }\n\n if (MAP.hasOwnProperty(key)) {\n REVERSE_MAP[MAP[key]] = key;\n }\n }\n }\n return REVERSE_MAP;\n}\n\n/**\n * picks the best action based on the key combination\n */\nfunction pickBestAction(key: string, modifiers: string[], action?: string): string {\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action === 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n}\n\n/**\n * Converts from a string key combination to an array\n */\nfunction keysFromString(combination: string): string[] {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n}\n\n/**\n * Gets info for a specific key combination\n */\nfunction getKeyInfo(combination: string, action?: string): KeyInfo {\n let keys;\n let key;\n let i;\n let modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (SPECIAL_ALIASES[key]) {\n key = SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action !== 'keypress' && SHIFT_MAP[key]) {\n key = SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n if (!key) {\n throw new Error('Unable to get key');\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action,\n };\n}\n\nfunction belongsTo(element: null | ParentNode | Element | Document, ancestor: Element | Document): boolean {\n if (element === null || element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return belongsTo(element.parentNode, ancestor);\n}\n\nexport class Mousetrap {\n target: HTMLElement | Document;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n */\n _callbacks: Record = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n */\n _directMap: Record = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n */\n _sequenceLevels: Record = {};\n\n /**\n * variable to store the setTimeout call\n */\n _resetTimer: undefined | number = undefined;\n\n /**\n * temporary state where we will ignore the next keyup\n */\n _ignoreNextKeyup: boolean | string = false;\n\n /**\n * temporary state where we will ignore the next keypress\n */\n _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n */\n _nextExpectedAction: boolean | string = false;\n\n _globalCallbacks: Record = {};\n\n constructor(el: HTMLElement | Document) {\n this.target = el;\n\n this.target.addEventListener('keypress', (event) => {\n if (event instanceof KeyboardEvent) {\n this._handleKeyEvent(event);\n }\n });\n this.target.addEventListener('keydown', (event) => {\n if (event instanceof KeyboardEvent) {\n this._handleKeyEvent(event);\n }\n });\n this.target.addEventListener('keyup', (event) => {\n if (event instanceof KeyboardEvent) {\n this._handleKeyEvent(event);\n }\n });\n }\n\n /**\n * resets all sequence counters except for the ones passed in\n */\n private _resetSequences = (doNotReset: Record): void => {\n doNotReset = doNotReset || {};\n\n let activeSequences = false,\n key;\n\n for (key in this._sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n this._sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n this._nextExpectedAction = false;\n }\n };\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n */\n private _getMatches = (\n character: string,\n modifiers: string[],\n event: Pick,\n sequenceName?: string,\n combination?: string,\n level?: number\n ): CallbackInfo[] => {\n let i;\n let callback;\n let matches = [];\n let action = event.type;\n\n // if there are no events related to this keycode\n if (!this._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action === 'keyup' && isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < this._callbacks[character].length; ++i) {\n callback = this._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && this._sequenceLevels[callback.seq] !== callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action !== callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if (\n (action === 'keypress' && !event.metaKey && !event.ctrlKey) ||\n modifiersMatch(modifiers, callback.modifiers)\n ) {\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n let deleteCombo = !sequenceName && callback.combo === combination;\n let deleteSequence = sequenceName && callback.seq === sequenceName && callback.level === level;\n if (deleteCombo || deleteSequence) {\n this._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n };\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propagation on the event\n *\n * @param combo Is the key binding that triggered this callback. When a sequence is triggered, this is the whole sequence. Otherwise, it's the intermediate keys\n * @param sequence Is the 'parent sequence' of the combo. When the whole sequence is triggered, this is undefined.\n */\n private _fireCallback = (callback: Function, e: KeyboardEvent, combo: string, sequence?: string) => {\n // if this event should not happen stop here\n const target = e.target || e.srcElement;\n if (target && target instanceof HTMLElement && this.stopCallback(e, target, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n preventDefault(e);\n stopPropagation(e);\n }\n };\n\n /**\n * handles a character key event\n */\n private _handleKey = (character: string, modifiers: string[], e: KeyboardEvent) => {\n let callbacks = this._getMatches(character, modifiers, e);\n let i;\n let doNotReset: Record = {};\n let maxLevel = 0;\n let processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level ?? 0);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n const seq = callbacks[i].seq;\n if (seq) {\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level !== maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[seq] = 1;\n this._fireCallback(callbacks[i].callback, e, callbacks[i].combo, seq);\n\n // When matching a callback, don't reset other callbacks that starts with this prefix\n // This allows chaining of multiple shortcuts that share a prefix. e.g. if we have\n // `t left` and `t right`, allow user to hit `t left`, `right` without resetting the sequence\n const suffixPrefixIndex = seq.lastIndexOf(character);\n const sequencePrefix = seq.slice(0, suffixPrefixIndex);\n for (const [seq, level] of Object.entries(this._sequenceLevels)) {\n if (level > 0 && seq.startsWith(sequencePrefix)) {\n doNotReset[seq] = 1;\n }\n }\n\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n this._fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // Don't reset a sequence if this character is the start of a sequence that has already progressed.\n // This allows `t left` to be hit immediately after a `t right`\n for (const callback of this._callbacks[character] ?? []) {\n if (callback.action === e.type && callback.seq && callback.level === 0) {\n doNotReset[callback.seq] = 1;\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n let ignoreThisKeypress = e.type === 'keypress' && this._ignoreNextKeypress;\n if (e.type === this._nextExpectedAction && !isModifier(character) && !ignoreThisKeypress) {\n this._resetSequences(doNotReset);\n }\n\n this._ignoreNextKeypress = processedSequenceCallback && e.type === 'keydown';\n };\n\n /**\n * handles a keydown event\n */\n private _handleKeyEvent = (rawEvent: Event) => {\n if (!(rawEvent instanceof KeyboardEvent)) {\n throw new Error(\"Didn't get a KeyboardEvent\");\n }\n const event: KeyboardEvent = rawEvent;\n\n // Don't trigger shortcuts when a key is just held down\n if (event.repeat) {\n return;\n }\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof event.which !== 'number') {\n // @ts-expect-error - TODO: determine what to do with this compat\n event.which = event.keyCode;\n }\n\n let character = characterFromEvent(event);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (event.type === 'keyup' && this._ignoreNextKeyup === character) {\n this._ignoreNextKeyup = false;\n return;\n }\n\n this.handleKey(character, eventModifiers(event), event);\n };\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n */\n private _resetSequenceTimer = () => {\n clearTimeout(this._resetTimer);\n this._resetTimer = setTimeout(this._resetSequences, 1000);\n };\n\n /**\n * binds a key sequence to an event\n */\n private _bindSequence = (combo: string, keys: string[], callback: MousetrapCallback, action?: string): void => {\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n this._sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n */\n const _increaseSequence = (nextAction: string): MousetrapCallback => {\n return () => {\n this._nextExpectedAction = nextAction;\n ++this._sequenceLevels[combo];\n this._resetSequenceTimer();\n };\n };\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n */\n const _callbackAndReset = (e: KeyboardEvent): void => {\n this._fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n this._ignoreNextKeyup = characterFromEvent(e);\n }\n\n // Reset the sequence timer and allow for this shortcut to be\n // triggered again just by repeating the last key\n this._resetSequenceTimer();\n };\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (let i = 0; i < keys.length; ++i) {\n let isFinal = i + 1 === keys.length;\n let wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || getKeyInfo(keys[i + 1]).action);\n this._bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n };\n\n /**\n * binds a single keyboard combination\n */\n private _bindSingle = (\n combination: string,\n callback: MousetrapCallback,\n action?: string,\n sequenceName?: string,\n level?: number\n ): void => {\n // store a direct mapped reference for use with Mousetrap.trigger\n this._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n let sequence = combination.split(' ');\n let info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n this._bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n this._callbacks[info.key] = this._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n const eventLike = { type: info.action, metaKey: false, ctrlKey: false };\n this._getMatches(info.key, info.modifiers, eventLike, sequenceName, combination, level);\n\n const callbackInfo: CallbackInfo = {\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination,\n };\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n this._callbacks[info.key][sequenceName ? 'unshift' : 'push'](callbackInfo);\n };\n\n /**\n * binds multiple combinations to the same callback\n */\n private _bindMultiple = (combinations: string[], callback: MousetrapCallback, action: string | undefined): void => {\n for (let i = 0; i < combinations.length; ++i) {\n this._bindSingle(combinations[i], callback, action);\n }\n };\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n */\n bind = (keys: string | string[], callback: MousetrapCallback, action?: string) => {\n keys = keys instanceof Array ? keys : [keys];\n this._bindMultiple(keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n */\n unbind = (keys: string | string[], action?: string) => {\n return this.bind(keys, function () {}, action);\n };\n\n // From bind-global plugin\n // https://github.com/Elvynia/mousetrap-global-bind/blob/master/mousetrap-global-bind.js#L28\n bindGlobal = (keys: string | string[], callback: MousetrapCallback, action?: string) => {\n this.bind(keys, callback, action);\n\n if (keys instanceof Array) {\n for (let i = 0; i < keys.length; i++) {\n this._globalCallbacks[keys[i]] = true;\n }\n return;\n }\n\n this._globalCallbacks[keys] = true;\n };\n\n // From bind-global plugin\n // https://github.com/Elvynia/mousetrap-global-bind/blob/master/mousetrap-global-bind.js#L42\n unbindGlobal = (keys: string | string[], action?: string) => {\n this.unbind(keys, action);\n\n if (keys instanceof Array) {\n for (let i = 0; i < keys.length; i++) {\n this._globalCallbacks[keys[i]] = false;\n }\n return;\n }\n\n this._globalCallbacks[keys] = false;\n };\n\n /**\n * triggers an event that has already been bound\n */\n trigger = (keys: string, action: string | undefined) => {\n let self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n */\n reset = () => {\n this._callbacks = {};\n this._directMap = {};\n return this;\n };\n\n /**\n * should we stop this event before firing off callbacks\n */\n stopCallback = (e: Event, element: HTMLElement, combo: string, sequence?: string): boolean => {\n // From global bind plugin https://github.com/Elvynia/mousetrap-global-bind/blob/master/mousetrap-global-bind.js\n if (this._globalCallbacks[combo] || (sequence && this._globalCallbacks[sequence])) {\n return false;\n }\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (belongsTo(element, this.target)) {\n return false;\n }\n\n // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n // not the initial event target in the shadow tree. Note that not all events cross the\n // shadow boundary.\n // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n // target cannot be obtained.\n if ('composedPath' in e && typeof e.composedPath === 'function') {\n // For open shadow trees, update `element` so that the following check works.\n let initialEventTarget = e.composedPath()[0];\n if (initialEventTarget !== e.target && initialEventTarget instanceof HTMLElement) {\n element = initialEventTarget;\n }\n }\n\n // stop for input, select, and textarea\n return Boolean(\n element.tagName === 'INPUT' ||\n element.tagName === 'SELECT' ||\n element.tagName === 'TEXTAREA' ||\n ('isContentEditable' in element && element.isContentEditable)\n );\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n handleKey: typeof this._handleKey = (...args) => {\n return this._handleKey(...args);\n };\n\n /**\n * allow custom key mappings\n */\n addKeycodes = (object: Record) => {\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n MAP[key] = object[key];\n }\n }\n REVERSE_MAP = null;\n };\n}\n","import { Mousetrap } from './Mousetrap';\n\nexport const mousetrap = new Mousetrap(document);\n\nexport interface KeyBindingItem {\n /** Key or key pattern like mod+o */\n key: string;\n /** Defaults to keydown */\n type?: string;\n /** The handler callback */\n onTrigger: () => void;\n}\n\n/**\n * Small util to make it easier to add and unbind Mousetrap keybindings\n */\nexport class KeybindingSet {\n private _binds: KeyBindingItem[] = [];\n\n addBinding(item: KeyBindingItem) {\n mousetrap.bind(\n item.key,\n (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n evt.returnValue = false;\n item.onTrigger();\n },\n 'keydown'\n );\n this._binds.push(item);\n }\n\n removeAll() {\n this._binds.forEach((item) => {\n mousetrap.unbind(item.key, item.type);\n });\n this._binds = [];\n }\n}\n","import { IndexScene } from '../Components/IndexScene/IndexScene';\nimport { KeybindingSet } from './KeybindingSet';\nimport { getAppEvents, locationService } from '@grafana/runtime';\nimport { BusEventBase, BusEventWithPayload, RawTimeRange, SetPanelAttentionEvent } from '@grafana/data';\nimport { sceneGraph, SceneObject, VizPanel } from '@grafana/scenes';\nimport { getExploreLink } from '../Components/Panels/PanelMenu';\nimport { getTimePicker } from './scenes';\nimport { OptionsWithLegend } from '@grafana/ui';\nimport { narrowTimeRange } from './narrowing';\n\nconst appEvents = getAppEvents();\n\nexport function setupKeyboardShortcuts(scene: IndexScene) {\n const keybindings = new KeybindingSet();\n let vizPanelKey: string | null = null;\n\n const panelAttentionSubscription = appEvents.subscribe(SetPanelAttentionEvent, (event) => {\n if (typeof event.payload.panelId === 'string') {\n vizPanelKey = event.payload.panelId;\n }\n });\n\n function withFocusedPanel(scene: IndexScene, fn: (vizPanel: VizPanel) => void) {\n return () => {\n const vizPanel = sceneGraph.findObject(scene, (o) => o.state.key === vizPanelKey && o.isActive);\n if (vizPanel && vizPanel instanceof VizPanel) {\n fn(vizPanel);\n return;\n }\n };\n }\n\n function withAllPanels(scene: IndexScene, fn: (vizPanel: VizPanel) => void) {\n return () => {\n const vizPanels = sceneGraph.findAllObjects(scene, (o) => o instanceof VizPanel && o.isActive);\n vizPanels.forEach((vizPanel) => {\n if (vizPanel && vizPanel instanceof VizPanel) {\n fn(vizPanel);\n }\n });\n };\n }\n\n // Toggle legend\n keybindings.addBinding({\n key: 'p l',\n onTrigger: withFocusedPanel(scene, toggleVizPanelLegend),\n });\n\n // Toggle all legend\n keybindings.addBinding({\n key: 'a l',\n onTrigger: withAllPanels(scene, toggleVizPanelLegend),\n });\n\n // Go to Explore for panel\n keybindings.addBinding({\n key: 'p x',\n onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => {\n const url = getExploreLink(vizPanel);\n if (url) {\n locationService.push(url);\n }\n }),\n });\n\n // Copy time range\n keybindings.addBinding({\n key: 't c',\n onTrigger: () => {\n const timeRange = sceneGraph.getTimeRange(scene);\n setWindowGrafanaSceneContext(timeRange);\n appEvents.publish(new CopyTimeEvent());\n },\n });\n\n // Paste time range\n keybindings.addBinding({\n key: 't v',\n onTrigger: () => {\n const event = new PasteTimeEvent({ updateUrl: false });\n scene.publishEvent(event);\n appEvents.publish(event);\n },\n });\n\n // Refresh\n keybindings.addBinding({\n key: 'd r',\n onTrigger: () => sceneGraph.getTimeRange(scene).onRefresh(),\n });\n\n // Zoom out\n keybindings.addBinding({\n key: 't z',\n onTrigger: () => {\n handleZoomOut(scene);\n },\n });\n\n // Zoom out alias\n keybindings.addBinding({\n key: 'ctrl+z',\n onTrigger: () => {\n handleZoomOut(scene);\n },\n });\n\n // Relative -> Absolute time range\n keybindings.addBinding({\n key: 't a',\n onTrigger: () => {\n const timePicker = getTimePicker(scene);\n timePicker?.toAbsolute();\n },\n });\n\n keybindings.addBinding({\n key: 't left',\n onTrigger: () => {\n handleTimeRangeShift(scene, 'left');\n },\n });\n keybindings.addBinding({\n key: 't right',\n onTrigger: () => {\n handleTimeRangeShift(scene, 'right');\n },\n });\n return () => {\n keybindings.removeAll();\n panelAttentionSubscription.unsubscribe();\n };\n}\n\nfunction handleZoomOut(scene: IndexScene) {\n const timePicker = getTimePicker(scene);\n timePicker?.onZoom();\n}\n\nfunction handleTimeRangeShift(scene: IndexScene, direction: 'left' | 'right') {\n const timePicker = getTimePicker(scene);\n\n if (!timePicker) {\n return;\n }\n\n if (direction === 'left') {\n timePicker.onMoveBackward();\n }\n if (direction === 'right') {\n timePicker.onMoveForward();\n }\n}\n\nexport function toggleVizPanelLegend(vizPanel: VizPanel): void {\n const options = vizPanel.state.options;\n if (hasLegendOptions(options) && typeof options.legend.showLegend === 'boolean') {\n vizPanel.onOptionsChange({\n legend: {\n showLegend: options.legend.showLegend ? false : true,\n },\n });\n }\n}\n\nfunction hasLegendOptions(optionsWithLegend: unknown): optionsWithLegend is OptionsWithLegend {\n return optionsWithLegend != null && typeof optionsWithLegend === 'object' && 'legend' in optionsWithLegend;\n}\n\n// Copied from https://github.com/grafana/grafana/blob/main/public/app/types/events.ts\n// @todo export from core grafana\nexport class CopyTimeEvent extends BusEventBase {\n static type = 'copy-time';\n}\n\n// Copied from https://github.com/grafana/grafana/blob/main/public/app/types/events.ts\n// @todo export from core grafana\ninterface PasteTimeEventPayload {\n updateUrl?: boolean;\n timeRange?: string;\n}\n\n// Copied from https://github.com/grafana/grafana/blob/main/public/app/types/events.ts\n// @todo export from core grafana\nexport class PasteTimeEvent extends BusEventWithPayload {\n static type = 'paste-time';\n}\n\n/**\n * Adds the scene object to the global window state so that templateSrv in core can interpolate strings using the scene interpolation engine with the scene as scope.\n * This is needed for old datasources that call templateSrv.replace without passing scopedVars. For example in DataSourceAPI.metricFindQuery.\n *\n * This is also used from TimeSrv to access scene time range.\n *\n * @todo delete after https://github.com/grafana/scenes/pull/999 is available\n */\nexport function setWindowGrafanaSceneContext(activeScene: SceneObject) {\n const prevScene = (window as any).__grafanaSceneContext;\n\n (window as any).__grafanaSceneContext = activeScene;\n\n return () => {\n if ((window as any).__grafanaSceneContext === activeScene) {\n (window as any).__grafanaSceneContext = prevScene;\n }\n };\n}\n\n// taken from /Users/galen/projects/grafana/grafana/public/app/core/utils/timePicker.ts\ntype CopiedTimeRangeResult = { range: RawTimeRange; isError: false } | { range: string; isError: true };\n// modified to narrow types from clipboard\nexport async function getCopiedTimeRange(): Promise {\n const raw = await navigator.clipboard.readText();\n let unknownRange: unknown;\n\n try {\n unknownRange = JSON.parse(raw);\n const range = narrowTimeRange(unknownRange);\n if (range) {\n return { isError: false, range };\n }\n } catch (e) {}\n return { range: raw, isError: true };\n}\n","import React from 'react';\nimport { useStyles2, useTheme2 } from '@grafana/ui';\nimport SVG from 'react-inlinesvg';\nimport { GrafanaTheme2, locationUtil } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport const NoLokiSplash = () => {\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n return (\n
\n
\n \n
\n
\n

Welcome to Grafana Logs Drilldown

\n\n

\n We noticed there is no Loki datasource configured.\n
\n Add a{' '}\n \n Loki datasource\n {' '}\n to view logs.\n

\n\n
\n\n

\n Click{' '}\n \n here\n {' '}\n to learn more...\n

\n
\n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n graphicContainer: css({\n display: 'flex',\n justifyContent: 'center',\n margin: '0 auto',\n width: '200px',\n height: '250px',\n padding: theme.spacing(1),\n [theme.breakpoints.up('md')]: {\n alignSelf: 'flex-end',\n width: '300px',\n height: 'auto',\n padding: theme.spacing(1),\n },\n [theme.breakpoints.up('lg')]: {\n alignSelf: 'flex-end',\n width: '400px',\n height: 'auto',\n padding: theme.spacing(1),\n },\n }),\n\n text: css({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n }),\n title: css({\n marginBottom: '1.5rem',\n }),\n wrap: css({\n [theme.breakpoints.up('md')]: {\n margin: '4rem auto auto auto',\n flexDirection: 'row',\n },\n padding: '2rem',\n margin: '0 auto auto auto',\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'column',\n textAlign: 'center',\n }),\n };\n};\n","import React from 'react';\n\nimport { AdHocVariableFilter, AppEvents, AppPluginMeta, rangeUtil } from '@grafana/data';\nimport {\n AdHocFiltersVariable,\n AdHocFilterWithLabels,\n CustomVariable,\n DataSourceVariable,\n SceneComponentProps,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n SceneObjectUrlSyncConfig,\n SceneObjectUrlValues,\n SceneRefreshPicker,\n SceneTimePicker,\n SceneTimeRange,\n SceneTimeRangeLike,\n SceneTimeRangeState,\n SceneVariableSet,\n} from '@grafana/scenes';\nimport {\n AppliedPattern,\n AdHocFiltersWithLabelsAndMeta,\n EXPLORATION_DS,\n MIXED_FORMAT_EXPR,\n PENDING_FIELDS_EXPR,\n PENDING_METADATA_EXPR,\n VAR_DATASOURCE,\n VAR_FIELDS,\n VAR_FIELDS_AND_METADATA,\n VAR_LABELS,\n VAR_LEVELS,\n VAR_LINE_FILTER,\n VAR_LINE_FILTERS,\n VAR_LOGS_FORMAT,\n VAR_METADATA,\n VAR_PATTERNS,\n} from 'services/variables';\n\nimport { addLastUsedDataSourceToStorage, getLastUsedDataSourceFromStorage } from 'services/store';\nimport { ServiceScene } from '../ServiceScene/ServiceScene';\nimport {\n CONTROLS_VARS_DATASOURCE,\n CONTROLS_VARS_FIELDS,\n CONTROLS_VARS_FIELDS_COMBINED,\n CONTROLS_VARS_FIRST_ROW_KEY,\n CONTROLS_VARS_LABELS,\n CONTROLS_VARS_METADATA_ROW_KEY,\n CONTROLS_VARS_REFRESH,\n CONTROLS_VARS_TIMEPICKER,\n CONTROLS_VARS_TOOLBAR,\n LayoutScene,\n} from './LayoutScene';\nimport { getDrilldownSlug, PageSlugs } from '../../services/routing';\nimport { ServiceSelectionScene } from '../ServiceSelectionScene/ServiceSelectionScene';\nimport { LoadingPlaceholder } from '@grafana/ui';\nimport { config, getAppEvents, locationService } from '@grafana/runtime';\nimport {\n onAddCustomAdHocValue,\n onAddCustomFieldValue,\n renderLevelsFilter,\n renderLogQLFieldFilters,\n renderLogQLLabelFilters,\n renderLogQLLineFilter,\n renderLogQLMetadataFilters,\n} from 'services/query';\nimport { VariableHide } from '@grafana/schema';\nimport { CustomConstantVariable } from '../../services/CustomConstantVariable';\nimport {\n getDataSourceVariable,\n getFieldsAndMetadataVariable,\n getFieldsVariable,\n getLabelsVariable,\n getLevelsVariable,\n getMetadataVariable,\n getPatternsVariable,\n getUrlParamNameForVariable,\n} from '../../services/variableGetters';\nimport { ToolbarScene } from './ToolbarScene';\nimport { DEFAULT_TIME_RANGE, OptionalRouteMatch } from '../Pages';\nimport { plugin } from '../../module';\nimport { JsonData } from '../AppConfig/AppConfig';\nimport { reportAppInteraction } from '../../services/analytics';\nimport { getDetectedFieldValuesTagValuesProvider, getLabelsTagValuesProvider } from '../../services/TagValuesProviders';\nimport { logger } from '../../services/logger';\nimport { getFieldsKeysProvider, getLabelsTagKeysProvider } from '../../services/TagKeysProviders';\nimport { getLokiDatasource } from '../../services/scenes';\nimport { ShowLogsButtonScene } from './ShowLogsButtonScene';\nimport { CustomVariableValueSelectors } from './CustomVariableValueSelectors';\nimport { getCopiedTimeRange, PasteTimeEvent, setupKeyboardShortcuts } from '../../services/keyboardShortcuts';\nimport { LokiDatasource } from '../../services/lokiQuery';\nimport { lineFilterOperators, operators } from '../../services/operators';\nimport { operatorFunction } from '../../services/variableHelpers';\nimport { FilterOp } from '../../services/filterTypes';\nimport { areArraysEqual } from '../../services/comparison';\nimport { isFilterMetadata } from '../../services/filters';\nimport { getFieldsTagValuesExpression } from '../../services/expressions';\nimport { isOperatorInclusive } from '../../services/operatorHelpers';\nimport { renderPatternFilters } from '../../services/renderPatternFilters';\nimport { NoLokiSplash } from '../NoLokiSplash';\n\nexport const showLogsButtonSceneKey = 'showLogsButtonScene';\n\nexport interface IndexSceneState extends SceneObjectState {\n // contentScene is the scene that is displayed in the main body of the index scene - it can be either the service selection or service scene\n contentScene?: SceneObject;\n controls: SceneObject[];\n body?: LayoutScene;\n initialFilters?: AdHocVariableFilter[];\n patterns?: AppliedPattern[];\n routeMatch?: OptionalRouteMatch;\n ds?: LokiDatasource;\n}\n\nexport class IndexScene extends SceneObjectBase {\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['patterns'] });\n\n public constructor(state: Partial) {\n const { variablesScene, unsub } = getVariableSet(\n getLastUsedDataSourceFromStorage() ?? 'grafanacloud-logs',\n state.initialFilters\n );\n\n const controls: SceneObject[] = [\n new SceneFlexLayout({\n key: CONTROLS_VARS_FIRST_ROW_KEY,\n direction: 'row',\n children: [\n new SceneFlexItem({\n body: new CustomVariableValueSelectors({\n key: CONTROLS_VARS_LABELS,\n layout: 'vertical',\n include: [VAR_LABELS],\n }),\n }),\n new ShowLogsButtonScene({\n key: showLogsButtonSceneKey,\n disabled: true,\n }),\n ],\n }),\n new CustomVariableValueSelectors({\n key: CONTROLS_VARS_METADATA_ROW_KEY,\n layout: 'vertical',\n include: [VAR_METADATA],\n }),\n new CustomVariableValueSelectors({\n key: CONTROLS_VARS_FIELDS,\n layout: 'vertical',\n include: [VAR_FIELDS],\n }),\n new CustomVariableValueSelectors({\n key: CONTROLS_VARS_DATASOURCE,\n layout: 'horizontal',\n include: [VAR_DATASOURCE],\n }),\n new CustomVariableValueSelectors({\n key: CONTROLS_VARS_FIELDS_COMBINED,\n layout: 'vertical',\n include: [VAR_FIELDS_AND_METADATA],\n }),\n new SceneTimePicker({ key: CONTROLS_VARS_TIMEPICKER }),\n new SceneRefreshPicker({ key: CONTROLS_VARS_REFRESH }),\n ];\n\n if (getDrilldownSlug() === 'explore' && config.featureToggles.exploreLogsAggregatedMetrics) {\n controls.push(\n new ToolbarScene({\n key: CONTROLS_VARS_TOOLBAR,\n isOpen: false,\n })\n );\n }\n\n super({\n $timeRange: state.$timeRange ?? new SceneTimeRange({}),\n $variables: state.$variables ?? variablesScene,\n controls: state.controls ?? controls,\n // Need to clear patterns state when the class in constructed\n patterns: [],\n ...state,\n body: new LayoutScene({}),\n });\n\n this._subs.add(unsub);\n this.addActivationHandler(this.onActivate.bind(this));\n\n getLokiDatasource(this).then((ds) => {\n this.setState({ ds });\n });\n }\n\n static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n\n const dsVar = getDataSourceVariable(model);\n if (!dsVar.state.options.length) {\n return ;\n }\n\n if (body) {\n return ;\n }\n\n return ;\n };\n\n public onActivate() {\n const stateUpdate: Partial = {};\n this.setVariableProviders();\n\n // Show \"show logs\" button\n const showLogsButton = sceneGraph.findByKeyAndType(this, showLogsButtonSceneKey, ShowLogsButtonScene);\n showLogsButton.setState({ hidden: false });\n\n if (!this.state.contentScene) {\n stateUpdate.contentScene = getContentScene(this.state.routeMatch?.params.breakdownLabel);\n }\n this.setTagProviders();\n this.setState(stateUpdate);\n\n this.updatePatterns(this.state, getPatternsVariable(this));\n this.resetVariablesIfNotInUrl(getFieldsVariable(this), getUrlParamNameForVariable(VAR_FIELDS));\n this.resetVariablesIfNotInUrl(getLevelsVariable(this), getUrlParamNameForVariable(VAR_LEVELS));\n\n this._subs.add(\n this.subscribeToState((newState) => {\n this.updatePatterns(newState, getPatternsVariable(this));\n })\n );\n\n const timeRange = sceneGraph.getTimeRange(this);\n\n this._subs.add(timeRange.subscribeToState(this.limitMaxInterval(timeRange)));\n this._subs.add(this.subscribeToEvent(PasteTimeEvent, this.subscribeToPasteTimeEvent));\n\n const fieldFilters = getFieldsVariable(this).state.filters;\n const metadataFilters = getMetadataVariable(this).state.filters;\n\n const fieldsAndMetadataVariable = getFieldsAndMetadataVariable(this);\n\n // Sync fields in query variables to support existing urls\n fieldsAndMetadataVariable.updateFilters([...metadataFilters, ...fieldFilters]);\n\n // Update the fields/metadata filters when the combined variable is changed in the variable UI.\n this._subs.add(fieldsAndMetadataVariable.subscribeToState(this.subscribeToCombinedFieldsVariable));\n\n const clearKeyBindings = setupKeyboardShortcuts(this);\n\n return () => {\n clearKeyBindings();\n };\n }\n\n private subscribeToCombinedFieldsVariable = (\n newState: AdHocFiltersVariable['state'],\n prevState?: AdHocFiltersVariable['state']\n ) => {\n if (!areArraysEqual(newState.filters, prevState?.filters)) {\n const metadataFilters = newState.filters.filter((f: AdHocFiltersWithLabelsAndMeta) => isFilterMetadata(f));\n const fieldFilters = newState.filters.filter((f: AdHocFiltersWithLabelsAndMeta) => !isFilterMetadata(f));\n\n getFieldsVariable(this).updateFilters(fieldFilters);\n getMetadataVariable(this).updateFilters(metadataFilters);\n }\n };\n\n private setTagProviders() {\n this.setLabelsProviders();\n }\n\n private setLabelsProviders() {\n const labelsVar = getLabelsVariable(this);\n\n labelsVar._getOperators = () => operatorFunction(labelsVar);\n\n labelsVar.setState({\n getTagKeysProvider: getLabelsTagKeysProvider,\n getTagValuesProvider: getLabelsTagValuesProvider,\n });\n }\n\n private subscribeToPasteTimeEvent = async () => {\n const copiedRange = await getCopiedTimeRange();\n\n if (copiedRange.isError) {\n return;\n }\n\n const timeRange = sceneGraph.getTimeRange(this);\n const to = typeof copiedRange.range.to === 'string' ? copiedRange.range.to : undefined;\n const from = typeof copiedRange.range.from === 'string' ? copiedRange.range.from : undefined;\n const newRange = rangeUtil.convertRawToRange(copiedRange.range);\n\n if (timeRange && newRange) {\n timeRange.setState({\n value: newRange,\n to,\n from,\n });\n } else {\n logger.error(new Error('Invalid time range from clipboard'), {\n msg: 'Invalid time range from clipboard',\n sceneTimeRange: typeof timeRange,\n to: to ?? '',\n from: from ?? '',\n });\n }\n };\n\n /**\n * If user selects a time range longer then the max configured interval, show toast and set the previous time range.\n * @param timeRange\n * @private\n */\n private limitMaxInterval(timeRange: SceneTimeRangeLike) {\n return (newState: SceneTimeRangeState, prevState: SceneTimeRangeState) => {\n const { jsonData } = plugin.meta as AppPluginMeta;\n if (jsonData?.interval) {\n try {\n const maxInterval = rangeUtil.intervalToSeconds(jsonData?.interval ?? '');\n if (!maxInterval) {\n return;\n }\n const timeRangeInterval = newState.value.to.diff(newState.value.from, 'seconds');\n if (timeRangeInterval > maxInterval) {\n const prevInterval = prevState.value.to.diff(prevState.value.from, 'seconds');\n if (timeRangeInterval <= prevInterval) {\n timeRange.setState({\n value: prevState.value,\n from: prevState.from,\n to: prevState.to,\n });\n } else {\n const defaultRange = new SceneTimeRange(DEFAULT_TIME_RANGE);\n timeRange.setState({\n value: defaultRange.state.value,\n from: defaultRange.state.from,\n to: defaultRange.state.to,\n });\n }\n\n const appEvents = getAppEvents();\n appEvents.publish({\n type: AppEvents.alertWarning.name,\n payload: [`Time range interval exceeds maximum interval configured by the administrator.`],\n });\n\n reportAppInteraction('all', 'interval_too_long', {\n attempted_duration_seconds: timeRangeInterval,\n configured_max_interval: maxInterval,\n });\n }\n } catch (e) {\n console.error(e);\n }\n }\n };\n }\n\n private setVariableProviders() {\n const levelsVariable = getLevelsVariable(this);\n const fieldsCombinedVariable = getFieldsAndMetadataVariable(this);\n\n fieldsCombinedVariable._getOperators = () => operatorFunction(fieldsCombinedVariable);\n\n levelsVariable.setState({\n getTagValuesProvider: this.getLevelsTagValuesProvider(),\n getTagKeysProvider: this.getLevelsTagKeysProvider(),\n });\n\n fieldsCombinedVariable.setState({\n getTagKeysProvider: this.getCombinedFieldsTagKeysProvider(),\n getTagValuesProvider: this.getCombinedFieldsTagValuesProvider(),\n });\n }\n\n /**\n * Get tag keys (label names) for the combined fields variable\n */\n private getCombinedFieldsTagKeysProvider() {\n return (variable: AdHocFiltersVariable, currentKey: string | null) => {\n // Current key seems to always be null, I think it's only supported for other variable types that allow editing the key without first removing the value/operator?\n const metadataVar = getMetadataVariable(this);\n const fieldVar = getFieldsVariable(this);\n\n const uninterpolatedExpression = getFieldsTagValuesExpression(VAR_FIELDS_AND_METADATA);\n\n const metadataFilters = metadataVar.state.filters.filter((f) => f.key !== currentKey);\n const fieldFilters = fieldVar.state.filters.filter((f) => f.key !== currentKey);\n const otherFiltersString = this.renderVariableFilters(VAR_FIELDS, fieldFilters);\n const otherMetadataString = this.renderVariableFilters(VAR_METADATA, metadataFilters);\n const expr = uninterpolatedExpression\n .replace(PENDING_FIELDS_EXPR, otherFiltersString)\n .replace(PENDING_METADATA_EXPR, otherMetadataString);\n const interpolated = sceneGraph.interpolate(this, expr);\n\n return getFieldsKeysProvider({\n expr: interpolated,\n sceneRef: this,\n timeRange: sceneGraph.getTimeRange(this).state.value,\n variableType: VAR_FIELDS_AND_METADATA,\n });\n };\n }\n\n /**\n * Get tag values (label values) for combined fields variable\n */\n private getCombinedFieldsTagValuesProvider() {\n return (variable: AdHocFiltersVariable, filter: AdHocFilterWithLabels) => {\n const uninterpolatedExpression = getFieldsTagValuesExpression(VAR_FIELDS_AND_METADATA);\n const metadataVar = getMetadataVariable(this);\n const fieldVar = getFieldsVariable(this);\n\n const metadataFilters = metadataVar.state.filters.filter(\n (f) => f.key !== filter.key && isOperatorInclusive(f.operator)\n );\n const fieldFilters = fieldVar.state.filters.filter(\n (f) => f.key !== filter.key && isOperatorInclusive(f.operator)\n );\n\n const otherFiltersString = this.renderVariableFilters(VAR_FIELDS, fieldFilters);\n const otherMetadataString = this.renderVariableFilters(VAR_METADATA, metadataFilters);\n\n const expr = uninterpolatedExpression\n .replace(PENDING_FIELDS_EXPR, otherFiltersString)\n .replace(PENDING_METADATA_EXPR, otherMetadataString);\n const interpolated = sceneGraph.interpolate(this, expr);\n\n return getDetectedFieldValuesTagValuesProvider(\n filter,\n variable,\n interpolated,\n this,\n sceneGraph.getTimeRange(this).state.value,\n VAR_FIELDS_AND_METADATA\n );\n };\n }\n\n /**\n * Get tag keys (label names) for levels variable\n */\n private getLevelsTagKeysProvider() {\n return (variable: AdHocFiltersVariable, currentKey: string | null) => {\n // Current key seems to always be null, I think it's only supported for other variable types that allow editing the key without first removing the value/operator?\n const filters = variable.state.filters.filter((f) => f.key !== currentKey);\n const otherFiltersString = this.renderVariableFilters(VAR_LEVELS, filters);\n const uninterpolatedExpression = getFieldsTagValuesExpression(VAR_LEVELS);\n const expr = uninterpolatedExpression.replace(PENDING_FIELDS_EXPR, otherFiltersString);\n const interpolated = sceneGraph.interpolate(this, expr);\n return getFieldsKeysProvider({\n expr: interpolated,\n sceneRef: this,\n timeRange: sceneGraph.getTimeRange(this).state.value,\n variableType: VAR_LEVELS,\n });\n };\n }\n\n /**\n * Get tag values (label values) for levels variable\n */\n private getLevelsTagValuesProvider() {\n return (variable: AdHocFiltersVariable, filter: AdHocFilterWithLabels) => {\n // Don't add equals operations to the query, the user might want to select more than one value\n const filters = variable.state.filters.filter((f) => f.key !== filter.key && f.operator === FilterOp.Equal);\n const otherFiltersString = this.renderVariableFilters(VAR_LEVELS, filters);\n const uninterpolatedExpression = getFieldsTagValuesExpression(VAR_LEVELS);\n const expr = uninterpolatedExpression.replace(PENDING_FIELDS_EXPR, otherFiltersString);\n const interpolated = sceneGraph.interpolate(this, expr);\n\n return getDetectedFieldValuesTagValuesProvider(\n filter,\n variable,\n interpolated,\n this,\n sceneGraph.getTimeRange(this).state.value,\n VAR_LEVELS\n );\n };\n }\n\n private renderVariableFilters(\n variableType: typeof VAR_FIELDS | typeof VAR_METADATA | typeof VAR_LEVELS,\n filters: AdHocFilterWithLabels[]\n ) {\n if (variableType === VAR_FIELDS) {\n return renderLogQLFieldFilters(filters);\n } else if (variableType === VAR_METADATA) {\n return renderLogQLMetadataFilters(filters);\n } else if (variableType === VAR_LEVELS) {\n return renderLogQLMetadataFilters(filters);\n } else {\n const error = new Error('getFieldsTagValuesProvider only supports fields, metadata, and levels');\n logger.error(error);\n throw error;\n }\n }\n\n /**\n * @todo why do we need to manually sync fields and levels, but not other ad hoc variables?\n * @param variable\n * @param urlParamName\n * @private\n */\n private resetVariablesIfNotInUrl(variable: AdHocFiltersVariable, urlParamName: string) {\n const location = locationService.getLocation();\n const search = new URLSearchParams(location.search);\n const filtersFromUrl = search.get(urlParamName);\n\n // If the filters aren't in the URL, then they're coming from the cache, set the state to sync with url\n if (filtersFromUrl === null) {\n variable.setState({ filters: [] });\n }\n }\n\n private updatePatterns(newState: IndexSceneState, patternsVariable: CustomVariable) {\n const patternsLine = renderPatternFilters(newState.patterns ?? []);\n patternsVariable.changeValueTo(patternsLine);\n }\n\n getUrlState() {\n return {\n patterns: JSON.stringify(this.state.patterns),\n };\n }\n\n updateFromUrl(values: SceneObjectUrlValues) {\n const stateUpdate: Partial = {};\n\n if (values.patterns && typeof values.patterns === 'string') {\n stateUpdate.patterns = JSON.parse(values.patterns) as AppliedPattern[];\n }\n\n this.setState(stateUpdate);\n }\n}\n\nfunction getContentScene(drillDownLabel?: string) {\n const slug = getDrilldownSlug();\n if (slug === PageSlugs.explore) {\n return new ServiceSelectionScene({});\n }\n\n return new ServiceScene({\n drillDownLabel,\n });\n}\n\nfunction getVariableSet(initialDatasourceUid: string, initialFilters?: AdHocVariableFilter[]) {\n const labelVariable = new AdHocFiltersVariable({\n name: VAR_LABELS,\n datasource: EXPLORATION_DS,\n layout: 'combobox',\n label: 'Labels',\n allowCustomValue: true,\n filters: initialFilters ?? [],\n expressionBuilder: renderLogQLLabelFilters,\n hide: VariableHide.dontHide,\n key: 'adhoc_service_filter',\n onAddCustomValue: onAddCustomAdHocValue,\n });\n\n labelVariable._getOperators = function () {\n return operators;\n };\n\n const fieldsVariable = new AdHocFiltersVariable({\n name: VAR_FIELDS,\n label: 'Detected fields',\n applyMode: 'manual',\n layout: 'combobox',\n expressionBuilder: renderLogQLFieldFilters,\n hide: VariableHide.hideVariable,\n allowCustomValue: true,\n });\n\n fieldsVariable._getOperators = () => {\n return operators;\n };\n\n const metadataVariable = new AdHocFiltersVariable({\n name: VAR_METADATA,\n label: 'Metadata',\n applyMode: 'manual',\n layout: 'combobox',\n expressionBuilder: (filters: AdHocFilterWithLabels[]) => renderLogQLMetadataFilters(filters),\n hide: VariableHide.hideVariable,\n allowCustomValue: true,\n });\n\n metadataVariable._getOperators = () => {\n return operators;\n };\n\n /**\n * Not used in interpolation, used as \"proxy\" variable that routes filters added in the variable UI\n * to the fields and metadata variables which are interpolated but not present in the UI.\n *\n * Not saved in the URL state, as on init we pull the values from the fields/metadata variables\n */\n const fieldsAndMetadataVariable = new AdHocFiltersVariable({\n name: VAR_FIELDS_AND_METADATA,\n label: 'Fields',\n applyMode: 'manual',\n layout: 'combobox',\n hide: VariableHide.hideVariable,\n allowCustomValue: true,\n onAddCustomValue: onAddCustomFieldValue,\n skipUrlSync: true,\n });\n\n const levelsVariable = new AdHocFiltersVariable({\n name: VAR_LEVELS,\n label: 'Error levels',\n applyMode: 'manual',\n layout: 'vertical',\n expressionBuilder: renderLevelsFilter,\n hide: VariableHide.hideVariable,\n supportsMultiValueOperators: true,\n });\n\n const lineFiltersVariable = new AdHocFiltersVariable({\n name: VAR_LINE_FILTERS,\n hide: VariableHide.hideVariable,\n getTagKeysProvider: () => Promise.resolve({ replace: true, values: [] }),\n getTagValuesProvider: () => Promise.resolve({ replace: true, values: [] }),\n expressionBuilder: renderLogQLLineFilter,\n layout: 'horizontal',\n });\n\n lineFiltersVariable._getOperators = () => {\n return lineFilterOperators;\n };\n\n const dsVariable = new DataSourceVariable({\n name: VAR_DATASOURCE,\n label: 'Data source',\n value: initialDatasourceUid,\n pluginId: 'loki',\n });\n\n const unsub = dsVariable.subscribeToState((newState) => {\n const dsValue = `${newState.value}`;\n newState.value && addLastUsedDataSourceToStorage(dsValue);\n });\n\n return {\n variablesScene: new SceneVariableSet({\n variables: [\n dsVariable,\n labelVariable,\n fieldsVariable,\n levelsVariable,\n metadataVariable,\n fieldsAndMetadataVariable,\n new CustomVariable({\n name: VAR_PATTERNS,\n value: '',\n hide: VariableHide.hideVariable,\n }),\n new AdHocFiltersVariable({\n name: VAR_LINE_FILTER,\n hide: VariableHide.hideVariable,\n expressionBuilder: renderLogQLLineFilter,\n }),\n lineFiltersVariable,\n\n // This variable is a hack to get logs context working, this variable should never be used or updated\n new CustomConstantVariable({\n name: VAR_LOGS_FORMAT,\n value: MIXED_FORMAT_EXPR,\n skipUrlSync: true,\n hide: VariableHide.hideVariable,\n options: [{ value: MIXED_FORMAT_EXPR, label: MIXED_FORMAT_EXPR }],\n }),\n ],\n }),\n unsub,\n };\n}\n","import {\n ControlsLabel,\n SceneComponentProps,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n SceneVariableValueChangedEvent,\n} from '@grafana/scenes';\nimport React from 'react';\nimport { getLevelsVariable } from '../../services/variableGetters';\nimport { MetricFindValue, SelectableValue } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { Icon, MultiSelect, useStyles2 } from '@grafana/ui';\nimport { LEVEL_VARIABLE_VALUE } from '../../services/variables';\nimport { FilterOp } from '../../services/filterTypes';\nimport { testIds } from '../../services/testIds';\nimport { addCurrentUrlToHistory } from '../../services/navigate';\n\ntype ChipOption = MetricFindValue & { selected?: boolean };\nexport interface LevelsVariableSceneState extends SceneObjectState {\n options?: ChipOption[];\n isLoading: boolean;\n visible: boolean;\n isOpen: boolean;\n}\nexport const LEVELS_VARIABLE_SCENE_KEY = 'levels-var-custom-renderer';\nexport class LevelsVariableScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({ ...state, isLoading: false, visible: false, key: LEVELS_VARIABLE_SCENE_KEY, isOpen: false });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onActivate() {\n this.onFilterChange();\n\n this._subs.add(\n getLevelsVariable(this).subscribeToEvent(SceneVariableValueChangedEvent, () => {\n this.onFilterChange();\n })\n );\n }\n\n public onFilterChange() {\n const levelsVar = getLevelsVariable(this);\n this.setState({\n options: levelsVar.state.filters.map((filter) => ({\n text: filter.valueLabels?.[0] ?? filter.value,\n selected: true,\n value: filter.value,\n })),\n });\n }\n\n getTagValues = () => {\n this.setState({ isLoading: true });\n const levelsVar = getLevelsVariable(this);\n const levelsKeys = levelsVar?.state?.getTagValuesProvider?.(\n levelsVar,\n levelsVar.state.filters[0] ?? { key: LEVEL_VARIABLE_VALUE }\n );\n levelsKeys?.then((response) => {\n if (Array.isArray(response.values)) {\n this.setState({\n isLoading: false,\n options: response.values.map((value) => {\n return {\n text: value.text,\n value: value.value ?? value.text,\n selected: levelsVar.state.filters.some((filter) => filter.value === value.text),\n };\n }),\n });\n }\n });\n };\n\n updateFilters = (skipPublish: boolean, forcePublish?: boolean) => {\n const levelsVar = getLevelsVariable(this);\n const filterOptions = this.state.options?.filter((opt) => opt.selected);\n\n levelsVar.updateFilters(\n filterOptions?.map((filterOpt) => ({\n key: LEVEL_VARIABLE_VALUE,\n operator: FilterOp.Equal,\n value: filterOpt.text,\n })) ?? [],\n { skipPublish, forcePublish }\n );\n };\n\n onChangeOptions = (options: SelectableValue[]) => {\n // Save current url to history before the filter change\n addCurrentUrlToHistory();\n\n this.setState({\n options: this.state.options?.map((value) => {\n if (options.some((opt) => opt.value === value.value)) {\n return { ...value, selected: true };\n }\n return { ...value, selected: false };\n }),\n });\n\n if (!this.state.isOpen) {\n this.updateFilters(false);\n } else {\n this.updateFilters(true);\n }\n };\n\n openSelect = (isOpen: boolean) => {\n this.setState({ isOpen });\n };\n\n onCloseMenu = () => {\n this.openSelect(false);\n // Update filters and run queries on close\n this.updateFilters(false, true);\n };\n\n static Component = ({ model }: SceneComponentProps) => {\n const { options, isLoading, visible, isOpen } = model.useState();\n const styles = useStyles2(getStyles);\n const levelsVar = getLevelsVariable(model);\n levelsVar.useState();\n\n if (!visible) {\n return null;\n }\n\n return (\n
\n \n }\n placeholder={'All levels'}\n className={styles.control}\n onChange={model.onChangeOptions}\n onCloseMenu={() => model.onCloseMenu()}\n onOpenMenu={model.getTagValues}\n onFocus={() => model.openSelect(true)}\n menuShouldPortal={true}\n isOpen={isOpen}\n isLoading={isLoading}\n isClearable={true}\n blurInputOnSelect={false}\n closeMenuOnSelect={false}\n openMenuOnFocus={true}\n showAllSelectedWhenOpen={true}\n hideSelectedOptions={false}\n value={options?.filter((v) => v.selected)}\n options={options?.map((val) => ({\n value: val.value,\n label: val.text,\n }))}\n />\n
\n );\n };\n}\nexport function syncLevelsVariable(sceneRef: SceneObject) {\n const levelsVariableScene = sceneGraph.findObject(sceneRef, (obj) => obj instanceof LevelsVariableScene);\n if (levelsVariableScene instanceof LevelsVariableScene) {\n levelsVariableScene.onFilterChange();\n }\n}\n\nconst getStyles = () => ({\n control: css({\n flex: '1',\n }),\n wrapper: css({\n flex: '0 0 auto',\n whiteSpace: 'nowrap',\n }),\n});\n","import { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { LineFilterEditor } from '../ServiceScene/LineFilter/LineFilterEditor';\nimport React, { ChangeEvent, KeyboardEvent, useState } from 'react';\nimport { IconButton, useStyles2 } from '@grafana/ui';\nimport { LineFilterCaseSensitive } from '../../services/filterTypes';\nimport { RegexInputValue } from '../ServiceScene/LineFilter/RegexIconButton';\n\nexport interface LineFilterProps {\n exclusive: boolean;\n lineFilter: string;\n caseSensitive: boolean;\n regex: boolean;\n setExclusive: (exclusive: boolean) => void;\n onInputChange: (e: ChangeEvent) => void;\n onCaseSensitiveToggle: (caseSensitive: LineFilterCaseSensitive) => void;\n onRegexToggle: (regex: RegexInputValue) => void;\n updateFilter: (lineFilter: string, debounced: boolean) => void;\n handleEnter: (e: KeyboardEvent, lineFilter: string) => void;\n onSubmitLineFilter?: () => void;\n onClearLineFilter?: () => void;\n}\n\nexport function LineFilterVariable({ onClick, props }: { onClick: () => void; props: LineFilterProps }) {\n const [focus, setFocus] = useState(false);\n const styles = useStyles2(getLineFilterStyles);\n return (\n <>\n \n
\n Line filter\n \n
\n \n \n {focus && (\n setFocus(false)}\n name={'table-collapse-all'}\n />\n )}\n \n
\n \n );\n}\n\nconst getLineFilterStyles = (theme: GrafanaTheme2) => ({\n titleWrap: css({\n display: 'flex',\n fontSize: theme.typography.bodySmall.fontSize,\n marginBottom: theme.spacing(0.5),\n gap: theme.spacing(1),\n }),\n collapseWrap: css({\n display: 'flex',\n }),\n collapseBtn: css({\n marginLeft: theme.spacing(1),\n }),\n});\n","import { AdHocFilterWithLabels, SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport React, { ChangeEvent, KeyboardEvent } from 'react';\nimport { getLineFiltersVariable } from '../../services/variableGetters';\nimport { LineFilterCaseSensitive, LineFilterOp } from '../../services/filterTypes';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../services/analytics';\nimport { debounce } from 'lodash';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { useStyles2 } from '@grafana/ui';\nimport { LineFilterProps, LineFilterVariable } from './LineFilterVariable';\nimport { addCurrentUrlToHistory } from '../../services/navigate';\n\ninterface LineFilterRendererState extends SceneObjectState {}\n\n/**\n * The scene for the submitted line filter that is rendered up top with the other variables.\n * @todo refactor into new directory with other custom variable renderers and/or layout scenes\n */\nexport class LineFilterVariablesScene extends SceneObjectBase {\n static Component = ({ model }: SceneComponentProps) => {\n const lineFilterVar = getLineFiltersVariable(model);\n const { filters } = lineFilterVar.useState();\n const styles = useStyles2(getStyles);\n sortLineFilters(filters);\n\n if (!filters.length) {\n return null;\n }\n\n return (\n
\n {filters.map((filter) => {\n const props: LineFilterProps = {\n lineFilter: filter.value,\n regex: filter.operator === LineFilterOp.regex || filter.operator === LineFilterOp.negativeRegex,\n caseSensitive: filter.key === LineFilterCaseSensitive.caseSensitive,\n exclusive: model.isFilterExclusive(filter),\n handleEnter: (e, lineFilter) => model.handleEnter(e, filter.value, filter),\n setExclusive: () => model.onToggleExclusive(filter),\n updateFilter: (lineFilter, debounced) =>\n model.updateFilter(\n filter,\n {\n ...filter,\n value: lineFilter,\n },\n debounced\n ),\n onRegexToggle: () => model.onRegexToggle(filter),\n onInputChange: (e) => model.onInputChange(e, filter),\n onCaseSensitiveToggle: () => model.onCaseSensitiveToggle(filter),\n };\n return model.removeFilter(filter)} props={props} />;\n })}\n
\n );\n };\n /**\n * Submit on enter\n */\n handleEnter = (e: KeyboardEvent, lineFilter: string, filter: AdHocFilterWithLabels) => {\n if (e.key === 'Enter') {\n // Add the current url to browser history before the state is changed so the user can revert their change.\n addCurrentUrlToHistory();\n this.updateVariableLineFilter(filter, { ...filter, value: lineFilter });\n }\n };\n\n isFilterExclusive({ operator }: AdHocFilterWithLabels): boolean {\n return operator === LineFilterOp.negativeMatch || operator === LineFilterOp.negativeRegex;\n }\n\n /**\n * Updates filter operator when user toggles regex\n */\n onRegexToggle = (filter: AdHocFilterWithLabels) => {\n let newOperator: LineFilterOp;\n // Set value to scene state\n switch (filter.operator) {\n case LineFilterOp.match: {\n newOperator = LineFilterOp.regex;\n break;\n }\n case LineFilterOp.negativeMatch: {\n newOperator = LineFilterOp.negativeRegex;\n break;\n }\n case LineFilterOp.regex: {\n newOperator = LineFilterOp.match;\n break;\n }\n case LineFilterOp.negativeRegex: {\n newOperator = LineFilterOp.negativeMatch;\n break;\n }\n default: {\n throw new Error('Invalid operator!');\n }\n }\n\n this.updateFilter(filter, { ...filter, operator: newOperator }, false);\n };\n\n /**\n * Updates filter operator when user toggles exclusion\n */\n onToggleExclusive = (filter: AdHocFilterWithLabels) => {\n let newOperator: string;\n switch (filter.operator) {\n case LineFilterOp.match: {\n newOperator = LineFilterOp.negativeMatch;\n break;\n }\n case LineFilterOp.negativeMatch: {\n newOperator = LineFilterOp.match;\n break;\n }\n case LineFilterOp.regex: {\n newOperator = LineFilterOp.negativeRegex;\n break;\n }\n case LineFilterOp.negativeRegex: {\n newOperator = LineFilterOp.regex;\n break;\n }\n default: {\n throw new Error('Invalid operator!');\n }\n }\n\n this.updateFilter(filter, { ...filter, operator: newOperator }, false);\n };\n\n /**\n * Updates filter key when user toggles case sensitivity\n */\n onCaseSensitiveToggle = (filter: AdHocFilterWithLabels) => {\n const caseSensitive =\n filter.key === LineFilterCaseSensitive.caseSensitive\n ? LineFilterCaseSensitive.caseInsensitive\n : LineFilterCaseSensitive.caseSensitive;\n this.updateFilter(filter, { ...filter, key: caseSensitive }, false);\n };\n\n /**\n * Updates existing line filter ad-hoc variable filter\n */\n updateFilter(existingFilter: AdHocFilterWithLabels, filterUpdate: AdHocFilterWithLabels, debounced = true) {\n if (debounced) {\n // We want to update the UI right away, which uses the filter state as the UI state, but we don't want to execute the query immediately\n this.updateVariableLineFilter(existingFilter, filterUpdate, true);\n // Run the debounce to force the event emit, as the prior setState will have already set the filterExpression, which will otherwise prevent the emit of the event which will trigger the query\n this.updateVariableDebounced(existingFilter, filterUpdate, false, true);\n } else {\n this.updateVariableLineFilter(existingFilter, filterUpdate);\n }\n }\n\n /**\n * Line filter input onChange helper method\n */\n onInputChange = (e: ChangeEvent, filter: AdHocFilterWithLabels) => {\n this.updateFilter(filter, { ...filter, value: e.target.value }, true);\n };\n\n /**\n * Remove a filter, will trigger query\n */\n removeFilter = (filter: AdHocFilterWithLabels) => {\n addCurrentUrlToHistory();\n const variable = getLineFiltersVariable(this);\n const otherFilters = variable.state.filters.filter(\n (f) => f.keyLabel !== undefined && f.keyLabel !== filter.keyLabel\n );\n\n variable.setState({\n filters: otherFilters,\n });\n };\n\n /**\n * Update existing line filter ad-hoc variable\n */\n private updateVariableLineFilter = (\n existingFilter: AdHocFilterWithLabels,\n filterUpdate: AdHocFilterWithLabels,\n skipPublish = false,\n forcePublish = false\n ) => {\n const variable = getLineFiltersVariable(this);\n const otherFilters = variable.state.filters.filter(\n (f) => f.keyLabel !== undefined && f.keyLabel !== existingFilter.keyLabel\n );\n\n variable.updateFilters(\n [\n {\n keyLabel: existingFilter.keyLabel,\n key: filterUpdate.key,\n operator: filterUpdate.operator,\n value: filterUpdate.value,\n },\n ...otherFilters,\n ],\n { skipPublish, forcePublish }\n );\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.search_string_in_variables_changed,\n {\n searchQueryLength: existingFilter.value.length,\n containsLevel: existingFilter.value.toLowerCase().includes('level'),\n operator: filterUpdate.operator,\n caseSensitive: filterUpdate.key,\n }\n );\n };\n\n /**\n * Debounce line-filter ad-hoc variable update\n */\n private updateVariableDebounced = debounce(\n (\n existingFilter: AdHocFilterWithLabels,\n filterUpdate: AdHocFilterWithLabels,\n skipPublish = false,\n forcePublish = false\n ) => {\n this.updateVariableLineFilter(existingFilter, filterUpdate, skipPublish, forcePublish);\n },\n 1000\n );\n}\n\n/**\n * Sort line filters by keyLabel, i.e. the order the line filter was added\n */\nexport function sortLineFilters(filters: AdHocFilterWithLabels[]) {\n filters.sort((a, b) => parseInt(a.keyLabel ?? '0', 10) - parseInt(b.keyLabel ?? '0', 10));\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n lineFiltersWrap: css({\n label: 'lineFiltersWrap',\n display: 'flex',\n flexWrap: 'wrap',\n gap: `${theme.spacing(0.25)} ${theme.spacing(2)}`,\n }),\n };\n}\n","import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { LinkButton, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { getDrillDownIndexLink } from '../../services/navigate';\nimport { getLabelsVariable } from '../../services/variableGetters';\nimport { testIds } from '../../services/testIds';\n\nimport { isOperatorInclusive } from '../../services/operatorHelpers';\n\nexport interface ShowLogsButtonSceneState extends SceneObjectState {\n disabled?: boolean;\n hidden?: boolean;\n}\nexport class ShowLogsButtonScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onActivate() {\n const labelsVar = getLabelsVariable(this);\n const hasPositiveFilter = labelsVar.state.filters.some((f) => isOperatorInclusive(f.operator));\n this.setState({\n disabled: !hasPositiveFilter,\n });\n\n labelsVar.subscribeToState((newState) => {\n const hasPositiveFilter = newState.filters.some((f) => isOperatorInclusive(f.operator));\n this.setState({\n disabled: !hasPositiveFilter,\n });\n });\n }\n\n getLink = () => {\n const labelsVar = getLabelsVariable(this);\n const positiveFilter = labelsVar.state.filters.find((f) => isOperatorInclusive(f.operator));\n\n if (positiveFilter) {\n return getDrillDownIndexLink(positiveFilter.key, positiveFilter.value);\n }\n\n return '';\n };\n\n static Component = ({ model }: SceneComponentProps) => {\n const { disabled, hidden } = model.useState();\n const styles = useStyles2(getStyles);\n\n if (hidden === true) {\n return null;\n }\n\n const link = model.getLink();\n\n return (\n \n Show logs\n \n );\n };\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n button: css({\n [theme.breakpoints.down('lg')]: {\n alignSelf: 'flex-end',\n },\n [theme.breakpoints.down('md')]: {\n marginTop: theme.spacing(1),\n alignSelf: 'flex-start',\n },\n\n alignSelf: 'flex-start',\n marginTop: '22px',\n }),\n };\n}\n","import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { Dropdown, Switch, ToolbarButton, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { config } from '@grafana/runtime';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../services/analytics';\nimport { AGGREGATED_METRIC_START_DATE } from '../ServiceSelectionScene/ServiceSelectionScene';\nimport pluginJson from '../../plugin.json';\nimport { testIds } from '../../services/testIds';\nconst AGGREGATED_METRICS_USER_OVERRIDE_LOCALSTORAGE_KEY = `${pluginJson.id}.serviceSelection.aggregatedMetrics`;\n\nexport interface ToolbarSceneState extends SceneObjectState {\n isOpen: boolean;\n options: {\n aggregatedMetrics: {\n active: boolean;\n userOverride: boolean;\n disabled: boolean;\n };\n };\n}\nexport class ToolbarScene extends SceneObjectBase {\n constructor(state: Partial) {\n const userOverride = localStorage.getItem(AGGREGATED_METRICS_USER_OVERRIDE_LOCALSTORAGE_KEY);\n const active = config.featureToggles.exploreLogsAggregatedMetrics && userOverride !== 'false';\n\n super({\n isOpen: false,\n options: {\n aggregatedMetrics: {\n active: active ?? false,\n userOverride: userOverride === 'true' ?? false,\n disabled: false,\n },\n },\n ...state,\n });\n }\n\n public toggleAggregatedMetricsOverride = () => {\n const active = !this.state.options.aggregatedMetrics.active;\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_selection,\n USER_EVENTS_ACTIONS.service_selection.aggregated_metrics_toggled,\n {\n enabled: active,\n }\n );\n\n localStorage.setItem(AGGREGATED_METRICS_USER_OVERRIDE_LOCALSTORAGE_KEY, active.toString());\n\n this.setState({\n options: {\n aggregatedMetrics: {\n active,\n disabled: this.state.options.aggregatedMetrics.disabled,\n userOverride: active,\n },\n },\n });\n };\n\n public onToggleOpen = (isOpen: boolean) => {\n this.setState({ isOpen });\n };\n\n static Component = ({ model }: SceneComponentProps) => {\n const { isOpen, options } = model.useState();\n const styles = useStyles2(getStyles);\n\n const renderPopover = () => {\n return (\n
evt.stopPropagation()}>\n
Query options
\n
\n \n Aggregated metrics\n
\n \n \n \n
\n \n );\n };\n\n if (options.aggregatedMetrics) {\n return (\n \n \n \n );\n }\n\n return <>;\n };\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n popover: css({\n display: 'flex',\n padding: theme.spacing(2),\n flexDirection: 'column',\n background: theme.colors.background.primary,\n boxShadow: theme.shadows.z3,\n borderRadius: theme.shape.radius.default,\n border: `1px solid ${theme.colors.border.weak}`,\n zIndex: 1,\n marginRight: theme.spacing(2),\n }),\n heading: css({\n fontWeight: theme.typography.fontWeightMedium,\n paddingBottom: theme.spacing(2),\n }),\n options: css({\n display: 'grid',\n gridTemplateColumns: '1fr 50px',\n rowGap: theme.spacing(1),\n columnGap: theme.spacing(2),\n alignItems: 'center',\n }),\n };\n}\n","import {\n EmbeddedScene,\n SceneAppPage,\n SceneAppPageLike,\n SceneFlexLayout,\n SceneRouteMatch,\n SceneTimeRange,\n} from '@grafana/scenes';\nimport {\n CHILD_ROUTE_DEFINITIONS,\n ChildDrilldownSlugs,\n DRILLDOWN_URL_KEYS,\n extractValuesFromRoute,\n PageSlugs,\n ParentDrilldownSlugs,\n ROUTE_DEFINITIONS,\n ROUTES,\n SERVICE_URL_KEYS,\n SUB_ROUTES,\n ValueSlugs,\n} from '../services/routing';\nimport { PageLayoutType, urlUtil } from '@grafana/data';\nimport { IndexScene } from './IndexScene/IndexScene';\nimport { navigateToIndex } from '../services/navigate';\nimport { logger } from '../services/logger';\nimport { capitalizeFirstLetter } from '../services/text';\nimport { PLUGIN_BASE_URL, prefixRoute } from '../services/plugin';\n\nexport type RouteProps = { labelName: string; labelValue: string; breakdownLabel?: string };\nexport type RouteMatch = SceneRouteMatch;\ntype Optional = Pick, K> & Omit;\nexport type OptionalRouteProps = Optional;\nexport type OptionalRouteMatch = SceneRouteMatch;\n\nexport const DEFAULT_TIME_RANGE = { from: 'now-15m', to: 'now' };\nfunction getServicesScene(routeMatch: OptionalRouteMatch) {\n return new EmbeddedScene({\n body: new IndexScene({\n $timeRange: new SceneTimeRange(DEFAULT_TIME_RANGE),\n routeMatch,\n }),\n });\n}\n\n// Index page\nexport function makeIndexPage() {\n return new SceneAppPage({\n // Top level breadcrumb\n title: 'Grafana Logs Drilldown',\n url: prefixRoute(PageSlugs.explore),\n layout: PageLayoutType.Custom,\n preserveUrlKeys: SERVICE_URL_KEYS,\n routePath: `${PageSlugs.explore}/*`,\n getScene: (routeMatch) => getServicesScene(routeMatch),\n drilldowns: [\n {\n routePath: ROUTE_DEFINITIONS.logs,\n getPage: (routeMatch, parent) => makeBreakdownPage(routeMatch, parent, PageSlugs.logs),\n defaultRoute: true,\n },\n {\n routePath: ROUTE_DEFINITIONS.labels,\n getPage: (routeMatch, parent) => makeBreakdownPage(routeMatch, parent, PageSlugs.labels),\n },\n {\n routePath: ROUTE_DEFINITIONS.patterns,\n getPage: (routeMatch, parent) => makeBreakdownPage(routeMatch, parent, PageSlugs.patterns),\n },\n {\n routePath: ROUTE_DEFINITIONS.fields,\n getPage: (routeMatch, parent) => makeBreakdownPage(routeMatch, parent, PageSlugs.fields),\n },\n {\n routePath: CHILD_ROUTE_DEFINITIONS.label,\n getPage: (routeMatch, parent) => makeBreakdownValuePage(routeMatch, parent, ValueSlugs.label),\n },\n {\n routePath: CHILD_ROUTE_DEFINITIONS.field,\n getPage: (routeMatch: RouteMatch, parent) => makeBreakdownValuePage(routeMatch, parent, ValueSlugs.field),\n },\n {\n routePath: '*',\n getPage: () => makeRedirectPage(),\n },\n ],\n });\n}\n\n// Redirect page back to index\nexport function makeRedirectPage() {\n return new SceneAppPage({\n title: '',\n url: urlUtil.renderUrl(PLUGIN_BASE_URL, undefined),\n getScene: makeEmptyScene(),\n hideFromBreadcrumbs: true,\n routePath: '*',\n $behaviors: [\n () => {\n navigateToIndex();\n },\n ],\n });\n}\n\nfunction makeEmptyScene(): (routeMatch: SceneRouteMatch) => EmbeddedScene {\n return () =>\n new EmbeddedScene({\n body: new SceneFlexLayout({\n direction: 'column',\n children: [],\n }),\n });\n}\n\nexport function makeBreakdownPage(\n routeMatch: RouteMatch,\n parent: SceneAppPageLike,\n slug: ParentDrilldownSlugs\n): SceneAppPage {\n const { labelName, labelValue } = extractValuesFromRoute(routeMatch);\n return new SceneAppPage({\n title: capitalizeFirstLetter(slug),\n layout: PageLayoutType.Custom,\n url: ROUTES[slug](labelValue, labelName),\n routePath: ROUTE_DEFINITIONS[slug],\n preserveUrlKeys: DRILLDOWN_URL_KEYS,\n getParentPage: () => parent,\n getScene: (routeMatch) => getServicesScene(routeMatch),\n });\n}\n\nexport function makeBreakdownValuePage(\n routeMatch: RouteMatch,\n parent: SceneAppPageLike,\n slug: ChildDrilldownSlugs\n): SceneAppPage {\n const { labelName, labelValue, breakdownLabel } = extractValuesFromRoute(routeMatch);\n\n if (!breakdownLabel) {\n const e = new Error('Breakdown value missing!');\n logger.error(e, {\n msg: 'makeBreakdownValuePage: Breakdown value missing!',\n labelName,\n labelValue,\n breakdownLabel: breakdownLabel ?? '',\n });\n throw e;\n }\n\n return new SceneAppPage({\n title: capitalizeFirstLetter(breakdownLabel),\n layout: PageLayoutType.Custom,\n url: SUB_ROUTES[slug](labelValue, labelName, breakdownLabel),\n routePath: CHILD_ROUTE_DEFINITIONS[slug],\n preserveUrlKeys: DRILLDOWN_URL_KEYS,\n getParentPage: () => parent,\n getScene: (routeMatch) => getServicesScene(routeMatch),\n });\n}\n","import React from 'react';\n\nimport { toURLRange, urlUtil } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { sceneGraph } from '@grafana/scenes';\nimport { ToolbarButton } from '@grafana/ui';\n\nimport { getDataSource, getQueryExpr } from 'services/scenes';\nimport { testIds } from 'services/testIds';\nimport { IndexScene } from 'Components/IndexScene/IndexScene';\nimport { USER_EVENTS_ACTIONS, USER_EVENTS_PAGES, reportAppInteraction } from 'services/analytics';\nimport { getDisplayedFields, getLogsVisualizationType } from 'services/store';\nimport { unknownToStrings } from '../../services/narrowing';\nimport { DATAPLANE_LABELS_NAME } from '../../services/logsFrame';\ninterface GoToExploreButtonState {\n exploration: IndexScene;\n}\n\nexport const GoToExploreButton = ({ exploration }: GoToExploreButtonState) => {\n const onClick = () => {\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.open_in_explore_clicked\n );\n onExploreLinkClick(exploration, undefined, true);\n };\n\n return (\n \n Open in Explore\n \n );\n};\n\nexport const onExploreLinkClick = (indexScene: IndexScene, expr?: string, open = false) => {\n if (!expr) {\n expr = getQueryExpr(indexScene);\n }\n\n expr = expr.replace(/\\s+/g, ' ').trimEnd();\n\n const datasource = getDataSource(indexScene);\n const timeRange = sceneGraph.getTimeRange(indexScene).state.value;\n const displayedFields = getDisplayedFields(indexScene);\n const visualisationType = getLogsVisualizationType();\n const columns = getUrlColumns();\n const exploreState = JSON.stringify({\n ['loki-explore']: {\n range: toURLRange(timeRange.raw),\n queries: [{ refId: 'logs', expr, datasource }],\n panelsState: {\n logs: {\n displayedFields,\n visualisationType,\n columns,\n labelFieldName: visualisationType === 'table' ? DATAPLANE_LABELS_NAME : undefined,\n },\n },\n datasource,\n },\n });\n const subUrl = config.appSubUrl ?? '';\n const link = urlUtil.renderUrl(`${subUrl}/explore`, { panes: exploreState, schemaVersion: 1 });\n if (open) {\n window.open(link, '_blank');\n }\n\n return link;\n};\n\nfunction getUrlColumns() {\n const params = new URLSearchParams(window.location.search);\n const urlColumns = params.get('urlColumns');\n if (urlColumns) {\n try {\n const columns = unknownToStrings(JSON.parse(urlColumns));\n let columnsParam: Record = {};\n for (const key in columns) {\n columnsParam[key] = columns[key];\n }\n return columnsParam;\n } catch (e) {\n console.error(e);\n }\n }\n return undefined;\n}\n","import { DataFrame, FieldConfig, FieldConfigSource, TimeRange } from '@grafana/data';\nimport { usePluginLinks } from '@grafana/runtime';\nimport {\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneQueryRunner,\n VizPanel,\n} from '@grafana/scenes';\nimport { DataSourceRef } from '@grafana/schema';\nimport { IconButton } from '@grafana/ui';\nimport React from 'react';\nimport { ExtensionPoints } from 'services/extensions/links';\nimport { findObjectOfType, getLokiDatasource } from 'services/scenes';\n\nimport LokiLogo from '../../../img/logo.svg';\nimport { LokiDatasource, LokiQuery } from '../../../services/lokiQuery';\n\nexport interface AddToInvestigationButtonState extends SceneObjectState {\n frame?: DataFrame;\n labelName?: string;\n fieldName?: string;\n ds?: LokiDatasource;\n context?: ExtensionContext;\n queries: LokiQuery[];\n type?: 'timeseries' | 'logs' | undefined;\n}\n\ntype ExtensionContext = {\n timeRange: TimeRange;\n queries: LokiQuery[];\n datasource: DataSourceRef;\n origin: string;\n url: string;\n type: string;\n title: string;\n id: string;\n logoPath: string;\n note?: string;\n drillDownLabel?: string;\n fieldConfig?: FieldConfigSource;\n};\n\nexport class AddToInvestigationButton extends SceneObjectBase {\n constructor(state: Omit) {\n super({ ...state, queries: [] });\n this.addActivationHandler(this.onActivate);\n }\n\n private onActivate = () => {\n getLokiDatasource(this).then((ds) => {\n this.setState({ ds });\n });\n\n this._subs.add(\n this.subscribeToState((newState, prevState) => {\n if (!this.state.queries.length) {\n this.getQueries();\n }\n\n if (!this.state.context && this.state.queries.length) {\n this.getContext();\n }\n })\n );\n };\n\n private getQueries = () => {\n const data = sceneGraph.getData(this);\n const queryRunner = findObjectOfType(data, (o) => o instanceof SceneQueryRunner, SceneQueryRunner);\n\n if (queryRunner) {\n const filter = this.state.frame ? getFilter(this.state.frame) : null;\n const queries = queryRunner.state.queries.map((q) => ({\n ...q,\n expr: sceneGraph.interpolate(queryRunner, q.expr),\n legendFormat: filter?.name ? `{{ ${filter.name} }}` : sceneGraph.interpolate(queryRunner, q.legendFormat),\n datasource: q.datasource ?? undefined,\n }));\n\n if (JSON.stringify(queries) !== JSON.stringify(this.state.queries)) {\n this.setState({ queries });\n }\n }\n };\n\n private getFieldConfig = () => {\n const panel = findObjectOfType(this, (o) => o instanceof VizPanel, VizPanel);\n const data = sceneGraph.getData(this);\n const frames = data?.state.data?.series;\n let fieldConfig = panel?.state.fieldConfig;\n if (fieldConfig && frames?.length) {\n for (const frame of frames) {\n for (const field of frame.fields) {\n const configKeys = Object.keys(field.config);\n const properties = configKeys.map((key) => ({\n id: key,\n value: field.config[key as keyof FieldConfig],\n }));\n\n // check if the override already exists\n const existingOverride = fieldConfig.overrides.find(\n (o) =>\n o.matcher.options === (field.config.displayNameFromDS ?? field.config.displayName ?? field.name) &&\n o.matcher.id === 'byName'\n );\n if (!existingOverride) {\n // add as first override\n fieldConfig.overrides.unshift({\n matcher: {\n id: 'byName',\n options: field.config.displayNameFromDS ?? field.config.displayName ?? field.name,\n },\n properties,\n });\n }\n\n if (existingOverride && JSON.stringify(existingOverride.properties) !== JSON.stringify(properties)) {\n existingOverride.properties = properties;\n }\n }\n }\n }\n return fieldConfig;\n };\n\n private getContext = () => {\n const fieldConfig = this.getFieldConfig();\n const { queries, ds, labelName, fieldName, type } = this.state;\n const timeRange = sceneGraph.getTimeRange(this);\n\n if (!timeRange || !queries || !ds?.uid) {\n return;\n }\n const ctx = {\n origin: 'Grafana Logs Drilldown',\n type: type ?? 'timeseries',\n queries,\n timeRange: { ...timeRange.state.value },\n datasource: { uid: ds.uid },\n url: window.location.href,\n id: `${JSON.stringify(queries)}${labelName}${fieldName}`,\n title: `${labelName}${fieldName ? ` > ${fieldName}` : ''}`,\n logoPath: LokiLogo,\n drillDownLabel: fieldName,\n fieldConfig: fieldConfig,\n };\n if (JSON.stringify(ctx) !== JSON.stringify(this.state.context)) {\n this.setState({ context: ctx });\n }\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { context } = model.useState();\n const { links } = usePluginLinks({ extensionPointId: ExtensionPoints.MetricInvestigation, context });\n\n return (\n <>\n {links\n .filter((link) => link.pluginId === 'grafana-investigations-app' && link.onClick)\n .map((link) => (\n {\n if (link.onClick) {\n link.onClick(e);\n }\n }}\n />\n ))}\n \n );\n };\n}\n\nconst getFilter = (frame: DataFrame) => {\n const filterNameAndValueObj = frame.fields[1]?.labels ?? {};\n if (Object.keys(filterNameAndValueObj).length !== 1) {\n return;\n }\n const name = Object.keys(filterNameAndValueObj)[0];\n return { name, value: filterNameAndValueObj[name] };\n};\n","import { DataFrame, GrafanaTheme2, PanelMenuItem, PluginExtensionLink } from '@grafana/data';\nimport {\n PanelBuilders,\n SceneComponentProps,\n SceneCSSGridItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n SceneQueryRunner,\n VizPanel,\n VizPanelMenu,\n} from '@grafana/scenes';\nimport React from 'react';\nimport { onExploreLinkClick } from '../ServiceScene/GoToExploreButton';\nimport { IndexScene } from '../IndexScene/IndexScene';\nimport { findObjectOfType, getQueryRunnerFromChildren } from '../../services/scenes';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../services/analytics';\nimport { logger } from '../../services/logger';\nimport { AddToInvestigationButton } from '../ServiceScene/Breakdowns/AddToInvestigationButton';\n// Certain imports are not available in the dependant package, but can be if the plugin is running in a different Grafana version.\n// We need both imports to support Grafana v11 and v12.\n// @ts-expect-error\nimport { getObservablePluginLinks, getPluginLinkExtensions } from '@grafana/runtime';\nimport { ExtensionPoints } from '../../services/extensions/links';\nimport { setLevelColorOverrides } from '../../services/panel';\nimport { setPanelOption } from '../../services/store';\nimport { FieldsAggregatedBreakdownScene } from '../ServiceScene/Breakdowns/FieldsAggregatedBreakdownScene';\nimport { setValueSummaryHeight } from '../ServiceScene/Breakdowns/Panels/ValueSummary';\nimport { FieldValuesBreakdownScene } from '../ServiceScene/Breakdowns/FieldValuesBreakdownScene';\nimport { LabelValuesBreakdownScene } from '../ServiceScene/Breakdowns/LabelValuesBreakdownScene';\nimport { css } from '@emotion/css';\nimport { firstValueFrom } from 'rxjs';\n\nconst ADD_TO_INVESTIGATION_MENU_TEXT = 'Add to investigation';\nconst ADD_TO_INVESTIGATION_MENU_DIVIDER_TEXT = 'investigations_divider'; // Text won't be visible\nconst ADD_TO_INVESTIGATION_MENU_GROUP_TEXT = 'Investigations';\n\nexport enum AvgFieldPanelType {\n 'timeseries' = 'timeseries',\n 'histogram' = 'histogram',\n}\n\nexport enum CollapsablePanelText {\n collapsed = 'Collapse',\n expanded = 'Expand',\n}\n\ninterface InvestigationOptions {\n labelName?: string;\n fieldName?: string;\n frame?: DataFrame;\n type?: 'timeseries' | 'logs';\n getLabelName?: () => string;\n}\n\ninterface PanelMenuState extends SceneObjectState {\n body?: VizPanelMenu;\n addInvestigationsLink?: boolean;\n investigationsButton?: AddToInvestigationButton;\n panelType?: AvgFieldPanelType;\n\n investigationOptions?: InvestigationOptions;\n}\n\n/**\n * @todo the VizPanelMenu interface is overly restrictive, doesn't allow any member functions on this class, so everything is currently inlined\n */\nexport class PanelMenu extends SceneObjectBase implements VizPanelMenu, SceneObject {\n constructor(state: Partial) {\n super({ ...state, addInvestigationsLink: state.addInvestigationsLink ?? true });\n this.addActivationHandler(() => {\n // Navigation options (all panels)\n const items: PanelMenuItem[] = [\n {\n text: 'Navigation',\n type: 'group',\n },\n {\n text: 'Explore',\n iconClassName: 'compass',\n href: getExploreLink(this),\n onClick: () => onExploreLinkClickTracking(),\n shortcut: 'p x',\n },\n ];\n\n let viz;\n try {\n viz = sceneGraph.getAncestor(this, VizPanel);\n } catch (e) {\n // If we can't find the viz panel, we can't add the Explore item. Currently the case for logs table.\n this.setState({\n body: new VizPanelMenu({\n items,\n }),\n });\n return;\n }\n\n this.setState({\n investigationsButton: new AddToInvestigationButton({\n labelName: this.state.investigationOptions?.getLabelName\n ? this.state.investigationOptions?.getLabelName()\n : this.state.investigationOptions?.labelName,\n fieldName: this.state.investigationOptions?.fieldName,\n frame: this.state.investigationOptions?.frame,\n type: this.state.investigationOptions?.type,\n }),\n });\n\n if (this.state.addInvestigationsLink) {\n // @todo rewrite the AddToExplorationButton\n // Manually activate scene\n this.state.investigationsButton?.activate();\n }\n\n // Visualization options\n if (this.state.panelType || viz?.state.collapsible) {\n addVisualizationHeader(items, this);\n }\n\n if (viz?.state.collapsible) {\n addCollapsableItem(items, this);\n }\n\n if (this.state.panelType) {\n addHistogramItem(items, this);\n }\n\n this.setState({\n body: new VizPanelMenu({\n items,\n }),\n });\n\n this._subs.add(\n this.state.investigationsButton?.subscribeToState(async () => {\n await subscribeToAddToInvestigation(this);\n })\n );\n });\n }\n\n addItem(item: PanelMenuItem): void {\n if (this.state.body) {\n this.state.body.addItem(item);\n }\n }\n setItems(items: PanelMenuItem[]): void {\n if (this.state.body) {\n this.state.body.setItems(items);\n }\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n\n if (body) {\n return ;\n }\n\n return <>;\n };\n}\n\nfunction addVisualizationHeader(items: PanelMenuItem[], sceneRef: PanelMenu) {\n items.push({\n text: '',\n type: 'divider',\n });\n items.push({\n text: 'Visualization',\n type: 'group',\n });\n}\n\nfunction addCollapsableItem(items: PanelMenuItem[], menu: PanelMenu) {\n const viz = sceneGraph.getAncestor(menu, VizPanel);\n items.push({\n text: viz.state.collapsed ? CollapsablePanelText.expanded : CollapsablePanelText.collapsed,\n iconClassName: viz.state.collapsed ? 'table-collapse-all' : 'table-expand-all',\n onClick: () => {\n const newCollapsableState = viz.state.collapsed ? CollapsablePanelText.expanded : CollapsablePanelText.collapsed;\n\n // Update the viz\n const vizPanelFlexLayout = sceneGraph.getAncestor(menu, SceneFlexLayout);\n setValueSummaryHeight(vizPanelFlexLayout, newCollapsableState);\n\n // Set state and update local storage\n viz.setState({\n collapsed: !viz.state.collapsed,\n });\n setPanelOption('collapsed', newCollapsableState);\n },\n });\n}\n\nfunction addHistogramItem(items: PanelMenuItem[], sceneRef: PanelMenu) {\n items.push({\n text: sceneRef.state.panelType !== AvgFieldPanelType.histogram ? 'Histogram' : 'Time series',\n iconClassName: sceneRef.state.panelType !== AvgFieldPanelType.histogram ? 'graph-bar' : 'chart-line',\n\n onClick: () => {\n const gridItem = sceneGraph.getAncestor(sceneRef, SceneCSSGridItem);\n const viz = sceneGraph.getAncestor(sceneRef, VizPanel).clone();\n const $data = sceneGraph.getData(sceneRef).clone();\n const menu = sceneRef.clone();\n const headerActions = Array.isArray(viz.state.headerActions)\n ? viz.state.headerActions.map((o) => o.clone())\n : viz.state.headerActions;\n let body;\n\n if (sceneRef.state.panelType !== AvgFieldPanelType.histogram) {\n body = PanelBuilders.timeseries().setOverrides(setLevelColorOverrides);\n } else {\n body = PanelBuilders.histogram();\n }\n\n gridItem.setState({\n body: body.setMenu(menu).setTitle(viz.state.title).setHeaderActions(headerActions).setData($data).build(),\n });\n\n const newPanelType =\n sceneRef.state.panelType !== AvgFieldPanelType.timeseries\n ? AvgFieldPanelType.timeseries\n : AvgFieldPanelType.histogram;\n setPanelOption('panelType', newPanelType);\n menu.setState({ panelType: newPanelType });\n\n const fieldsAggregatedBreakdownScene = findObjectOfType(\n gridItem,\n (o) => o instanceof FieldsAggregatedBreakdownScene,\n FieldsAggregatedBreakdownScene\n );\n if (fieldsAggregatedBreakdownScene) {\n fieldsAggregatedBreakdownScene.rebuildAvgFields();\n }\n\n onSwitchVizTypeTracking(newPanelType);\n },\n });\n}\n\nexport const getExploreLink = (sceneRef: SceneObject) => {\n const indexScene = sceneGraph.getAncestor(sceneRef, IndexScene);\n const $data = sceneGraph.getData(sceneRef);\n let queryRunner = $data instanceof SceneQueryRunner ? $data : getQueryRunnerFromChildren($data)[0];\n\n // If we don't have a query runner, then our panel is within a SceneCSSGridItem, we need to get the query runner from there\n if (!queryRunner) {\n const breakdownScene = sceneGraph.findObject(\n sceneRef,\n (o) => o instanceof FieldValuesBreakdownScene || o instanceof LabelValuesBreakdownScene\n );\n if (breakdownScene) {\n const queryProvider = sceneGraph.getData(breakdownScene);\n\n if (queryProvider instanceof SceneQueryRunner) {\n queryRunner = queryProvider;\n } else {\n queryRunner = getQueryRunnerFromChildren(queryProvider)[0];\n }\n } else {\n logger.error(new Error('Unable to locate query runner!'), {\n msg: 'PanelMenu - getExploreLink: Unable to locate query runner!',\n });\n }\n }\n const uninterpolatedExpr: string | undefined = queryRunner.state.queries[0].expr;\n const expr = sceneGraph.interpolate(sceneRef, uninterpolatedExpr);\n\n return onExploreLinkClick(indexScene, expr);\n};\n\nconst onExploreLinkClickTracking = () => {\n reportAppInteraction(USER_EVENTS_PAGES.all, USER_EVENTS_ACTIONS.all.open_in_explore_menu_clicked);\n};\n\nconst onSwitchVizTypeTracking = (newVizType: AvgFieldPanelType) => {\n reportAppInteraction(USER_EVENTS_PAGES.service_details, USER_EVENTS_ACTIONS.service_details.change_viz_type, {\n newVizType,\n });\n};\n\nconst getInvestigationLink = async (addToInvestigation: AddToInvestigationButton) => {\n const extensionPointId = ExtensionPoints.MetricInvestigation;\n const context = addToInvestigation.state.context;\n\n // `getPluginLinkExtensions` is removed in Grafana v12\n if (getPluginLinkExtensions !== undefined) {\n const links = getPluginLinkExtensions({\n extensionPointId,\n context,\n });\n\n return links.extensions[0];\n }\n\n // `getObservablePluginLinks` is introduced in Grafana v12\n if (getObservablePluginLinks !== undefined) {\n const links: PluginExtensionLink[] = await firstValueFrom(\n getObservablePluginLinks({\n extensionPointId,\n context,\n })\n );\n\n return links[0];\n }\n\n return undefined;\n};\n\nasync function subscribeToAddToInvestigation(exploreLogsVizPanelMenu: PanelMenu) {\n const addToInvestigationButton = exploreLogsVizPanelMenu.state.investigationsButton;\n if (addToInvestigationButton) {\n const link = await getInvestigationLink(addToInvestigationButton);\n\n const existingMenuItems = exploreLogsVizPanelMenu.state.body?.state.items ?? [];\n\n const existingAddToExplorationLink = existingMenuItems.find((item) => item.text === ADD_TO_INVESTIGATION_MENU_TEXT);\n\n if (link) {\n if (!existingAddToExplorationLink) {\n exploreLogsVizPanelMenu.state.body?.addItem({\n text: ADD_TO_INVESTIGATION_MENU_DIVIDER_TEXT,\n type: 'divider',\n });\n exploreLogsVizPanelMenu.state.body?.addItem({\n text: ADD_TO_INVESTIGATION_MENU_GROUP_TEXT,\n type: 'group',\n });\n exploreLogsVizPanelMenu.state.body?.addItem({\n text: ADD_TO_INVESTIGATION_MENU_TEXT,\n iconClassName: 'plus-square',\n onClick: (e) => link.onClick && link.onClick(e),\n });\n } else {\n if (existingAddToExplorationLink) {\n exploreLogsVizPanelMenu.state.body?.setItems(\n existingMenuItems.filter(\n (item) =>\n [\n ADD_TO_INVESTIGATION_MENU_DIVIDER_TEXT,\n ADD_TO_INVESTIGATION_MENU_GROUP_TEXT,\n ADD_TO_INVESTIGATION_MENU_TEXT,\n ].includes(item.text) === false\n )\n );\n }\n }\n }\n }\n}\n\nexport const getPanelWrapperStyles = (theme: GrafanaTheme2) => {\n return {\n panelWrapper: css({\n width: '100%',\n height: '100%',\n label: 'panel-wrapper',\n position: 'absolute',\n display: 'flex',\n }),\n };\n};\n","import React from 'react';\n\nimport { AdHocVariableFilter, BusEventBase, DataFrame } from '@grafana/data';\nimport {\n AdHocFiltersVariable,\n SceneComponentProps,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n} from '@grafana/scenes';\nimport { VariableHide } from '@grafana/schema';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport {\n LEVEL_VARIABLE_VALUE,\n VAR_FIELDS,\n VAR_FIELDS_AND_METADATA,\n VAR_LABELS,\n VAR_LABELS_REPLICA,\n VAR_LEVELS,\n VAR_METADATA,\n} from 'services/variables';\nimport { FilterButton } from 'Components/FilterButton';\nimport { getDetectedLabelsFrame } from '../ServiceScene';\nimport { getParserForField } from '../../../services/fields';\nimport {\n getAdHocFiltersVariable,\n getFieldsAndMetadataVariable,\n getValueFromAdHocVariableFilter,\n} from '../../../services/variableGetters';\nimport { FilterOp, NumericFilterOp } from '../../../services/filterTypes';\n\nimport { addToFavorites } from '../../../services/favorites';\nimport { areArraysEqual } from '../../../services/comparison';\nimport { logger } from '../../../services/logger';\nimport { isFilterMetadata } from '../../../services/filters';\nimport { addCurrentUrlToHistory } from '../../../services/navigate';\n\nexport interface AddToFiltersButtonState extends SceneObjectState {\n frame: DataFrame;\n variableName: InterpolatedFilterType;\n hideExclude?: boolean;\n isIncluded?: boolean;\n isExcluded?: boolean;\n}\n\nexport class AddFilterEvent extends BusEventBase {\n constructor(\n public source: 'legend' | 'filterButton' | 'variable',\n public operator: FilterType | NumericFilterType,\n public key: string,\n public value?: string\n ) {\n super();\n }\n public static type = 'add-filter';\n}\n\nexport class ClearFilterEvent extends BusEventBase {\n constructor(public key: string, public value?: string, public operator?: FilterType) {\n super();\n }\n public static type = 'add-filter';\n}\n\nexport type NumericFilterType = NumericFilterOp.gt | NumericFilterOp.gte | NumericFilterOp.lt | NumericFilterOp.lte;\n\n/**\n * Filter types:\n * - include/exclude: add a negative or positive filter\n * - clear: remove filter if exists\n * - toggle: if the filter does not exist, add as include; if exists, remove\n */\nexport type FilterType = 'include' | 'clear' | 'exclude' | 'toggle';\n\nexport function addAdHocFilter(filter: AdHocVariableFilter, scene: SceneObject, variableType: InterpolatedFilterType) {\n const type: FilterType = filter.operator === '=' ? 'include' : 'exclude';\n addToFilters(filter.key, filter.value, type, scene, variableType);\n}\n\nexport type InterpolatedFilterType = typeof VAR_LABELS | typeof VAR_FIELDS | typeof VAR_LEVELS | typeof VAR_METADATA;\nexport type UIVariableFilterType = typeof VAR_LEVELS | typeof VAR_FIELDS_AND_METADATA;\nexport type AdHocFilterTypes = InterpolatedFilterType | typeof VAR_LABELS_REPLICA | typeof VAR_FIELDS_AND_METADATA;\n\nexport function clearFilters(\n key: string,\n scene: SceneObject,\n variableType: InterpolatedFilterType,\n value?: string,\n operator?: FilterType\n) {\n const variable = getUIAdHocVariable(variableType, key, scene);\n\n let filters = variable.state.filters.filter((filter) => {\n const fieldValue = getValueFromAdHocVariableFilter(variableType, filter);\n if (value && operator) {\n return !(filter.key === key && fieldValue.value === value && filter.operator === operator);\n }\n if (value) {\n return !(filter.key === key && fieldValue.value === value);\n }\n if (operator) {\n return !(filter.key === key && filter.operator === operator);\n }\n\n return !(filter.key === key);\n });\n\n scene.publishEvent(new ClearFilterEvent(key, value, operator), true);\n\n variable.setState({\n filters,\n });\n}\n\ntype OperatorType = 'greater' | 'lesser';\nconst getNumericOperatorType = (op: NumericFilterType | string): OperatorType | undefined => {\n if (op === FilterOp.gt || op === FilterOp.gte) {\n return 'greater';\n }\n if (op === FilterOp.lt || op === FilterOp.lte) {\n return 'lesser';\n }\n return undefined;\n};\n\nexport function removeNumericFilter(\n key: string,\n scene: SceneObject,\n operator?: NumericFilterType,\n variableType?: InterpolatedFilterType\n) {\n if (!variableType) {\n variableType = resolveVariableTypeForField(key, scene);\n }\n const variable = getUIAdHocVariable(variableType, key, scene);\n const operatorType = operator ? getNumericOperatorType(operator) : undefined;\n\n let filters = variable.state.filters.filter((filter) => {\n return !(\n filter.key === key &&\n (getNumericOperatorType(filter.operator) === operatorType || filter.operator === FilterOp.NotEqual)\n );\n });\n\n variable.setState({\n filters,\n });\n}\n\nexport function addNumericFilter(\n key: string,\n value: string,\n operator: NumericFilterType,\n scene: SceneObject,\n variableType?: InterpolatedFilterType\n) {\n const operatorType = getNumericOperatorType(operator);\n\n if (!variableType) {\n variableType = resolveVariableTypeForField(key, scene);\n }\n const variable = getUIAdHocVariable(variableType, key, scene);\n\n let valueObject: string | undefined = undefined;\n if (variableType === VAR_FIELDS) {\n valueObject = JSON.stringify({\n value,\n parser: getParserForField(key, scene),\n });\n }\n\n let filters = variable.state.filters.filter((filter) => {\n return !(\n filter.key === key &&\n (getNumericOperatorType(filter.operator) === operatorType || filter.operator === FilterOp.NotEqual)\n );\n });\n\n filters = [\n ...filters,\n {\n key,\n operator: operator,\n value: valueObject ? valueObject : value,\n valueLabels: [value],\n },\n ];\n\n variable.setState({\n filters,\n });\n\n scene.publishEvent(new AddFilterEvent('filterButton', operator, key, value), true);\n}\n\n/**\n * Helper for buttons in the UI\n * toggles an ad hoc filter to a given variable type\n */\nexport function addToFilters(\n key: string,\n value: string,\n operator: FilterType,\n scene: SceneObject,\n variableType: InterpolatedFilterType\n) {\n // Add the current url to browser history before the state is changed so the user can revert their change.\n addCurrentUrlToHistory();\n\n if (variableType === VAR_LABELS) {\n addToFavorites(key, value, scene);\n }\n\n const variable = getUIAdHocVariable(variableType, key, scene);\n\n let valueObject: string | undefined = undefined;\n let valueLabel = value;\n if (variableType === VAR_FIELDS) {\n valueObject = JSON.stringify({\n value,\n parser: getParserForField(key, scene),\n });\n } else if (variableType === VAR_LEVELS && operator === 'exclude') {\n valueLabel = `!${value}`;\n }\n\n // If the filter exists, filter it\n let filters = variable.state.filters.filter((filter) => {\n const fieldValue = getValueFromAdHocVariableFilter(variableType, filter);\n\n // if we're including, we want to remove all filters that have this key\n if (operator === 'include') {\n return !(filter.key === key && filter.operator === FilterOp.NotEqual);\n }\n if (operator === 'exclude') {\n return !(filter.key === key && filter.operator === FilterOp.Equal);\n }\n\n return !(filter.key === key && fieldValue.value === value);\n });\n\n const filterExists = filters.length !== variable.state.filters.length;\n\n if (operator === 'include' || operator === 'exclude' || (!filterExists && operator === 'toggle')) {\n filters = [\n ...filters,\n {\n key,\n operator: operator === 'exclude' ? FilterOp.NotEqual : FilterOp.Equal,\n value: valueObject ? valueObject : value,\n valueLabels: [valueLabel],\n },\n ];\n }\n\n // Variable needs to be updated before event is published!\n variable.setState({\n filters,\n });\n\n scene.publishEvent(new AddFilterEvent('filterButton', operator, key, value), true);\n}\n\nexport function replaceFilter(\n key: string,\n value: string,\n operator: Extract,\n scene: SceneObject,\n variableType: InterpolatedFilterType\n) {\n const variable = getUIAdHocVariable(variableType, key, scene);\n\n variable.setState({\n filters: [\n {\n key,\n operator: operator === 'exclude' ? FilterOp.NotEqual : FilterOp.Equal,\n value,\n },\n ],\n hide: VariableHide.hideLabel,\n });\n}\n\nexport function validateVariableNameForField(field: string, variableName: InterpolatedFilterType) {\n // Special case: If the key is LEVEL_VARIABLE_VALUE, we need to use the VAR_FIELDS.\n if (field === LEVEL_VARIABLE_VALUE) {\n return VAR_LEVELS;\n }\n return variableName;\n}\n\nfunction resolveVariableTypeForField(field: string, scene: SceneObject): InterpolatedFilterType {\n const indexedLabel = getDetectedLabelsFrame(scene)?.fields?.find((label) => label.name === field);\n return indexedLabel ? VAR_LABELS : VAR_FIELDS;\n}\n\nexport class AddToFiltersButton extends SceneObjectBase {\n constructor(state: AddToFiltersButtonState) {\n super(state);\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onActivate() {\n const filter = getFilter(this.state.frame);\n if (filter) {\n const variable = getUIAdHocVariable(this.state.variableName, filter.name, this);\n this.setFilterState(variable);\n\n this._subs.add(\n variable.subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.setFilterState(variable);\n }\n })\n );\n }\n }\n\n private setFilterState(variable: AdHocFiltersVariable) {\n const filter = getFilter(this.state.frame);\n if (!filter) {\n this.setState({\n isIncluded: false,\n isExcluded: false,\n });\n return;\n }\n\n // Check if the filter is already there\n const filterInSelectedFilters = variable.state.filters.find((f) => {\n const isMetadata = isFilterMetadata(filter);\n const value = getValueFromAdHocVariableFilter(isMetadata ? VAR_METADATA : VAR_FIELDS, f);\n return f.key === filter.name && value.value === filter.value;\n });\n\n if (!filterInSelectedFilters) {\n this.setState({\n isIncluded: false,\n isExcluded: false,\n });\n return;\n }\n\n this.setState({\n isIncluded: filterInSelectedFilters.operator === FilterOp.Equal,\n isExcluded: filterInSelectedFilters.operator === FilterOp.NotEqual,\n });\n }\n\n public onClick = (type: FilterType) => {\n const filter = getFilter(this.state.frame);\n if (!filter) {\n return;\n }\n\n addToFilters(filter.name, filter.value, type, this, this.state.variableName);\n const variable = getUIAdHocVariable(this.state.variableName, filter.name, this);\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.add_to_filters_in_breakdown_clicked,\n {\n filterType: this.state.variableName,\n key: filter.name,\n action: type,\n filtersLength: variable?.state.filters.length || 0,\n }\n );\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { hideExclude, isExcluded, isIncluded } = model.useState();\n return (\n model.onClick('include')}\n onClear={() => model.onClick('clear')}\n onExclude={() => model.onClick('exclude')}\n hideExclude={hideExclude}\n />\n );\n };\n}\n\nconst getFilter = (frame: DataFrame) => {\n // current filter name and value is format {name: value}\n const filterNameAndValueObj = frame.fields[1]?.labels ?? {};\n // Sanity check - filter should have only one key-value pair\n if (Object.keys(filterNameAndValueObj).length !== 1) {\n logger.warn('getFilter: unexpected empty labels');\n return;\n }\n const name = Object.keys(filterNameAndValueObj)[0];\n const value = filterNameAndValueObj[name];\n return { name, value };\n};\n\nconst getUIAdHocVariable = (variableType: InterpolatedFilterType, key: string, scene: SceneObject) => {\n return variableType === VAR_FIELDS || variableType === VAR_METADATA\n ? getFieldsAndMetadataVariable(scene)\n : getAdHocFiltersVariable(validateVariableNameForField(key, variableType), scene);\n};\n","import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport React, { ChangeEvent } from 'react';\nimport { ByFrameRepeater } from './ByFrameRepeater';\nimport { SearchInput } from './SearchInput';\nimport { LabelBreakdownScene } from './LabelBreakdownScene';\nimport { FieldsBreakdownScene } from './FieldsBreakdownScene';\nimport { BusEventBase } from '@grafana/data';\nimport { logger } from '../../../services/logger';\n\nexport class BreakdownSearchReset extends BusEventBase {\n public static type = 'breakdown-search-reset';\n}\n\nexport interface BreakdownSearchSceneState extends SceneObjectState {\n filter?: string;\n}\n\nconst recentFilters: Record = {};\n\nexport class BreakdownSearchScene extends SceneObjectBase {\n private cacheKey: string;\n constructor(cacheKey: string) {\n super({\n filter: recentFilters[cacheKey] ?? '',\n });\n this.cacheKey = cacheKey;\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { filter } = model.useState();\n return (\n \n );\n };\n\n public onValueFilterChange = (event: ChangeEvent) => {\n this.setState({ filter: event.target.value });\n this.filterValues(event.target.value);\n };\n\n public clearValueFilter = () => {\n this.setState({ filter: '' });\n this.filterValues('');\n };\n\n public reset = () => {\n this.setState({ filter: '' });\n recentFilters[this.cacheKey] = '';\n };\n\n private filterValues(filter: string) {\n const breakdownScene = sceneGraph.findObject(\n this,\n (o) => o instanceof LabelBreakdownScene || o instanceof FieldsBreakdownScene\n );\n if (breakdownScene instanceof LabelBreakdownScene || breakdownScene instanceof FieldsBreakdownScene) {\n recentFilters[this.cacheKey] = filter;\n const byFrameRepeater = sceneGraph.findDescendents(breakdownScene, ByFrameRepeater);\n byFrameRepeater?.forEach((child) => {\n if (child.state.body.isActive) {\n child.filterByString(filter);\n }\n });\n } else {\n logger.warn('unable to find Breakdown scene', {\n typeofBody: typeof breakdownScene,\n filter,\n });\n }\n }\n}\n","import React from 'react';\n\nimport { DataFrame, LoadingState, PanelData } from '@grafana/data';\nimport {\n SceneByFrameRepeater,\n SceneComponentProps,\n SceneDataTransformer,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneLayout,\n SceneObjectBase,\n SceneObjectState,\n SceneReactObject,\n VizPanel,\n} from '@grafana/scenes';\nimport { sortSeries } from 'services/sorting';\nimport { fuzzySearch } from '../../../services/search';\nimport { getLabelValue } from './SortByScene';\nimport { Alert, Button } from '@grafana/ui';\nimport { css } from '@emotion/css';\nimport { BreakdownSearchReset } from './BreakdownSearchScene';\nimport { map, Observable } from 'rxjs';\nimport { LayoutSwitcher } from './LayoutSwitcher';\nimport { VALUE_SUMMARY_PANEL_KEY } from './Panels/ValueSummary';\nimport { logger } from '../../../services/logger';\n\ninterface ByFrameRepeaterState extends SceneObjectState {\n body: SceneLayout;\n getLayoutChild(frame: DataFrame, frameIndex: number): SceneFlexItem;\n}\n\ntype FrameFilterCallback = (frame: DataFrame) => boolean;\ntype FrameIterateCallback = (frames: DataFrame[], seriesIndex: number) => void;\n\nexport class ByFrameRepeater extends SceneObjectBase {\n private unfilteredChildren: SceneFlexItem[] = [];\n private sortBy: string;\n private direction: string;\n private sortedSeries: DataFrame[] = [];\n private getFilter: () => string;\n public constructor({\n sortBy,\n direction,\n getFilter,\n ...state\n }: ByFrameRepeaterState & { sortBy: string; direction: string; getFilter: () => string }) {\n super(state);\n\n this.sortBy = sortBy;\n this.direction = direction;\n this.getFilter = getFilter;\n\n this.addActivationHandler(() => {\n const data = sceneGraph.getData(this);\n\n this._subs.add(\n data.subscribeToState((data, prevData) => {\n if (\n data.data?.state === LoadingState.Done ||\n (data.data?.state === LoadingState.Streaming &&\n data.data.series.length > (prevData.data?.series.length ?? 0))\n ) {\n this.performRepeat(data.data);\n }\n })\n );\n\n if (data.state.data) {\n this.performRepeat(data.state.data);\n }\n });\n }\n\n public sort = (sortBy: string, direction: string) => {\n const data = sceneGraph.getData(this);\n this.sortBy = sortBy;\n this.direction = direction;\n if (data.state.data) {\n this.performRepeat(data.state.data);\n }\n };\n\n private performRepeat(data: PanelData) {\n const newChildren: SceneFlexItem[] = [];\n const sortedSeries = sortSeries(data.series, this.sortBy, this.direction);\n\n for (let seriesIndex = 0; seriesIndex < sortedSeries.length; seriesIndex++) {\n const layoutChild = this.state.getLayoutChild(sortedSeries[seriesIndex], seriesIndex);\n newChildren.push(layoutChild);\n }\n\n this.sortedSeries = sortedSeries;\n this.unfilteredChildren = newChildren;\n\n if (this.getFilter()) {\n this.state.body.setState({ children: [] });\n this.filterByString(this.getFilter());\n } else {\n this.state.body.setState({ children: newChildren });\n }\n }\n\n public iterateFrames = (callback: FrameIterateCallback) => {\n const data = sceneGraph.getData(this).state.data;\n if (!data) {\n return;\n }\n for (let seriesIndex = 0; seriesIndex < this.sortedSeries.length; seriesIndex++) {\n callback(this.sortedSeries, seriesIndex);\n }\n };\n\n filterByString = (filter: string) => {\n let haystack: string[] = [];\n\n this.iterateFrames((frames, seriesIndex) => {\n const labelValue = getLabelValue(frames[seriesIndex]);\n haystack.push(labelValue);\n });\n fuzzySearch(haystack, filter, (data) => {\n if (data && data[0]) {\n // We got search results\n this.filterFrames((frame: DataFrame) => {\n const label = getLabelValue(frame);\n return data[0].includes(label);\n });\n } else {\n // reset search\n this.filterFrames(() => true);\n }\n\n this.filterSummaryChart(data);\n });\n };\n\n /**\n * Filters the summary panel rendered above the breakdown panels by adding a transformation to the panel\n * @param data\n * @private\n */\n private filterSummaryChart(data: string[][]) {\n const layoutSwitcher = sceneGraph.getAncestor(this, LayoutSwitcher);\n\n if (layoutSwitcher) {\n const singleGraphParent = sceneGraph.findAllObjects(\n layoutSwitcher,\n (obj) => obj.isActive && obj.state.key === VALUE_SUMMARY_PANEL_KEY\n );\n if (singleGraphParent[0] instanceof SceneFlexLayout) {\n const panel = sceneGraph.findDescendents(singleGraphParent[0], VizPanel)[0];\n if (panel instanceof VizPanel) {\n panel.setState({\n $data: new SceneDataTransformer({\n transformations: [() => limitFramesByName(data[0])],\n }),\n });\n } else {\n logger.warn('filterSummaryChart: VizPanel not found', { typeofPanel: typeof panel });\n }\n } else {\n logger.warn('filterSummaryChart: SceneFlexItem not found', { typeofGraphParent: typeof singleGraphParent });\n }\n }\n }\n\n public filterFrames = (filterFn: FrameFilterCallback) => {\n const newChildren: SceneFlexItem[] = [];\n this.iterateFrames((frames, seriesIndex) => {\n if (filterFn(frames[seriesIndex])) {\n newChildren.push(this.unfilteredChildren[seriesIndex]);\n }\n });\n\n if (newChildren.length === 0) {\n const filter = this.getFilter();\n this.state.body.setState({ children: [buildNoResultsScene(filter, this.clearFilter)] });\n } else {\n this.state.body.setState({ children: newChildren });\n }\n };\n\n public clearFilter = () => {\n this.publishEvent(new BreakdownSearchReset(), true);\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n return ;\n };\n}\n\nfunction buildNoResultsScene(filter: string, clearFilter: () => void) {\n return new SceneFlexLayout({\n direction: 'row',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n reactNode: (\n
\n \n No values found matching “{filter}”\n \n \n
\n ),\n }),\n }),\n ],\n });\n}\n\nconst styles = {\n alertContainer: css({\n flexGrow: 1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }),\n noResultsAlert: css({\n minWidth: '30vw',\n flexGrow: 0,\n }),\n clearButton: css({\n marginLeft: '1.5rem',\n }),\n};\n\nexport function limitFramesByName(matches: string[]) {\n return (source: Observable) => {\n return source.pipe(\n map((frames) => {\n if (!matches || !matches.length) {\n return frames;\n }\n let newFrames: DataFrame[] = [];\n frames.forEach((f) => {\n const label = getLabelValue(f);\n if (matches.includes(label)) {\n newFrames.push(f);\n }\n });\n return newFrames;\n })\n );\n };\n}\n","import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { GrotError } from '../../GrotError';\nimport { Alert } from '@grafana/ui';\nimport React from 'react';\nimport { emptyStateStyles } from './FieldsBreakdownScene';\n\nexport interface EmptyLayoutSceneState extends SceneObjectState {\n type: 'fields' | 'labels';\n}\n\nexport class EmptyLayoutScene extends SceneObjectBase {\n public static Component({ model }: SceneComponentProps) {\n const { type } = model.useState();\n return (\n \n \n We did not find any {type} for the given timerange. Please{' '}\n \n let us know\n {' '}\n if you think this is a mistake.\n \n \n );\n }\n}\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Select, useStyles2, InlineField, Icon, ActionMeta, InputActionMeta } from '@grafana/ui';\nimport { testIds } from '../../../services/testIds';\nimport { VariableValueOption } from '@grafana/scenes';\n\nimport { wrapWildcardSearch } from '../../../services/query';\n\ntype Props = {\n options: VariableValueOption[];\n value?: T;\n onChange: (label: T | undefined) => void;\n label: string;\n};\n\nexport type AsyncFieldSelectorProps = {\n selectOption: (value: string) => void;\n isLoading: boolean;\n initialFilter: SelectableValue;\n} & Props;\n\nexport function FieldSelector({ options, value, onChange, label }: Props) {\n const styles = useStyles2(getStyles);\n const [selected, setSelected] = useState(false);\n\n const selectableOptions: SelectableValue[] = options.map((option) => {\n return {\n label: option.label,\n value: option.value,\n };\n });\n return (\n \n setSelected(true)}\n onCloseMenu={() => setSelected(false)}\n onChange={(selected: SelectableValue) => onChange(selected.value)}\n className={styles.select}\n prefix={selected ? undefined : }\n />\n \n );\n}\n\nexport function ServiceFieldSelector({\n options,\n value,\n onChange,\n label,\n selectOption,\n isLoading,\n initialFilter,\n}: AsyncFieldSelectorProps) {\n const styles = useStyles2(getStyles);\n const [selected, setSelected] = useState(false);\n const [customOption, setCustomOption] = useState>(initialFilter);\n\n const selectableOptions: SelectableValue[] = options.map((option) => {\n return {\n label: option.label,\n value: option.value,\n };\n });\n const allOptions =\n customOption && value && customOption.value?.includes(value)\n ? [customOption, ...selectableOptions]\n : selectableOptions;\n\n const selectedOption = allOptions?.find((opt) => opt.value === value);\n\n return (\n \n setSelected(true)}\n onCloseMenu={() => setSelected(false)}\n allowCustomValue={true}\n prefix={selected || selectedOption?.__isNew__ ? undefined : }\n onChange={(value: SelectableValue, actionMeta: ActionMeta) => {\n // Custom added value\n if (value?.__isNew__ || value?.icon) {\n setCustomOption({ ...value, icon: 'filter' });\n return onChange(value.value);\n }\n\n // If the user clears the search\n if (actionMeta.action === 'clear') {\n return onChange('');\n }\n\n // Select the service is the value is not a custom filter\n if (actionMeta.action === 'select-option' && value.value && !value.__isNew__) {\n selectOption(value.value);\n }\n }}\n onInputChange={(value: string | undefined, actionMeta: InputActionMeta) => {\n // Grafana/grafana doesn't have types from react-select, but we need the prevInput to add custom value when user clicks off with active search string\n const meta = actionMeta as InputActionMeta & { prevInputValue: string };\n\n // The user is typing\n if (meta.action === 'input-change') {\n return onChange(value);\n }\n\n // the user closed the menu, with text in search box\n if (meta.action === 'menu-close' && meta.prevInputValue) {\n setCustomOption({\n value: wrapWildcardSearch(meta.prevInputValue),\n label: meta.prevInputValue,\n icon: 'filter',\n __isNew__: true,\n });\n return onChange(meta.prevInputValue);\n }\n }}\n />\n \n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n input: css({\n marginBottom: 0,\n }),\n select: css({\n maxWidth: theme.spacing(64),\n minWidth: theme.spacing(20),\n }),\n selectWrapper: css({\n label: 'field-selector-select-wrapper',\n maxWidth: theme.spacing(62.5),\n minWidth: theme.spacing(20),\n marginRight: theme.spacing.x1,\n marginBottom: 0,\n }),\n serviceSceneSelectWrapper: css({\n label: 'service-select-wrapper',\n maxWidth: theme.spacing(62.5),\n minWidth: theme.spacing(20),\n marginRight: theme.spacing.x1,\n marginBottom: 0,\n }),\n };\n}\n","import {\n PanelBuilders,\n SceneComponentProps,\n SceneCSSGridLayout,\n SceneDataProvider,\n SceneDataState,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n SceneQueryRunner,\n SceneReactObject,\n} from '@grafana/scenes';\nimport { buildDataQuery, renderLogQLFieldFilters, renderLogQLMetadataFilters } from '../../../services/query';\nimport { getSortByPreference } from '../../../services/store';\nimport { DataQueryError, LoadingState } from '@grafana/data';\nimport { LayoutSwitcher } from './LayoutSwitcher';\nimport { getQueryRunner } from '../../../services/panel';\nimport { ByFrameRepeater } from './ByFrameRepeater';\nimport { Alert, DrawStyle, LoadingPlaceholder, useStyles2 } from '@grafana/ui';\nimport {\n buildFieldsQueryString,\n getFilterBreakdownValueScene,\n getParserForField,\n getParserFromFieldsFilters,\n} from '../../../services/fields';\nimport { getLabelValue } from './SortByScene';\nimport { ParserType, VAR_FIELDS, VAR_METADATA } from '../../../services/variables';\nimport React from 'react';\nimport { FIELDS_BREAKDOWN_GRID_TEMPLATE_COLUMNS, FieldsBreakdownScene } from './FieldsBreakdownScene';\nimport { getDetectedFieldsFrame } from '../ServiceScene';\nimport { DEFAULT_SORT_BY } from '../../../services/sorting';\nimport {\n getFieldGroupByVariable,\n getFieldsVariable,\n getLabelsVariable,\n getLevelsVariable,\n getLineFiltersVariable,\n getMetadataVariable,\n getPatternsVariable,\n} from '../../../services/variableGetters';\nimport { LokiQuery } from '../../../services/lokiQuery';\nimport { getPanelWrapperStyles, PanelMenu } from '../../Panels/PanelMenu';\nimport { ValueSummaryPanelScene } from './Panels/ValueSummary';\nimport { areArraysEqual } from '../../../services/comparison';\nimport { logger } from '../../../services/logger';\n\nexport interface FieldValuesBreakdownSceneState extends SceneObjectState {\n body?: (LayoutSwitcher & SceneObject) | (SceneReactObject & SceneObject);\n $data?: SceneDataProvider;\n}\n\nexport class FieldValuesBreakdownScene extends SceneObjectBase {\n constructor(state: Partial) {\n super(state);\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n public static Selector({ model }: SceneComponentProps) {\n const { body } = model.useState();\n if (body instanceof LayoutSwitcher) {\n return <>{body && };\n }\n\n return <>;\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n const styles = useStyles2(getPanelWrapperStyles);\n if (body) {\n return {body && };\n }\n\n return ;\n };\n\n private getTagKey() {\n const groupByVariable = getFieldGroupByVariable(this);\n return String(groupByVariable.state.value);\n }\n\n onActivate() {\n const query = this.buildQuery();\n\n // Set query runner\n this.setState({\n body: this.build(query),\n $data: this.buildQueryRunner(),\n });\n\n // Subscribe to data query changes\n this._subs.add(\n this.state.$data?.subscribeToState((newState) => {\n this.onValuesDataQueryChange(newState, query);\n })\n );\n\n this.runQuery();\n this.setSubscriptions();\n }\n\n private buildQueryRunner() {\n const query = this.buildQuery();\n return getQueryRunner([query], { runQueriesMode: 'manual' });\n }\n\n /**\n * Builds the LokiQuery for the value breakdown\n */\n private buildQuery() {\n const tagKey = this.getTagKey();\n const fieldsVariable = getFieldsVariable(this);\n const detectedFieldsFrame = getDetectedFieldsFrame(this);\n const queryString = buildFieldsQueryString(tagKey, fieldsVariable, detectedFieldsFrame);\n // Manually interpolate query so we don't pollute the variable interpolation for other queries\n const { variableName, filterExpression } = this.removeFieldLabelFromVariableInterpolation();\n const expression = sceneGraph.interpolate(this, queryString.replace(`$\\{${variableName}}`, filterExpression));\n\n return buildDataQuery(expression, { legendFormat: `{{${tagKey}}}`, refId: tagKey });\n }\n\n /**\n * Sets activation subscriptions\n */\n private setSubscriptions() {\n // Subscribe to time range changes\n this._subs.add(\n sceneGraph.getTimeRange(this).subscribeToState(() => {\n // Run query on time range change\n this.runQuery();\n })\n );\n\n // VARIABLE SUBS\n // Subscribe to line filter changes\n this._subs.add(\n getLineFiltersVariable(this).subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.runQuery();\n }\n })\n );\n\n // Subscribe to pattern filter changes\n this._subs.add(\n getPatternsVariable(this).subscribeToState((newState, prevState) => {\n if (newState.value !== prevState.value) {\n this.runQuery();\n }\n })\n );\n\n // Subscribe to labels variable changes\n this._subs.add(\n getLabelsVariable(this).subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.runQuery();\n }\n })\n );\n\n // Subscribe to levels variable changes\n this._subs.add(\n getLevelsVariable(this).subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.runQuery();\n }\n })\n );\n\n const { parser } = this.getParserForThisField();\n\n if (parser !== 'structuredMetadata') {\n this.setFieldParserSubscriptions();\n } else {\n this.setMetadataParserSubscriptions();\n }\n }\n\n /**\n * Subscribe to variables for metadata breakdowns\n */\n private setMetadataParserSubscriptions() {\n const key = this.getTagKey();\n // Subscribe to any fields change and run the query without change\n this._subs.add(\n getFieldsVariable(this).subscribeToState(async (newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.runQuery();\n }\n })\n );\n\n this._subs.add(\n getMetadataVariable(this).subscribeToState(async (newState, prevState) => {\n if (\n !areArraysEqual(\n newState.filters.filter((f) => f.key !== key),\n prevState.filters.filter((f) => f.key !== key)\n )\n ) {\n this.runQuery();\n }\n })\n );\n }\n\n /**\n * Subscribe to variables for field breakdowns\n */\n private setFieldParserSubscriptions() {\n const key = this.getTagKey();\n // Subscribe to any metadata change and run the query without alteration\n this._subs.add(\n getMetadataVariable(this).subscribeToState(async (newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.runQuery();\n }\n })\n );\n // Subscribe to fields variable, run the query if the change wasn't for this label\n this._subs.add(\n getFieldsVariable(this).subscribeToState(async (newState, prevState) => {\n if (\n !areArraysEqual(\n newState.filters.filter((f) => f.key !== key),\n prevState.filters.filter((f) => f.key !== key)\n )\n ) {\n this.runQuery();\n }\n })\n );\n }\n\n /**\n * Rebuild the query before running.\n * If so update the query with the new parser and set the parser to state.\n */\n private rebuildQuery() {\n const query = this.buildQuery();\n this.getSceneQueryRunner()?.setState({\n queries: [query],\n });\n }\n\n /**\n * Run the field values breakdown query.\n * Generates the filterExpression excluding all filters with a key that matches the label.\n */\n private runQuery() {\n // Update the filters to exclude the current value so all options are displayed to the user\n this.rebuildQuery();\n const queryRunner = this.getSceneQueryRunner();\n queryRunner?.runQueries();\n }\n\n /**\n * Returns the query runner\n */\n private getSceneQueryRunner() {\n if (this.state.$data) {\n const queryRunners = sceneGraph.findDescendents(this.state.$data, SceneQueryRunner);\n if (queryRunners.length !== 1) {\n const error = new Error('Unable to find query runner in value breakdown!');\n logger.error(error, { msg: 'FieldValuesBreakdownScene: Unable to find query runner in value breakdown!' });\n throw error;\n }\n\n return queryRunners[0];\n }\n logger.warn('FieldValuesBreakdownScene: Query is attempting to execute, but query runner is undefined!');\n return undefined;\n }\n\n /**\n * Sets the expression builder to exclude the current field label\n */\n private removeFieldLabelFromVariableInterpolation() {\n const tagKey = this.getTagKey();\n let filterExpression;\n let variableName: typeof VAR_FIELDS | typeof VAR_METADATA;\n\n // We want the parser for this field, we only need to exclude keys for the variable type that matches this value breakdown\n const parser = this.getQueryParser();\n if (parser === 'structuredMetadata') {\n const metadataVar = getMetadataVariable(this);\n variableName = VAR_METADATA;\n filterExpression = renderLogQLMetadataFilters(metadataVar.state.filters, [tagKey]);\n } else {\n variableName = VAR_FIELDS;\n const fieldsVar = getFieldsVariable(this);\n filterExpression = renderLogQLFieldFilters(fieldsVar.state.filters, [tagKey]);\n }\n\n return { filterExpression, variableName };\n }\n\n /**\n * Actions to run when the value breakdown query response is received.\n */\n private onValuesDataQueryChange(newState: SceneDataState, query: LokiQuery) {\n if (newState.data?.state === LoadingState.Done) {\n if (this.state.body instanceof SceneReactObject) {\n this.setState({\n body: this.build(query),\n });\n }\n }\n if (newState.data?.state === LoadingState.Error) {\n this.setErrorState(newState.data.errors);\n }\n }\n\n /**\n * Sets the error body state\n */\n private setErrorState(errors: DataQueryError[] | undefined) {\n this.setState({\n body: new SceneReactObject({\n reactNode: (\n \n {errors?.map((err, key) => (\n
\n {err.status && (\n <>\n Status: {err.status}
\n \n )}\n {err.message && (\n <>\n Message: {err.message}
\n \n )}\n {err.traceId && (\n <>\n TraceId: {err.traceId}\n \n )}\n
\n ))}\n
\n ),\n }),\n });\n }\n\n /**\n * Builds the layout switcher\n */\n private build(query: LokiQuery) {\n const { optionValue, parser } = this.getParserForThisField();\n const { sortBy, direction } = getSortByPreference('fields', DEFAULT_SORT_BY, 'desc');\n const fieldsBreakdownScene = sceneGraph.getAncestor(this, FieldsBreakdownScene);\n const getFilter = () => fieldsBreakdownScene.state.search.state.filter ?? '';\n\n return new LayoutSwitcher({\n options: [\n { value: 'single', label: 'Single' },\n { value: 'grid', label: 'Grid' },\n { value: 'rows', label: 'Rows' },\n ],\n active: 'grid',\n layouts: [\n // Single\n new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneReactObject({\n reactNode: ,\n }),\n new SceneFlexItem({\n minHeight: 300,\n body: PanelBuilders.timeseries()\n .setTitle(optionValue)\n .setShowMenuAlways(true)\n .setMenu(new PanelMenu({}))\n .build(),\n }),\n ],\n }),\n\n // Grid\n new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneReactObject({\n reactNode: ,\n }),\n new ValueSummaryPanelScene({ title: optionValue, type: 'field', tagKey: this.getTagKey() }),\n new SceneReactObject({\n reactNode: ,\n }),\n new ByFrameRepeater({\n body: new SceneCSSGridLayout({\n templateColumns: FIELDS_BREAKDOWN_GRID_TEMPLATE_COLUMNS,\n autoRows: '200px',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n reactNode: ,\n }),\n }),\n ],\n isLazy: true,\n }),\n getLayoutChild: getFilterBreakdownValueScene(\n getLabelValue,\n query?.expr.includes('count_over_time') ? DrawStyle.Bars : DrawStyle.Line,\n parser === 'structuredMetadata' ? VAR_METADATA : VAR_FIELDS,\n sceneGraph.getAncestor(this, FieldsBreakdownScene).state.sort,\n optionValue\n ),\n sortBy,\n direction,\n getFilter,\n }),\n ],\n }),\n\n // Rows\n new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneReactObject({\n reactNode: ,\n }),\n new ValueSummaryPanelScene({ title: optionValue, type: 'field', tagKey: this.getTagKey() }),\n new SceneReactObject({\n reactNode: ,\n }),\n new ByFrameRepeater({\n body: new SceneCSSGridLayout({\n templateColumns: '1fr',\n autoRows: '200px',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n reactNode: ,\n }),\n }),\n ],\n isLazy: true,\n }),\n getLayoutChild: getFilterBreakdownValueScene(\n getLabelValue,\n query?.expr.includes('count_over_time') ? DrawStyle.Bars : DrawStyle.Line,\n parser === 'structuredMetadata' ? VAR_METADATA : VAR_FIELDS,\n sceneGraph.getAncestor(this, FieldsBreakdownScene).state.sort,\n optionValue\n ),\n sortBy,\n direction,\n getFilter,\n }),\n ],\n }),\n ],\n });\n }\n\n /**\n * Gets the parser for the value breakdown\n */\n private getParserForThisField() {\n const groupByVariable = getFieldGroupByVariable(this);\n const optionValue = String(groupByVariable.state.value);\n const parserForThisField = getParserForField(optionValue, this);\n return { optionValue, parser: parserForThisField };\n }\n\n /**\n * Gets the parser needed for fields variables\n */\n private getParserForFields() {\n return getParserFromFieldsFilters(getFieldsVariable(this));\n }\n\n /**\n * Gets the parser needed to run a query for the field variable and the breakdown field\n */\n private getQueryParser(): ParserType {\n const { parser } = this.getParserForThisField();\n const parserForFields = this.getParserForFields();\n\n // If the parser needed to parse this field matches the parser needed to parse the fields\n if (parser === parserForFields) {\n return parserForFields;\n }\n // If there is no parser in the detected_fields frame for this field, let's play it safe and return mixed\n if (parser === undefined) {\n return 'mixed';\n }\n // If the parser for the breakdown field is metadata, return the parser for fields\n if (parser === 'structuredMetadata') {\n return parserForFields;\n }\n // if the parser for fields is metadata, return parser for the breakdown field\n if (parserForFields === 'structuredMetadata') {\n return parser;\n }\n return 'mixed';\n }\n}\n","import {\n PanelBuilders,\n QueryRunnerState,\n SceneComponentProps,\n SceneCSSGridItem,\n SceneCSSGridLayout,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n VizPanel,\n} from '@grafana/scenes';\nimport { ALL_VARIABLE_VALUE, DetectedFieldType, ParserType } from '../../../services/variables';\nimport { buildDataQuery } from '../../../services/query';\nimport { getQueryRunner, setLevelColorOverrides } from '../../../services/panel';\nimport { DrawStyle, LoadingPlaceholder, StackingMode, useStyles2 } from '@grafana/ui';\nimport { LayoutSwitcher } from './LayoutSwitcher';\nimport { FIELDS_BREAKDOWN_GRID_TEMPLATE_COLUMNS, FieldsBreakdownScene } from './FieldsBreakdownScene';\nimport {\n getDetectedFieldsFrame,\n getDetectedFieldsFrameFromQueryRunnerState,\n getDetectedFieldsNamesFromQueryRunnerState,\n getDetectedFieldsParsersFromQueryRunnerState,\n ServiceScene,\n} from '../ServiceScene';\nimport React from 'react';\nimport { SelectLabelActionScene } from './SelectLabelActionScene';\nimport { ValueSlugs } from '../../../services/routing';\nimport { DataFrame, LoadingState } from '@grafana/data';\nimport {\n buildFieldsQueryString,\n extractParserFromArray,\n getDetectedFieldType,\n isAvgField,\n} from '../../../services/fields';\nimport {\n getFieldGroupByVariable,\n getFieldsVariable,\n getValueFromFieldsFilter,\n} from '../../../services/variableGetters';\nimport { AvgFieldPanelType, getPanelWrapperStyles, PanelMenu } from '../../Panels/PanelMenu';\nimport { logger } from '../../../services/logger';\nimport { getPanelOption } from '../../../services/store';\nimport { MAX_NUMBER_OF_TIME_SERIES } from './TimeSeriesLimit';\n\nexport interface FieldsAggregatedBreakdownSceneState extends SceneObjectState {\n body?: LayoutSwitcher;\n}\n\nexport class FieldsAggregatedBreakdownScene extends SceneObjectBase {\n constructor(state: Partial) {\n super(state);\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n private onDetectedFieldsChange = (newState: QueryRunnerState) => {\n if (newState.data?.state === LoadingState.Done) {\n //@todo cardinality looks wrong in API response\n this.updateChildren(newState);\n }\n };\n\n private updateChildren(newState: QueryRunnerState, newParser: ParserType | undefined = undefined) {\n const detectedFieldsFrame = getDetectedFieldsFrameFromQueryRunnerState(newState);\n const newNamesField = getDetectedFieldsNamesFromQueryRunnerState(newState);\n const newParsersField = getDetectedFieldsParsersFromQueryRunnerState(newState);\n const cardinalityMap = this.calculateCardinalityMap(newState);\n\n // Iterate through all the layouts\n this.state.body?.state.layouts.forEach((layout) => {\n if (layout instanceof SceneCSSGridLayout) {\n // populate set of new list of fields\n const newFieldsSet = new Set(newNamesField?.values);\n const updatedChildren = layout.state.children as SceneCSSGridItem[];\n\n // Iterate through all the existing panels\n for (let i = 0; i < updatedChildren.length; i++) {\n const gridItem = layout.state.children[i];\n if (gridItem instanceof SceneCSSGridItem) {\n const panel = gridItem.state.body;\n if (panel instanceof VizPanel) {\n if (newParser) {\n const index = newNamesField?.values.indexOf(panel.state.title);\n const existingParser = index && index !== -1 ? newParsersField?.values[index] : undefined;\n\n // If a new field filter was added that updated the parsers, we'll need to rebuild the query\n if (existingParser !== newParser) {\n const fieldType = getDetectedFieldType(panel.state.title, detectedFieldsFrame);\n const dataTransformer = this.getQueryRunnerForPanel(\n panel.state.title,\n detectedFieldsFrame,\n fieldType\n );\n panel.setState({\n $data: dataTransformer,\n });\n }\n }\n\n if (newFieldsSet.has(panel.state.title)) {\n // If the new response has this field, delete it from the set, but leave it in the layout\n newFieldsSet.delete(panel.state.title);\n } else {\n // Otherwise if the panel doesn't exist in the response, delete it from the layout\n updatedChildren.splice(i, 1);\n // And make sure to update the index, or we'll skip the next one\n i--;\n }\n } else {\n logger.warn('panel is not VizPanel!');\n }\n } else {\n logger.warn('gridItem is not SceneCSSGridItem');\n }\n }\n\n const fieldsToAdd = Array.from(newFieldsSet);\n const options = fieldsToAdd.map((fieldName) => fieldName);\n\n updatedChildren.push(...this.buildChildren(options));\n updatedChildren.sort(this.sortChildren(cardinalityMap));\n\n updatedChildren.map((child) => {\n this.subscribeToPanel(child);\n });\n\n layout.setState({\n children: updatedChildren,\n });\n } else {\n logger.warn('Layout is not SceneCSSGridLayout');\n }\n });\n }\n\n private sortChildren(cardinalityMap: Map) {\n return (a: SceneCSSGridItem, b: SceneCSSGridItem) => {\n const aPanel = a.state.body as VizPanel;\n const bPanel = b.state.body as VizPanel;\n const aCardinality = cardinalityMap.get(aPanel.state.title) ?? 0;\n const bCardinality = cardinalityMap.get(bPanel.state.title) ?? 0;\n return bCardinality - aCardinality;\n };\n }\n\n private calculateCardinalityMap(newState?: QueryRunnerState) {\n const detectedFieldsFrame = getDetectedFieldsFrameFromQueryRunnerState(newState);\n const cardinalityMap = new Map();\n if (detectedFieldsFrame?.length) {\n for (let i = 0; i < detectedFieldsFrame?.length; i++) {\n const name: string = detectedFieldsFrame.fields[0].values[i];\n const cardinality: number = detectedFieldsFrame.fields[1].values[i];\n cardinalityMap.set(name, cardinality);\n }\n }\n return cardinalityMap;\n }\n\n onActivate() {\n this.setState({\n body: this.build(),\n });\n\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n if (serviceScene.state.fieldsCount === undefined) {\n this.updateFieldCount();\n }\n\n this._subs.add(serviceScene.state.$detectedFieldsData?.subscribeToState(this.onDetectedFieldsChange));\n this._subs.add(this.subscribeToFieldsVar());\n }\n\n private subscribeToFieldsVar() {\n const fieldsVar = getFieldsVariable(this);\n\n return fieldsVar.subscribeToState((newState, prevState) => {\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const newParsers = newState.filters.map((f) => getValueFromFieldsFilter(f).parser);\n const oldParsers = prevState.filters.map((f) => getValueFromFieldsFilter(f).parser);\n\n const newParser = extractParserFromArray(newParsers);\n const oldParser = extractParserFromArray(oldParsers);\n\n if (newParser !== oldParser) {\n const detectedFieldsState = serviceScene.state.$detectedFieldsData?.state;\n if (detectedFieldsState) {\n this.updateChildren(detectedFieldsState, newParser);\n }\n }\n });\n }\n\n public build() {\n const groupByVariable = getFieldGroupByVariable(this);\n const options = groupByVariable.state.options.map((opt) => String(opt.value));\n\n const fieldsBreakdownScene = sceneGraph.getAncestor(this, FieldsBreakdownScene);\n fieldsBreakdownScene.state.search.reset();\n\n const children = this.buildChildren(options);\n\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const cardinalityMap = this.calculateCardinalityMap(serviceScene.state.$detectedFieldsData?.state);\n children.sort(this.sortChildren(cardinalityMap));\n const childrenClones = children.map((child) => child.clone());\n\n // We must subscribe to the data providers for all children after the clone, or we'll see bugs in the row layout\n [...children, ...childrenClones].map((child) => {\n this.subscribeToPanel(child);\n });\n\n return new LayoutSwitcher({\n options: [\n { value: 'grid', label: 'Grid' },\n { value: 'rows', label: 'Rows' },\n ],\n active: 'grid',\n layouts: [\n new SceneCSSGridLayout({\n templateColumns: FIELDS_BREAKDOWN_GRID_TEMPLATE_COLUMNS,\n autoRows: '200px',\n children: children,\n isLazy: true,\n }),\n new SceneCSSGridLayout({\n templateColumns: '1fr',\n autoRows: '200px',\n children: childrenClones,\n isLazy: true,\n }),\n ],\n });\n }\n\n private subscribeToPanel(child: SceneCSSGridItem) {\n const panel = child.state.body as VizPanel | undefined;\n if (panel) {\n this._subs.add(\n panel?.state.$data?.getResultsStream().subscribe((result) => {\n if (result.data.errors && result.data.errors.length > 0) {\n child.setState({ isHidden: true });\n this.updateFieldCount();\n }\n })\n );\n }\n }\n\n public rebuildAvgFields() {\n const detectedFieldsFrame = getDetectedFieldsFrame(this);\n const activeLayout = this.getActiveGridLayouts();\n const children: SceneCSSGridItem[] = [];\n const panelType =\n getPanelOption('panelType', [AvgFieldPanelType.histogram, AvgFieldPanelType.timeseries]) ??\n AvgFieldPanelType.timeseries;\n\n activeLayout?.state.children.forEach((child) => {\n if (child instanceof SceneCSSGridItem && !child.state.isHidden) {\n const panels = sceneGraph.findDescendents(child, VizPanel);\n if (panels.length) {\n // Will only be one panel as a child of CSSGridItem\n const panel = panels[0];\n const labelName = panel.state.title;\n const fieldType = getDetectedFieldType(labelName, detectedFieldsFrame);\n if (isAvgField(fieldType)) {\n const newChild = this.buildChild(labelName, detectedFieldsFrame, panelType);\n if (newChild) {\n children.push(newChild);\n }\n } else {\n children.push(child);\n }\n }\n }\n });\n\n if (children.length) {\n activeLayout?.setState({\n children,\n });\n }\n }\n\n private buildChildren(options: string[]): SceneCSSGridItem[] {\n const children: SceneCSSGridItem[] = [];\n const detectedFieldsFrame = getDetectedFieldsFrame(this);\n const panelType =\n getPanelOption('panelType', [AvgFieldPanelType.timeseries, AvgFieldPanelType.histogram]) ??\n AvgFieldPanelType.timeseries;\n for (const option of options) {\n if (option === ALL_VARIABLE_VALUE || !option) {\n continue;\n }\n\n const child = this.buildChild(option, detectedFieldsFrame, panelType);\n if (child) {\n children.push(child);\n }\n }\n return children;\n }\n\n private buildChild(labelName: string, detectedFieldsFrame: DataFrame | undefined, panelType?: AvgFieldPanelType) {\n if (labelName === ALL_VARIABLE_VALUE || !labelName) {\n return;\n }\n\n const fieldType = getDetectedFieldType(labelName, detectedFieldsFrame);\n const dataTransformer = this.getQueryRunnerForPanel(labelName, detectedFieldsFrame, fieldType);\n let body;\n\n const headerActions = [];\n if (!isAvgField(fieldType)) {\n body = PanelBuilders.timeseries()\n .setTitle(labelName)\n .setData(dataTransformer)\n .setMenu(new PanelMenu({ investigationOptions: { labelName: labelName } }))\n .setCustomFieldConfig('stacking', { mode: StackingMode.Normal })\n .setCustomFieldConfig('fillOpacity', 100)\n .setCustomFieldConfig('lineWidth', 0)\n .setCustomFieldConfig('pointSize', 0)\n .setCustomFieldConfig('drawStyle', DrawStyle.Bars)\n .setOverrides(setLevelColorOverrides);\n headerActions.push(new SelectLabelActionScene({ labelName: String(labelName), fieldType: ValueSlugs.field }));\n } else {\n if (panelType === 'histogram') {\n body = PanelBuilders.histogram();\n } else {\n body = PanelBuilders.timeseries();\n }\n body\n .setTitle(labelName)\n .setData(dataTransformer)\n .setMenu(new PanelMenu({ investigationOptions: { labelName: labelName }, panelType }));\n headerActions.push(\n new SelectLabelActionScene({\n labelName: String(labelName),\n hideValueDrilldown: true,\n fieldType: ValueSlugs.field,\n })\n );\n }\n body.setHeaderActions(headerActions);\n body.setSeriesLimit(MAX_NUMBER_OF_TIME_SERIES);\n body.setShowMenuAlways(true);\n\n const viz = body.build();\n return new SceneCSSGridItem({\n body: viz,\n });\n }\n\n private getQueryRunnerForPanel(\n optionValue: string,\n detectedFieldsFrame: DataFrame | undefined,\n fieldType?: DetectedFieldType\n ) {\n const fieldsVariable = getFieldsVariable(this);\n const queryString = buildFieldsQueryString(optionValue, fieldsVariable, detectedFieldsFrame);\n const query = buildDataQuery(queryString, {\n legendFormat: isAvgField(fieldType) ? optionValue : `{{${optionValue}}}`,\n refId: optionValue,\n });\n\n return getQueryRunner([query]);\n }\n\n private getActiveGridLayouts() {\n return (this.state.body?.state.layouts.find((l) => l.isActive) ?? this.state.body?.state.layouts[0]) as\n | SceneCSSGridLayout\n | undefined;\n }\n\n private updateFieldCount() {\n const activeLayout = this.getActiveGridLayouts();\n const activeLayoutChildren = activeLayout?.state.children as SceneCSSGridItem[] | undefined;\n const activePanels = activeLayoutChildren?.filter((child) => !child.state.isHidden);\n\n const fieldsBreakdownScene = sceneGraph.getAncestor(this, FieldsBreakdownScene);\n fieldsBreakdownScene.state.changeFieldCount?.(activePanels?.length ?? 0);\n }\n\n public static Selector({ model }: SceneComponentProps) {\n const { body } = model.useState();\n return <>{body && };\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n const styles = useStyles2(getPanelWrapperStyles);\n if (body) {\n return {body && };\n }\n\n return ;\n };\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { DataFrame, GrafanaTheme2, LoadingState } from '@grafana/data';\nimport {\n QueryRunnerState,\n SceneComponentProps,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n SceneVariableSet,\n VariableDependencyConfig,\n VariableValueOption,\n} from '@grafana/scenes';\nimport { useStyles2 } from '@grafana/ui';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { getSortByPreference } from 'services/store';\nimport { ALL_VARIABLE_VALUE, VAR_FIELD_GROUP_BY, VAR_LABELS } from 'services/variables';\nimport { areArraysEqual } from '../../../services/comparison';\nimport { CustomConstantVariable, CustomConstantVariableState } from '../../../services/CustomConstantVariable';\nimport { navigateToValueBreakdown } from '../../../services/navigate';\nimport { checkPrimaryLabel, getPrimaryLabelFromUrl, ValueSlugs } from '../../../services/routing';\nimport { DEFAULT_SORT_BY } from '../../../services/sorting';\nimport { IndexScene } from '../../IndexScene/IndexScene';\nimport { getDetectedFieldsFrame, ServiceScene } from '../ServiceScene';\nimport { BreakdownSearchReset, BreakdownSearchScene } from './BreakdownSearchScene';\nimport { ByFrameRepeater } from './ByFrameRepeater';\nimport { FieldsAggregatedBreakdownScene } from './FieldsAggregatedBreakdownScene';\nimport { FieldSelector } from './FieldSelector';\nimport { FieldValuesBreakdownScene } from './FieldValuesBreakdownScene';\nimport { LayoutSwitcher } from './LayoutSwitcher';\nimport { SortByScene, SortCriteriaChanged } from './SortByScene';\nimport { StatusWrapper } from './StatusWrapper';\nimport { getFieldOptions } from 'services/filters';\nimport { EmptyLayoutScene } from './EmptyLayoutScene';\nimport { getFieldGroupByVariable, getLabelsVariable } from '../../../services/variableGetters';\nimport { NoMatchingLabelsScene } from './NoMatchingLabelsScene';\nimport { clearVariables, getVariablesThatCanBeCleared } from '../../../services/variableHelpers';\n\nexport const averageFields = ['duration', 'count', 'total', 'bytes'];\nexport const FIELDS_BREAKDOWN_GRID_TEMPLATE_COLUMNS = 'repeat(auto-fit, minmax(400px, 1fr))';\n\nexport interface FieldsBreakdownSceneState extends SceneObjectState {\n body?:\n | (NoMatchingLabelsScene & SceneObject)\n | (FieldsAggregatedBreakdownScene & SceneObject)\n | (FieldValuesBreakdownScene & SceneObject)\n | (EmptyLayoutScene & SceneObject);\n search: BreakdownSearchScene;\n sort: SortByScene;\n value?: string;\n loading?: boolean;\n error?: string;\n blockingMessage?: string;\n changeFieldCount?: (n: number) => void;\n}\n\nexport class FieldsBreakdownScene extends SceneObjectBase {\n protected _variableDependency = new VariableDependencyConfig(this, {\n variableNames: [VAR_LABELS],\n });\n\n constructor(state: Partial & { options?: VariableValueOption[]; value?: string }) {\n super({\n $variables:\n state.$variables ??\n new SceneVariableSet({\n variables: [\n new CustomConstantVariable({\n name: VAR_FIELD_GROUP_BY,\n defaultToAll: false,\n includeAll: true,\n value: state.value ?? ALL_VARIABLE_VALUE,\n options: state.options ?? [],\n }),\n ],\n }),\n loading: true,\n sort: new SortByScene({ target: 'fields' }),\n search: new BreakdownSearchScene('fields'),\n value: state.value ?? ALL_VARIABLE_VALUE,\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n private onActivate() {\n const groupByVariable = getFieldGroupByVariable(this);\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n\n this.setState({\n loading: serviceScene.state.$detectedLabelsData?.state.data?.state !== LoadingState.Done,\n });\n\n // Subscriptions\n this._subs.add(\n this.subscribeToEvent(BreakdownSearchReset, () => {\n this.state.search.clearValueFilter();\n })\n );\n this._subs.add(this.subscribeToEvent(SortCriteriaChanged, this.handleSortByChange));\n this._subs.add(groupByVariable.subscribeToState(this.variableChanged));\n\n this._subs.add(\n getLabelsVariable(this).subscribeToState((newState, prevState) => {\n const variable = getFieldGroupByVariable(this);\n let { labelName } = getPrimaryLabelFromUrl();\n\n const newService = newState.filters.find((filter) => filter.key === labelName);\n const prevService = prevState.filters.find((filter) => filter.key === labelName);\n\n // If the user changes the primary label\n if (variable.state.value === ALL_VARIABLE_VALUE && newService !== prevService) {\n this.setState({\n loading: true,\n body: undefined,\n });\n }\n })\n );\n\n this._subs.add(\n serviceScene.state.$detectedFieldsData?.subscribeToState(\n (newState: QueryRunnerState, oldState: QueryRunnerState) => {\n if (newState.data?.state === LoadingState.Done) {\n if (newState.data.series?.[0]) {\n this.updateOptions(newState.data.series?.[0]);\n }\n }\n }\n )\n );\n\n const detectedFieldsFrame = getDetectedFieldsFrame(this);\n // Need to update labels with current state\n if (detectedFieldsFrame) {\n this.updateOptions(detectedFieldsFrame);\n }\n\n checkPrimaryLabel(this);\n }\n\n private variableChanged = (newState: CustomConstantVariableState, oldState: CustomConstantVariableState) => {\n if (\n newState.value !== oldState.value ||\n !areArraysEqual(newState.options, oldState.options) ||\n this.state.body === undefined ||\n this.state.body instanceof EmptyLayoutScene ||\n this.state.body instanceof NoMatchingLabelsScene\n ) {\n this.updateBody(newState);\n }\n };\n\n private updateOptions(dataFrame: DataFrame) {\n if (!dataFrame || !dataFrame.length) {\n const indexScene = sceneGraph.getAncestor(this, IndexScene);\n const variablesToClear = getVariablesThatCanBeCleared(indexScene);\n\n let body;\n if (variablesToClear.length > 1) {\n this.state.changeFieldCount?.(0);\n body = new NoMatchingLabelsScene({ clearCallback: () => clearVariables(this) });\n } else {\n body = new EmptyLayoutScene({ type: 'fields' });\n }\n this.setState({\n loading: false,\n body,\n });\n return;\n }\n\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const variable = getFieldGroupByVariable(this);\n variable.setState({\n options: getFieldOptions(dataFrame.fields[0].values.map((v) => String(v))),\n loading: false,\n value: serviceScene.state.drillDownLabel ?? ALL_VARIABLE_VALUE,\n });\n this.setState({\n loading: false,\n });\n }\n\n private handleSortByChange = (event: SortCriteriaChanged) => {\n if (event.target !== 'fields') {\n return;\n }\n\n const body = this.state.body;\n if (body instanceof FieldValuesBreakdownScene && body.state.body instanceof LayoutSwitcher) {\n body.state.body?.state.layouts.forEach((layout) => {\n const byFrameRepeater = sceneGraph.findDescendents(body, ByFrameRepeater);\n byFrameRepeater.forEach((r) => r.sort(event.sortBy, event.direction));\n });\n }\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.value_breakdown_sort_change,\n {\n target: 'fields',\n criteria: event.sortBy,\n direction: event.direction,\n }\n );\n };\n\n private updateBody(newState: CustomConstantVariableState) {\n const fieldsVariable = getFieldGroupByVariable(this);\n\n // We get the labels from the service scene, if we don't have them yet, assume we're loading\n if (!fieldsVariable.state.options || !fieldsVariable.state.options.length) {\n return;\n }\n\n const stateUpdate: Partial = {};\n\n if (fieldsVariable.state.options && fieldsVariable.state.options.length <= 1) {\n // If there's 1 or fewer fields build the empty or clear layout UI\n const indexScene = sceneGraph.getAncestor(this, IndexScene);\n const variablesToClear = getVariablesThatCanBeCleared(indexScene);\n\n if (variablesToClear.length > 1) {\n this.state.changeFieldCount?.(0);\n stateUpdate.body = new NoMatchingLabelsScene({ clearCallback: () => clearVariables(this) });\n } else {\n stateUpdate.body = new EmptyLayoutScene({ type: 'fields' });\n }\n } else {\n // Otherwise update the body, but don't re-instantiate if it's already the right class\n if (newState.value === ALL_VARIABLE_VALUE && this.state.body instanceof FieldValuesBreakdownScene) {\n stateUpdate.body = new FieldsAggregatedBreakdownScene({});\n } else if (newState.value !== ALL_VARIABLE_VALUE && this.state.body instanceof FieldsAggregatedBreakdownScene) {\n stateUpdate.body = new FieldValuesBreakdownScene({});\n } else if (\n // If the body hasn't been created, or the no-data views are active, we want to replace and render the correct scene\n this.state.body === undefined ||\n this.state.body instanceof EmptyLayoutScene ||\n this.state.body instanceof NoMatchingLabelsScene\n ) {\n stateUpdate.body =\n newState.value === ALL_VARIABLE_VALUE\n ? new FieldsAggregatedBreakdownScene({})\n : new FieldValuesBreakdownScene({});\n }\n }\n\n this.setState(stateUpdate);\n }\n public onFieldSelectorChange = (value?: string) => {\n if (!value) {\n return;\n }\n\n const variable = getFieldGroupByVariable(this);\n const { sortBy, direction } = getSortByPreference('fields', DEFAULT_SORT_BY, 'desc');\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.select_field_in_breakdown_clicked,\n {\n field: value,\n previousField: variable.getValueText(),\n view: 'fields',\n sortBy,\n sortByDirection: direction,\n }\n );\n\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n navigateToValueBreakdown(ValueSlugs.field, value, serviceScene);\n };\n\n public static LabelsMenu = ({ model }: SceneComponentProps) => {\n const { body, loading, search } = model.useState();\n const styles = useStyles2(getStyles);\n const variable = getFieldGroupByVariable(model);\n const { options, value } = variable.useState();\n return (\n
\n {body instanceof FieldsAggregatedBreakdownScene && }\n {body instanceof FieldValuesBreakdownScene && }\n {body instanceof FieldValuesBreakdownScene && }\n {!loading && options.length > 1 && (\n \n )}\n
\n );\n };\n public static ValuesMenu = ({ model }: SceneComponentProps) => {\n const { loading, sort } = model.useState();\n const styles = useStyles2(getStyles);\n const variable = getFieldGroupByVariable(model);\n const { value } = variable.useState();\n return (\n
\n {!loading && value !== ALL_VARIABLE_VALUE && (\n <>\n \n \n )}\n
\n );\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body, loading, blockingMessage } = model.useState();\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n {body instanceof FieldsAggregatedBreakdownScene && model && }\n
{body && }
\n
\n
\n );\n };\n}\n\nexport const emptyStateStyles = {\n link: css({\n textDecoration: 'underline',\n }),\n button: css({\n marginLeft: '1.5rem',\n }),\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n minHeight: '100%',\n flexDirection: 'column',\n gap: theme.spacing(1),\n }),\n content: css({\n flexGrow: 1,\n display: 'flex',\n paddingTop: theme.spacing(0),\n }),\n labelsMenuWrapper: css({\n flexGrow: 0,\n display: 'flex',\n alignItems: 'top',\n justifyContent: 'space-between',\n flexDirection: 'row-reverse',\n gap: theme.spacing(2),\n }),\n valuesMenuWrapper: css({\n flexGrow: 0,\n display: 'flex',\n alignItems: 'top',\n gap: theme.spacing(2),\n flexDirection: 'row',\n }),\n };\n}\n","import {\n PanelBuilders,\n SceneComponentProps,\n SceneCSSGridItem,\n SceneCSSGridLayout,\n SceneDataProvider,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneQueryRunner,\n VariableValueOption,\n VizPanel,\n} from '@grafana/scenes';\nimport { LayoutSwitcher } from './LayoutSwitcher';\nimport { DrawStyle, LoadingPlaceholder, StackingMode, useStyles2 } from '@grafana/ui';\nimport { getQueryRunner, setLevelColorOverrides } from '../../../services/panel';\nimport { ALL_VARIABLE_VALUE, LEVEL_VARIABLE_VALUE } from '../../../services/variables';\nimport React from 'react';\nimport { LabelBreakdownScene } from './LabelBreakdownScene';\nimport { SelectLabelActionScene } from './SelectLabelActionScene';\nimport { ValueSlugs } from '../../../services/routing';\nimport { buildLabelsQuery, LABEL_BREAKDOWN_GRID_TEMPLATE_COLUMNS } from '../../../services/labels';\nimport { getFieldsVariable, getLabelGroupByVariable } from '../../../services/variableGetters';\nimport { ServiceScene } from '../ServiceScene';\nimport { DataFrame, LoadingState } from '@grafana/data';\nimport { getPanelWrapperStyles, PanelMenu } from '../../Panels/PanelMenu';\nimport { MAX_NUMBER_OF_TIME_SERIES } from './TimeSeriesLimit';\n\nexport interface LabelsAggregatedBreakdownSceneState extends SceneObjectState {\n body?: LayoutSwitcher;\n}\n\nexport class LabelsAggregatedBreakdownScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onActivate() {\n const fields = getFieldsVariable(this);\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const $detectedLabels = serviceScene.state.$detectedLabelsData;\n\n // If the body hasn't been built yet, build it\n if (!this.state.body) {\n this.setState({\n body: this.build(),\n });\n }\n // Otherwise if we have the detected labels done loading, update the body\n else if ($detectedLabels?.state.data?.state === LoadingState.Done) {\n this.update($detectedLabels?.state.data.series[0]);\n }\n\n this._subs.add(\n $detectedLabels?.subscribeToState((newState, prevState) => {\n if (newState.data?.state === LoadingState.Done) {\n this.update(newState.data.series[0]);\n }\n })\n );\n\n this._subs.add(\n fields.subscribeToState(() => {\n this.updateQueriesOnFieldsVariableChange();\n })\n );\n }\n\n private updateQueriesOnFieldsVariableChange = () => {\n this.state.body?.state.layouts.forEach((layoutObj) => {\n const layout = layoutObj as SceneCSSGridLayout;\n // Iterate through the existing panels\n for (let i = 0; i < layout.state.children.length; i++) {\n const { panel, title } = this.getPanelByIndex(layout, i);\n const queryRunner: SceneDataProvider | SceneQueryRunner | undefined = panel.state.$data;\n const query = buildLabelsQuery(this, title, title);\n\n // Don't update if query didn't change\n if (queryRunner instanceof SceneQueryRunner) {\n if (query.expr === queryRunner?.state.queries?.[0]?.expr) {\n break;\n }\n }\n\n panel.setState({\n $data: getQueryRunner([query]),\n });\n }\n });\n };\n\n private getPanelByIndex(layout: SceneCSSGridLayout, i: number) {\n const gridItem = layout.state.children[i] as SceneCSSGridItem;\n const panel = gridItem.state.body as VizPanel;\n\n const title = panel.state.title;\n return { panel, title };\n }\n\n private update(detectedLabelsFrame: DataFrame) {\n const variable = getLabelGroupByVariable(this);\n const newLabels = variable.state.options.filter((opt) => opt.value !== ALL_VARIABLE_VALUE).map((opt) => opt.label);\n\n this.state.body?.state.layouts.forEach((layoutObj) => {\n let existingLabels = [];\n const layout = layoutObj as SceneCSSGridLayout;\n const newLabelsSet = new Set(newLabels);\n const updatedChildren = layout.state.children as SceneCSSGridItem[];\n\n for (let i = 0; i < updatedChildren.length; i++) {\n const { title } = this.getPanelByIndex(layout, i);\n\n if (newLabelsSet.has(title)) {\n // If the new response has this field, delete it from the set, but leave it in the layout\n newLabelsSet.delete(title);\n } else {\n // Otherwise if the panel doesn't exist in the response, delete it from the layout\n updatedChildren.splice(i, 1);\n // And make sure to update the index, or we'll skip the next one\n i--;\n }\n existingLabels.push(title);\n }\n\n const labelsToAdd = Array.from(newLabelsSet);\n\n const options = labelsToAdd.map((fieldName) => {\n return {\n label: fieldName,\n value: fieldName,\n };\n });\n\n updatedChildren.push(...this.buildChildren(options));\n\n const cardinalityMap = this.calculateCardinalityMap(detectedLabelsFrame);\n updatedChildren.sort(this.sortChildren(cardinalityMap));\n\n layout.setState({\n children: updatedChildren,\n });\n });\n }\n\n private calculateCardinalityMap(detectedLabels?: DataFrame) {\n const cardinalityMap = new Map();\n if (detectedLabels?.length) {\n for (let i = 0; i < detectedLabels?.fields.length; i++) {\n const name: string = detectedLabels.fields[i].name;\n const cardinality: number = detectedLabels.fields[i].values[0];\n cardinalityMap.set(name, cardinality);\n }\n }\n return cardinalityMap;\n }\n\n private build(): LayoutSwitcher {\n const variable = getLabelGroupByVariable(this);\n const labelBreakdownScene = sceneGraph.getAncestor(this, LabelBreakdownScene);\n labelBreakdownScene.state.search.reset();\n\n const children = this.buildChildren(variable.state.options);\n\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const $detectedLabels = serviceScene.state.$detectedLabelsData;\n if ($detectedLabels?.state.data?.state === LoadingState.Done) {\n const cardinalityMap = this.calculateCardinalityMap($detectedLabels?.state.data.series[0]);\n children.sort(this.sortChildren(cardinalityMap));\n }\n\n const childrenClones = children.map((child) => child.clone());\n\n return new LayoutSwitcher({\n options: [\n { value: 'grid', label: 'Grid' },\n { value: 'rows', label: 'Rows' },\n ],\n active: 'grid',\n layouts: [\n new SceneCSSGridLayout({\n isLazy: true,\n templateColumns: LABEL_BREAKDOWN_GRID_TEMPLATE_COLUMNS,\n autoRows: '200px',\n children: children,\n }),\n new SceneCSSGridLayout({\n isLazy: true,\n templateColumns: '1fr',\n autoRows: '200px',\n children: childrenClones,\n }),\n ],\n });\n }\n\n private buildChildren(options: VariableValueOption[]) {\n const children: SceneCSSGridItem[] = [];\n for (const option of options) {\n const { value } = option;\n const optionValue = String(value);\n if (value === ALL_VARIABLE_VALUE || !value) {\n continue;\n }\n const query = buildLabelsQuery(this, String(option.value), String(option.value));\n const queryRunner = getQueryRunner([query]);\n\n children.push(\n new SceneCSSGridItem({\n body: PanelBuilders.timeseries()\n .setTitle(optionValue)\n .setData(queryRunner)\n .setHeaderActions([new SelectLabelActionScene({ labelName: optionValue, fieldType: ValueSlugs.label })])\n .setCustomFieldConfig('stacking', { mode: StackingMode.Normal })\n .setCustomFieldConfig('fillOpacity', 100)\n .setCustomFieldConfig('lineWidth', 0)\n .setCustomFieldConfig('pointSize', 0)\n .setCustomFieldConfig('drawStyle', DrawStyle.Bars)\n .setHoverHeader(false)\n .setShowMenuAlways(true)\n .setOverrides(setLevelColorOverrides)\n .setMenu(new PanelMenu({ investigationOptions: { labelName: optionValue } }))\n .setSeriesLimit(MAX_NUMBER_OF_TIME_SERIES)\n .build(),\n })\n );\n }\n return children;\n }\n\n private sortChildren(cardinalityMap: Map) {\n return (a: SceneCSSGridItem, b: SceneCSSGridItem) => {\n const aPanel = a.state.body as VizPanel;\n const bPanel = b.state.body as VizPanel;\n if (aPanel.state.title === LEVEL_VARIABLE_VALUE) {\n return -1;\n }\n if (bPanel.state.title === LEVEL_VARIABLE_VALUE) {\n return 1;\n }\n const aCardinality = cardinalityMap.get(aPanel.state.title) ?? 0;\n const bCardinality = cardinalityMap.get(bPanel.state.title) ?? 0;\n return bCardinality - aCardinality;\n };\n }\n\n public static Selector({ model }: SceneComponentProps) {\n const { body } = model.useState();\n return <>{body && };\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n const styles = useStyles2(getPanelWrapperStyles);\n\n if (body) {\n return {body && };\n }\n\n return ;\n };\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { AdHocVariableFilter, DataFrame, GrafanaTheme2, LoadingState } from '@grafana/data';\nimport {\n QueryRunnerState,\n SceneComponentProps,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n SceneVariableSet,\n SceneVariableState,\n VariableDependencyConfig,\n VariableValueOption,\n} from '@grafana/scenes';\nimport { Alert, useStyles2 } from '@grafana/ui';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { checkPrimaryLabel, getPrimaryLabelFromUrl, ValueSlugs } from 'services/routing';\nimport { ALL_VARIABLE_VALUE, SERVICE_NAME, SERVICE_UI_LABEL, VAR_LABEL_GROUP_BY, VAR_LABELS } from 'services/variables';\nimport { ByFrameRepeater } from './ByFrameRepeater';\nimport { FieldSelector } from './FieldSelector';\nimport { StatusWrapper } from './StatusWrapper';\nimport { getLabelOptions } from 'services/filters';\nimport { BreakdownSearchReset, BreakdownSearchScene } from './BreakdownSearchScene';\nimport { getSortByPreference } from 'services/store';\nimport { SortByScene, SortCriteriaChanged } from './SortByScene';\nimport { getDetectedLabelsFrame, ServiceScene } from '../ServiceScene';\nimport { CustomConstantVariable, CustomConstantVariableState } from '../../../services/CustomConstantVariable';\nimport { navigateToValueBreakdown } from '../../../services/navigate';\nimport { areArraysEqual } from '../../../services/comparison';\nimport { LabelValuesBreakdownScene } from './LabelValuesBreakdownScene';\nimport { LabelsAggregatedBreakdownScene } from './LabelsAggregatedBreakdownScene';\nimport { DEFAULT_SORT_BY } from '../../../services/sorting';\nimport { EmptyLayoutScene } from './EmptyLayoutScene';\nimport { getLabelGroupByVariable, getLabelsVariable } from '../../../services/variableGetters';\n\nexport interface LabelBreakdownSceneState extends SceneObjectState {\n body?: SceneObject;\n search: BreakdownSearchScene;\n sort: SortByScene;\n loading?: boolean;\n error?: boolean;\n blockingMessage?: string;\n // We have to store the value in state because scenes doesn't allow variables that don't have options. We need to hold on to this until the API call getting values is done, and then reset the state\n value?: string;\n}\n\nexport class LabelBreakdownScene extends SceneObjectBase {\n protected _variableDependency = new VariableDependencyConfig(this, {\n variableNames: [VAR_LABELS],\n });\n\n // Labels/options can be passed in when instantiated, but should ONLY exist on the state of the variable\n constructor(state: Partial & { options?: VariableValueOption[]; value?: string }) {\n super({\n ...state,\n $variables:\n state.$variables ??\n new SceneVariableSet({\n variables: [\n new CustomConstantVariable({\n name: VAR_LABEL_GROUP_BY,\n defaultToAll: false,\n includeAll: true,\n value: state.value ?? ALL_VARIABLE_VALUE,\n options: state.options ?? [],\n }),\n ],\n }),\n loading: true,\n sort: new SortByScene({ target: 'labels' }),\n search: new BreakdownSearchScene('labels'),\n value: state.value,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n private onActivate() {\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const groupByVariable = getLabelGroupByVariable(this);\n\n this.setState({\n loading: serviceScene.state.$detectedLabelsData?.state.data?.state !== LoadingState.Done,\n error: serviceScene.state.$detectedLabelsData?.state.data?.state === LoadingState.Error,\n });\n\n this._subs.add(\n this.subscribeToEvent(BreakdownSearchReset, () => {\n this.state.search.clearValueFilter();\n })\n );\n this._subs.add(this.subscribeToEvent(SortCriteriaChanged, this.handleSortByChange));\n\n this._subs.add(serviceScene.state.$detectedLabelsData?.subscribeToState(this.onDetectedLabelsDataChange));\n\n this._subs.add(\n getLabelsVariable(this).subscribeToState((newState, prevState) => {\n this.onLabelsVariableChange(newState, prevState);\n })\n );\n\n this._subs.add(\n groupByVariable.subscribeToState((newState, prevState) => {\n this.onGroupByVariableChange(newState, prevState);\n })\n );\n\n const detectedLabelsFrame = getDetectedLabelsFrame(this);\n // Need to update labels with current state\n if (detectedLabelsFrame) {\n this.updateOptions(detectedLabelsFrame);\n }\n\n checkPrimaryLabel(this);\n }\n\n private onGroupByVariableChange(newState: CustomConstantVariableState, prevState: CustomConstantVariableState) {\n // If the aggregation value changed, or the body is not yet defined\n if (\n newState.value !== prevState.value ||\n !areArraysEqual(newState.options, prevState.options) ||\n this.state.body === undefined ||\n this.state.body instanceof EmptyLayoutScene\n ) {\n this.updateBody();\n }\n }\n\n private onLabelsVariableChange(\n newState: SceneVariableState & { filters: AdHocVariableFilter[] },\n prevState: SceneVariableState & { filters: AdHocVariableFilter[] }\n ) {\n let { labelName } = getPrimaryLabelFromUrl();\n if (labelName === SERVICE_UI_LABEL) {\n labelName = SERVICE_NAME;\n }\n const variable = getLabelGroupByVariable(this);\n const newPrimaryLabel = newState.filters.find((filter) => filter.key === labelName);\n const prevPrimaryLabel = prevState.filters.find((filter) => filter.key === labelName);\n\n // If the user changes the service\n if (variable.state.value === ALL_VARIABLE_VALUE && newPrimaryLabel !== prevPrimaryLabel) {\n this.setState({\n loading: true,\n body: undefined,\n error: undefined,\n });\n }\n }\n\n /**\n * Pull the detected_labels from our service scene, update the variable when they change\n * @param newState\n * @param prevState\n */\n private onDetectedLabelsDataChange = (newState: QueryRunnerState, prevState: QueryRunnerState) => {\n if (\n newState.data?.state === LoadingState.Done &&\n newState.data.series?.[0] &&\n !areArraysEqual(newState.data.series?.[0]?.fields, prevState.data?.series?.[0]?.fields)\n ) {\n this.updateOptions(newState.data.series?.[0]);\n } else if (newState.data?.state === LoadingState.Done) {\n // we got a new response, but nothing changed, just need to clear loading\n const variable = getLabelGroupByVariable(this);\n variable.setState({\n loading: false,\n });\n }\n };\n\n private handleSortByChange = (event: SortCriteriaChanged) => {\n if (event.target !== 'labels') {\n return;\n }\n const body = this.state.body;\n if (body instanceof LabelValuesBreakdownScene) {\n const byFrameRepeaters = sceneGraph.findDescendents(body, ByFrameRepeater);\n byFrameRepeaters.forEach((layout) => {\n layout.sort(event.sortBy, event.direction);\n });\n }\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.value_breakdown_sort_change,\n {\n target: 'labels',\n criteria: event.sortBy,\n direction: event.direction,\n }\n );\n };\n\n private updateOptions(detectedLabels: DataFrame | undefined) {\n if (!detectedLabels || !detectedLabels.length) {\n this.setState({\n loading: false,\n body: new EmptyLayoutScene({ type: 'labels' }),\n });\n return;\n }\n const variable = getLabelGroupByVariable(this);\n const options = getLabelOptions(detectedLabels.fields.map((label) => label.name));\n\n variable.setState({\n loading: false,\n options,\n value: this.state.value ?? ALL_VARIABLE_VALUE,\n });\n }\n\n private updateBody() {\n const variable = getLabelGroupByVariable(this);\n // We get the labels from the service scene, if we don't have them yet, assume we're loading\n if (!variable.state.options || !variable.state.options.length) {\n return;\n }\n\n const stateUpdate: Partial = {\n loading: false,\n blockingMessage: undefined,\n error: false,\n };\n\n if (variable.hasAllValue() && this.state.body instanceof LabelValuesBreakdownScene) {\n stateUpdate.body = new LabelsAggregatedBreakdownScene({});\n } else if (!variable.hasAllValue() && this.state.body instanceof LabelsAggregatedBreakdownScene) {\n stateUpdate.body = new LabelValuesBreakdownScene({});\n } else if (this.state.body === undefined) {\n if (variable.state.options.length > 0) {\n stateUpdate.body = variable.hasAllValue()\n ? new LabelsAggregatedBreakdownScene({})\n : new LabelValuesBreakdownScene({});\n } else {\n stateUpdate.body = new EmptyLayoutScene({ type: 'labels' });\n }\n } else if (this.state.body instanceof EmptyLayoutScene) {\n if (variable.state.options.length > 0) {\n stateUpdate.body = variable.hasAllValue()\n ? new LabelsAggregatedBreakdownScene({})\n : new LabelValuesBreakdownScene({});\n }\n }\n\n this.setState({ ...stateUpdate });\n }\n\n public onChange = (value?: string) => {\n if (!value) {\n return;\n }\n\n const variable = getLabelGroupByVariable(this);\n variable.changeValueTo(value);\n\n const { sortBy, direction } = getSortByPreference('labels', DEFAULT_SORT_BY, 'desc');\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.select_field_in_breakdown_clicked,\n {\n label: value,\n previousLabel: variable.getValueText(),\n view: 'labels',\n sortBy,\n sortByDirection: direction,\n }\n );\n\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n navigateToValueBreakdown(ValueSlugs.label, value, serviceScene);\n };\n\n public static LabelsMenu = ({ model }: SceneComponentProps) => {\n const { body, loading, search } = model.useState();\n const variable = getLabelGroupByVariable(model);\n const { options, value } = variable.useState();\n const styles = useStyles2(getStyles);\n\n return (\n
\n {body instanceof LabelValuesBreakdownScene && }\n {body instanceof LabelsAggregatedBreakdownScene && }\n {body instanceof LabelValuesBreakdownScene && }\n {!loading && options.length > 0 && (\n \n )}\n
\n );\n };\n\n public static ValuesMenu = ({ model }: SceneComponentProps) => {\n const { loading, sort } = model.useState();\n const variable = getLabelGroupByVariable(model);\n const { value } = variable.useState();\n const styles = useStyles2(getStyles);\n\n return (\n
\n {!loading && value !== ALL_VARIABLE_VALUE && (\n <>\n \n \n )}\n
\n );\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body, loading, blockingMessage, error } = model.useState();\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n {error && (\n \n The labels are not available at this moment. Try using a different time range or check again later.\n \n )}\n\n {body instanceof LabelsAggregatedBreakdownScene && model && }\n\n
{body && }
\n
\n
\n );\n };\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n minHeight: '100%',\n flexDirection: 'column',\n gap: theme.spacing(1),\n }),\n content: css({\n flexGrow: 1,\n display: 'flex',\n paddingTop: theme.spacing(0),\n }),\n labelsMenuWrapper: css({\n flexGrow: 0,\n display: 'flex',\n alignItems: 'top',\n justifyContent: 'space-between',\n flexDirection: 'row-reverse',\n gap: theme.spacing(2),\n }),\n valuesMenuWrapper: css({\n flexGrow: 0,\n display: 'flex',\n alignItems: 'top',\n gap: theme.spacing(2),\n flexDirection: 'row',\n }),\n };\n}\n","import {\n PanelBuilders,\n SceneComponentProps,\n SceneCSSGridLayout,\n SceneDataProvider,\n SceneDataState,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n SceneQueryRunner,\n SceneReactObject,\n} from '@grafana/scenes';\nimport { LayoutSwitcher } from './LayoutSwitcher';\nimport { getLabelValue } from './SortByScene';\nimport { DrawStyle, LoadingPlaceholder, StackingMode, useStyles2 } from '@grafana/ui';\nimport { getQueryRunner, setLevelColorOverrides } from '../../../services/panel';\nimport { getSortByPreference } from '../../../services/store';\nimport { AppEvents, DataQueryError, LoadingState } from '@grafana/data';\nimport { ByFrameRepeater } from './ByFrameRepeater';\nimport { getFilterBreakdownValueScene } from '../../../services/fields';\nimport {\n ALL_VARIABLE_VALUE,\n LEVEL_VARIABLE_VALUE,\n VAR_LABEL_GROUP_BY_EXPR,\n VAR_LABELS,\n VAR_LEVELS,\n} from '../../../services/variables';\nimport React from 'react';\nimport { LabelBreakdownScene } from './LabelBreakdownScene';\nimport { DEFAULT_SORT_BY } from '../../../services/sorting';\nimport { buildLabelsQuery, LABEL_BREAKDOWN_GRID_TEMPLATE_COLUMNS } from '../../../services/labels';\nimport { getAppEvents } from '@grafana/runtime';\nimport {\n getFieldsVariable,\n getLabelGroupByVariable,\n getLabelsVariable,\n getLevelsVariable,\n getLineFiltersVariable,\n getMetadataVariable,\n getPatternsVariable,\n} from '../../../services/variableGetters';\nimport { getPanelWrapperStyles, PanelMenu } from '../../Panels/PanelMenu';\nimport { NoMatchingLabelsScene } from './NoMatchingLabelsScene';\nimport { EmptyLayoutScene } from './EmptyLayoutScene';\nimport { IndexScene } from '../../IndexScene/IndexScene';\nimport { clearVariables, getVariablesThatCanBeCleared } from '../../../services/variableHelpers';\nimport { ValueSummaryPanelScene } from './Panels/ValueSummary';\nimport { renderLevelsFilter, renderLogQLLabelFilters } from '../../../services/query';\nimport { logger } from '../../../services/logger';\nimport { areArraysEqual } from '../../../services/comparison';\n\ntype DisplayError = DataQueryError & { displayed: boolean };\ntype DisplayErrors = Record;\n\nexport interface LabelValueBreakdownSceneState extends SceneObjectState {\n body?: (LayoutSwitcher & SceneObject) | (NoMatchingLabelsScene & SceneObject) | (EmptyLayoutScene & SceneObject);\n $data?: SceneDataProvider;\n errors: DisplayErrors;\n}\n\nexport class LabelValuesBreakdownScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({\n ...state,\n errors: {},\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onActivate() {\n this.setState({\n $data: this.buildQueryRunner(),\n body: this.build(),\n });\n\n // Run query on activate\n this.runQuery();\n this.setSubscriptions();\n }\n\n private buildQueryRunner() {\n const query = this.buildQuery();\n return getQueryRunner([query], { runQueriesMode: 'manual' });\n }\n\n private buildQuery() {\n const query = buildLabelsQuery(this, VAR_LABEL_GROUP_BY_EXPR, String(getLabelGroupByVariable(this).state.value));\n // Manually interpolate query so we don't pollute the variable interpolation for other queries\n const { variableName, filterExpression } = this.removeValueLabelFromVariableInterpolation();\n query.expr = query.expr.replace(`$\\{${variableName}}`, filterExpression);\n return query;\n }\n\n /**\n * Set variable & event subscriptions\n */\n private setSubscriptions() {\n // QUERY RUNNER SUBS\n // Subscribe to value breakdown state\n this._subs.add(\n this.state.$data?.subscribeToState((newState, prevState) => {\n this.onValuesDataQueryChange(newState);\n })\n );\n\n // VARIABLE SUBS\n // Subscribe to label change via dropdown\n this._subs.add(\n getLabelGroupByVariable(this).subscribeToState((newState) => {\n if (newState.value === ALL_VARIABLE_VALUE) {\n this.setState({\n $data: undefined,\n body: undefined,\n });\n }\n })\n );\n\n // Subscribe to time range changes\n this._subs.add(\n sceneGraph.getTimeRange(this).subscribeToState(() => {\n // Run query on time range change\n this.runQuery();\n })\n );\n\n this._subs.add(\n getFieldsVariable(this).subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n // Check to see if the new field filter changes the parser, if so rebuild the query\n this.runQuery();\n }\n })\n );\n\n // Subscribe to fields variable changes\n this._subs.add(\n getMetadataVariable(this).subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.runQuery();\n }\n })\n );\n\n // Subscribe to line filter variable changes\n this._subs.add(\n getLineFiltersVariable(this).subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.runQuery();\n }\n })\n );\n\n // Subscribe to pattern variable changes\n this._subs.add(\n getPatternsVariable(this).subscribeToState((newState, prevState) => {\n if (newState.value !== prevState.value) {\n this.runQuery();\n }\n })\n );\n\n const key = this.getTagKey();\n\n this._subs.add(\n getLabelsVariable(this).subscribeToState(async (newState, prevState) => {\n if (\n !areArraysEqual(\n newState.filters.filter((f) => key === LEVEL_VARIABLE_VALUE && f.key !== key),\n prevState.filters.filter((f) => key === LEVEL_VARIABLE_VALUE && f.key !== key)\n )\n ) {\n this.runQuery();\n }\n })\n );\n\n this._subs.add(\n getLevelsVariable(this).subscribeToState(async (newState, prevState) => {\n if (\n !areArraysEqual(\n newState.filters.filter((f) => key !== LEVEL_VARIABLE_VALUE && f.key !== key),\n prevState.filters.filter((f) => key !== LEVEL_VARIABLE_VALUE && f.key !== key)\n )\n ) {\n this.runQuery();\n }\n })\n );\n }\n\n /**\n * Since we run this query manually, we want to rebuild it before every execution\n */\n private rebuildQuery() {\n // Rebuild the query\n this.getSceneQueryRunner()?.setState({\n queries: [this.buildQuery()],\n });\n }\n\n /**\n * Run the label values breakdown query.\n * Generates the filterExpression excluding all filters with a key that matches the label.\n */\n private runQuery() {\n this.rebuildQuery();\n const queryRunner = this.getSceneQueryRunner();\n queryRunner?.runQueries();\n }\n\n /**\n * Helper method that grabs the SceneQueryRunner for the label value breakdown query.\n */\n private getSceneQueryRunner() {\n if (this.state.$data) {\n const queryRunners = sceneGraph.findDescendents(this.state.$data, SceneQueryRunner);\n if (queryRunners.length !== 1) {\n const error = new Error('Unable to find query runner in value breakdown!');\n logger.error(error, { msg: 'LabelValuesBreakdownScene: Unable to find query runner in value breakdown!' });\n throw error;\n }\n\n return queryRunners[0];\n }\n logger.warn('LabelValuesBreakdownScene: Query is attempting to execute, but query runner is undefined!');\n return undefined;\n }\n\n /**\n * Generates the filterExpression for the label value query and saves it to state.\n * We have to manually generate the filterExpression as we want to exclude every filter for the target variable that matches the key used in this value breakdown.\n * e.g. in the \"cluster\" breakdown, we don't want to execute this query containing a cluster filter, or users will only be able to include a single value.\n */\n private removeValueLabelFromVariableInterpolation() {\n const tagKey = this.getTagKey();\n let filterExpression;\n let variableName: typeof VAR_LEVELS | typeof VAR_LABELS;\n\n if (tagKey === LEVEL_VARIABLE_VALUE) {\n const levelsVar = getLevelsVariable(this);\n variableName = VAR_LEVELS;\n filterExpression = renderLevelsFilter(levelsVar.state.filters, [tagKey]);\n } else {\n const labelsVar = getLabelsVariable(this);\n variableName = VAR_LABELS;\n filterExpression = renderLogQLLabelFilters(labelsVar.state.filters, [tagKey]);\n }\n\n return { filterExpression, variableName };\n }\n\n /**\n * Helper method to get the key/label name from the variable on the parent scene\n */\n private getTagKey() {\n const variable = getLabelGroupByVariable(this);\n return String(variable.state.value);\n }\n\n /**\n * Actions to run when the value breakdown query response is received.\n */\n private onValuesDataQueryChange(newState: SceneDataState) {\n // Set empty states\n this.setEmptyStates(newState);\n\n // Set error states\n this.setErrorStates(newState);\n }\n\n /**\n * Sets the error body state\n */\n private setErrorStates(newState: SceneDataState) {\n // If panels have errors\n if (newState?.data?.errors && newState.data?.state !== LoadingState.Done) {\n const errors: DisplayErrors = this.state.errors;\n newState?.data?.errors.forEach((err) => {\n const errorIndex = `${err.status}_${err.traceId}_${err.message}`;\n if (errors[errorIndex] === undefined) {\n errors[errorIndex] = { ...err, displayed: false };\n }\n });\n this.setState({\n errors,\n });\n\n this.showErrorToast(this.state.errors);\n }\n }\n\n /**\n * Sets the empty body state\n */\n private setEmptyStates(newState: SceneDataState) {\n if (newState.data?.state === LoadingState.Done) {\n if (newState.data.series.length > 0 && !(this.state.body instanceof LayoutSwitcher)) {\n this.setState({\n body: this.build(),\n });\n } else if (newState.data.series.length === 0) {\n const indexScene = sceneGraph.getAncestor(this, IndexScene);\n const variablesToClear = getVariablesThatCanBeCleared(indexScene);\n\n if (variablesToClear.length > 1) {\n this.setState({\n body: new NoMatchingLabelsScene({ clearCallback: () => clearVariables(this) }),\n });\n } else {\n this.setState({\n body: new EmptyLayoutScene({ type: 'fields' }),\n });\n }\n }\n }\n }\n\n /**\n * Returns the active layout from the layout switcher\n */\n private getActiveLayout(): SceneFlexLayout | undefined {\n const layoutSwitcher = this.state.body;\n if (layoutSwitcher instanceof LayoutSwitcher) {\n const activeLayout = layoutSwitcher?.state.layouts.find((layout) => layout.isActive);\n if (activeLayout instanceof SceneFlexLayout) {\n return activeLayout;\n }\n }\n return undefined;\n }\n\n /**\n * Returns a boolean when the active layout is empty\n */\n private activeLayoutContainsNoPanels(): boolean {\n const activeLayout = this.getActiveLayout();\n if (activeLayout) {\n const byFrameRepeaters = sceneGraph.findDescendents(activeLayout, ByFrameRepeater);\n return byFrameRepeaters.some((repeater) => {\n const child = repeater.state.body.state.children[0];\n return child instanceof SceneFlexItem || child instanceof SceneReactObject;\n });\n }\n\n return false;\n }\n\n /**\n * Builds the layout switcher\n */\n private build(): LayoutSwitcher {\n const variable = getLabelGroupByVariable(this);\n const variableState = variable.state;\n const tagKey = String(variableState?.value);\n const labelBreakdownScene = sceneGraph.getAncestor(this, LabelBreakdownScene);\n\n let bodyOpts = PanelBuilders.timeseries();\n bodyOpts = bodyOpts\n .setCustomFieldConfig('stacking', { mode: StackingMode.Normal })\n .setCustomFieldConfig('fillOpacity', 100)\n .setCustomFieldConfig('lineWidth', 0)\n .setCustomFieldConfig('pointSize', 0)\n .setCustomFieldConfig('drawStyle', DrawStyle.Bars)\n .setShowMenuAlways(true)\n .setOverrides(setLevelColorOverrides)\n .setMenu(new PanelMenu({}))\n .setTitle(tagKey);\n\n const body = bodyOpts.build();\n\n const { sortBy, direction } = getSortByPreference('labels', DEFAULT_SORT_BY, 'desc');\n\n const getFilter = () => labelBreakdownScene.state.search.state.filter ?? '';\n\n return new LayoutSwitcher({\n options: [\n { value: 'single', label: 'Single' },\n { value: 'grid', label: 'Grid' },\n { value: 'rows', label: 'Rows' },\n ],\n active: 'grid',\n layouts: [\n new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneReactObject({ reactNode: }),\n new SceneFlexItem({\n minHeight: 300,\n body,\n }),\n ],\n }),\n new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneReactObject({ reactNode: }),\n new ValueSummaryPanelScene({ title: tagKey, levelColor: true, tagKey: this.getTagKey(), type: 'label' }),\n new SceneReactObject({ reactNode: }),\n new ByFrameRepeater({\n body: new SceneCSSGridLayout({\n isLazy: true,\n templateColumns: LABEL_BREAKDOWN_GRID_TEMPLATE_COLUMNS,\n autoRows: '200px',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n reactNode: ,\n }),\n }),\n ],\n }),\n getLayoutChild: getFilterBreakdownValueScene(\n getLabelValue,\n DrawStyle.Bars,\n VAR_LABELS,\n sceneGraph.getAncestor(this, LabelBreakdownScene).state.sort,\n tagKey\n ),\n sortBy,\n direction,\n getFilter,\n }),\n ],\n }),\n new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneReactObject({ reactNode: }),\n new ValueSummaryPanelScene({ title: tagKey, levelColor: true, tagKey: this.getTagKey(), type: 'label' }),\n new SceneReactObject({ reactNode: }),\n new ByFrameRepeater({\n body: new SceneCSSGridLayout({\n templateColumns: '1fr',\n autoRows: '200px',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n reactNode: ,\n }),\n }),\n ],\n }),\n getLayoutChild: getFilterBreakdownValueScene(\n getLabelValue,\n DrawStyle.Bars,\n VAR_LABELS,\n sceneGraph.getAncestor(this, LabelBreakdownScene).state.sort,\n tagKey\n ),\n sortBy,\n direction,\n getFilter,\n }),\n ],\n }),\n ],\n });\n }\n\n private showErrorToast(errors: DisplayErrors) {\n const appEvents = getAppEvents();\n\n // Make sure we only display each error once\n let errorArray: DisplayError[] = [];\n for (const err in errors) {\n const displayError = errors[err];\n if (!displayError.displayed) {\n errorArray.push(displayError);\n displayError.displayed = true;\n }\n }\n\n if (errorArray.length) {\n // If we don't have any panels the error message will replace the loading state, we want to set it as displayed but not render the toast\n if (!this.activeLayoutContainsNoPanels()) {\n appEvents.publish({\n type: AppEvents.alertError.name,\n payload: errorArray?.map((err, key) => this.renderError(key, err)),\n });\n }\n this.setState({\n errors,\n });\n }\n }\n\n private renderError(key: number, err: DataQueryError) {\n return (\n
\n {err.status && (\n <>\n Status: {err.status}
\n \n )}\n {err.message && (\n <>\n Message: {err.message}
\n \n )}\n {err.traceId && (\n <>\n TraceId: {err.traceId}\n \n )}\n
\n );\n }\n\n public static Selector({ model }: SceneComponentProps) {\n const { body } = model.useState();\n return <>{body && body instanceof LayoutSwitcher && };\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n const styles = useStyles2(getPanelWrapperStyles);\n if (body) {\n return {body && };\n }\n\n return ;\n };\n}\n","import React from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { SceneComponentProps, SceneObject, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { Field, RadioButtonGroup, useStyles2 } from '@grafana/ui';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { getDrilldownSlug } from '../../../services/routing';\nimport { css } from '@emotion/css';\nimport { setSceneLayout, getSceneLayout } from 'services/store';\n\nexport interface LayoutSwitcherState extends SceneObjectState {\n active: LayoutType;\n layouts: SceneObject[];\n options: Array>;\n}\n\nexport type LayoutType = 'single' | 'grid' | 'rows';\n\nexport enum LayoutTypeEnum {\n single = 'single',\n grid = 'grid',\n rows = 'rows',\n}\n\nexport class LayoutSwitcher extends SceneObjectBase {\n public static Selector = LayoutSwitcherComponent;\n constructor(state: LayoutSwitcherState) {\n super({\n ...state,\n active: state.active ?? 'grid',\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n public isTopLevelLayoutType = () => {\n // Top layouts do not have 'single' layout type\n const isTopLevel = this.state.options.every((o) => o.value !== LayoutTypeEnum.single);\n return isTopLevel;\n };\n\n public updateLayout = () => {\n const layout = getSceneLayout();\n if (layout) {\n if (layout === LayoutTypeEnum.single && this.isTopLevelLayoutType()) {\n // top level layouts do not have single layout type default to grid\n this.setState({ active: LayoutTypeEnum.grid });\n } else {\n this.setState({\n active:\n layout === LayoutTypeEnum.grid || layout === LayoutTypeEnum.rows || layout === LayoutTypeEnum.single\n ? layout\n : LayoutTypeEnum.grid,\n });\n }\n }\n };\n\n public onLayoutChange = (active: LayoutType) => {\n reportAppInteraction(USER_EVENTS_PAGES.service_details, USER_EVENTS_ACTIONS.service_details.layout_type_changed, {\n layout: active,\n view: getDrilldownSlug(),\n });\n setSceneLayout(active);\n this.setState({ active });\n };\n\n public onActivate = () => {\n this.updateLayout();\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { layouts, options, active } = model.useState();\n\n const index = options.findIndex((o) => o.value === active);\n if (index === -1) {\n return null;\n }\n\n const layout = layouts[index];\n\n return ;\n };\n}\n\nfunction LayoutSwitcherComponent({ model }: { model: LayoutSwitcher }) {\n const { active, options } = model.useState();\n const styles = useStyles2(getStyles);\n\n return (\n \n \n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n field: css({\n marginBottom: 0,\n }),\n };\n};\n","import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { GrotError } from '../../GrotError';\nimport { Alert, Button } from '@grafana/ui';\nimport React from 'react';\nimport { emptyStateStyles } from './FieldsBreakdownScene';\n\nexport interface ClearFiltersLayoutSceneState extends SceneObjectState {\n clearCallback: () => void;\n}\nexport class NoMatchingLabelsScene extends SceneObjectBase {\n public static Component = ({ model }: SceneComponentProps) => {\n const { clearCallback } = model.useState();\n return (\n \n \n No labels match these filters.{' '}\n {' '}\n \n \n );\n };\n}\n","import {\n AdHocFiltersVariable,\n PanelBuilders,\n SceneComponentProps,\n SceneDataProvider,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n VizPanel,\n} from '@grafana/scenes';\nimport { CollapsablePanelText, PanelMenu } from '../../../Panels/PanelMenu';\nimport { DrawStyle, PanelContext, SeriesVisibilityChangeMode, StackingMode } from '@grafana/ui';\nimport {\n setLevelColorOverrides,\n syncFieldsValueSummaryVisibleSeries,\n syncLabelsValueSummaryVisibleSeries,\n syncLevelsVisibleSeries,\n} from '../../../../services/panel';\nimport { getPanelOption, setPanelOption } from '../../../../services/store';\nimport React from 'react';\nimport {\n getFieldsVariable,\n getLabelsVariable,\n getLevelsVariable,\n getMetadataVariable,\n} from '../../../../services/variableGetters';\nimport { toggleLevelFromFilter } from '../../../../services/levels';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../../../services/analytics';\nimport { DataFrame, LoadingState } from '@grafana/data';\nimport { LEVEL_VARIABLE_VALUE } from '../../../../services/variables';\nimport { logger } from '../../../../services/logger';\nimport { FilterType } from '../AddToFiltersButton';\nimport { toggleFieldFromFilter, toggleLabelFromFilter } from '../../../../services/labels';\n\nconst SUMMARY_PANEL_SERIES_LIMIT = 100;\n\ninterface ValueSummaryPanelSceneState extends SceneObjectState {\n body?: SceneFlexLayout;\n title: string;\n levelColor?: boolean;\n tagKey: string;\n type: 'field' | 'label';\n}\nexport class ValueSummaryPanelScene extends SceneObjectBase {\n constructor(state: ValueSummaryPanelSceneState) {\n super(state);\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n if (body) {\n return (\n
\n \n
\n );\n }\n\n return null;\n };\n\n onActivate() {\n const collapsed =\n getPanelOption('collapsed', [CollapsablePanelText.collapsed, CollapsablePanelText.expanded]) ??\n CollapsablePanelText.expanded;\n const viz = buildValueSummaryPanel(this.state.title, { levelColor: this.state.levelColor });\n const height = getValueSummaryHeight(collapsed);\n\n viz.setState({\n extendPanelContext: (_, context) => this.extendTimeSeriesLegendBus(context),\n });\n\n this.setState({\n body: new SceneFlexLayout({\n key: VALUE_SUMMARY_PANEL_KEY,\n minHeight: height,\n height: height,\n maxHeight: height,\n wrap: 'nowrap',\n children: [\n new SceneFlexItem({\n body: viz,\n }),\n ],\n }),\n });\n\n this._subs.add(\n viz.subscribeToState((newState, prevState) => {\n if (newState.collapsed !== prevState.collapsed) {\n const vizPanelFlexLayout = sceneGraph.getAncestor(viz, SceneFlexLayout);\n setValueSummaryHeight(\n vizPanelFlexLayout,\n newState.collapsed ? CollapsablePanelText.collapsed : CollapsablePanelText.expanded\n );\n setPanelOption(\n 'collapsed',\n newState.collapsed ? CollapsablePanelText.collapsed : CollapsablePanelText.expanded\n );\n }\n })\n );\n }\n\n /**\n * Syncs legend with labels\n */\n private extendTimeSeriesLegendBus = (context: PanelContext) => {\n const $data = sceneGraph.getData(this);\n const dataFrame = $data.state.data?.series;\n const key = this.state.tagKey;\n\n const sceneFlexItem = this.state.body?.state.children[0];\n if (!(sceneFlexItem instanceof SceneFlexItem)) {\n throw new Error('Cannot find sceneFlexItem');\n }\n const panel = sceneFlexItem.state.body;\n\n if (!(panel instanceof VizPanel)) {\n throw new Error('Cannot find VizPanel');\n }\n\n this.initLegendOptions(dataFrame, key, panel);\n\n if (this.state.type === 'label') {\n this._subs.add(this.getLabelsVariableLegendSyncSubscription(key));\n } else {\n this._subs.add(this.getFieldsVariableLegendSyncSubscription(key, getFieldsVariable(this)));\n this._subs.add(this.getFieldsVariableLegendSyncSubscription(key, getMetadataVariable(this)));\n }\n\n this._subs.add(this.getQuerySubscription(key, $data, panel));\n\n context.onToggleSeriesVisibility = (value: string, mode: SeriesVisibilityChangeMode) => {\n let action: FilterType;\n if (this.state.type === 'label') {\n if (key === LEVEL_VARIABLE_VALUE) {\n action = toggleLevelFromFilter(value, this);\n } else {\n action = toggleLabelFromFilter(key, value, this);\n }\n } else {\n action = toggleFieldFromFilter(key, value, this);\n }\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.label_in_panel_summary_clicked,\n {\n label: value,\n action,\n }\n );\n };\n };\n\n /**\n * Sync legend with current dataframe\n */\n private initLegendOptions(dataFrame: DataFrame[] | undefined, key: string, panel: VizPanel<{}, {}>) {\n if (dataFrame) {\n if (this.state.type === 'label') {\n if (key === LEVEL_VARIABLE_VALUE) {\n syncLevelsVisibleSeries(panel, dataFrame, this);\n } else {\n syncLabelsValueSummaryVisibleSeries(key, panel, dataFrame, this);\n }\n } else {\n syncFieldsValueSummaryVisibleSeries(key, panel, dataFrame, this);\n }\n }\n }\n\n /**\n * Sync visible series on dataframe update\n */\n private getQuerySubscription(key: string, $data: SceneDataProvider, panel: VizPanel<{}, {}>) {\n return $data.subscribeToState((newState, prevState) => {\n if (newState.data?.state === LoadingState.Done) {\n if (this.state.type === 'label') {\n if (key === LEVEL_VARIABLE_VALUE) {\n syncLevelsVisibleSeries(panel, newState.data.series, this);\n } else {\n syncLabelsValueSummaryVisibleSeries(key, panel, newState.data.series, this);\n }\n } else {\n syncFieldsValueSummaryVisibleSeries(key, panel, newState.data.series, this);\n }\n }\n });\n }\n\n private getFieldsVariableLegendSyncSubscription(key: string, variable: AdHocFiltersVariable) {\n return variable?.subscribeToState(() => {\n const sceneFlexItem = this.state.body?.state.children[0];\n if (!(sceneFlexItem instanceof SceneFlexItem)) {\n throw new Error('Cannot find sceneFlexItem');\n }\n const panel = sceneFlexItem.state.body;\n if (!(panel instanceof VizPanel)) {\n throw new Error('ValueSummary - getFieldsVariableLegendSyncSubscription: Cannot find VizPanel');\n }\n\n const $data = sceneGraph.getData(this);\n const dataFrame = $data.state.data?.series;\n\n if (!dataFrame) {\n logger.warn('ValueSummary - getFieldsVariableLegendSyncSubscription: missing dataframe!');\n return;\n }\n\n syncFieldsValueSummaryVisibleSeries(key, panel, dataFrame, this);\n });\n }\n\n /**\n * Returns value subscription for labels\n */\n private getLabelsVariableLegendSyncSubscription(key: string) {\n const isLevel = key === LEVEL_VARIABLE_VALUE;\n const variable = isLevel ? getLevelsVariable(this) : getLabelsVariable(this);\n return variable?.subscribeToState(() => {\n const sceneFlexItem = this.state.body?.state.children[0];\n if (!(sceneFlexItem instanceof SceneFlexItem)) {\n throw new Error('Cannot find sceneFlexItem');\n }\n const panel = sceneFlexItem.state.body;\n if (!(panel instanceof VizPanel)) {\n throw new Error('ValueSummary - getLabelsVariableLegendSyncSubscription: Cannot find VizPanel');\n }\n\n const $data = sceneGraph.getData(this);\n const dataFrame = $data.state.data?.series;\n\n if (!dataFrame) {\n logger.warn('ValueSummary - getLabelsVariableLegendSyncSubscription: missing dataframe!');\n return;\n }\n\n if (isLevel) {\n syncLevelsVisibleSeries(panel, dataFrame, this);\n } else {\n syncLabelsValueSummaryVisibleSeries(key, panel, dataFrame, this);\n }\n });\n }\n}\n\nexport function setValueSummaryHeight(vizPanelFlexLayout: SceneFlexLayout, collapsableState: CollapsablePanelText) {\n const height = getValueSummaryHeight(collapsableState);\n vizPanelFlexLayout.setState({\n minHeight: height,\n height: height,\n maxHeight: height,\n });\n}\n\nfunction getValueSummaryHeight(collapsableState: CollapsablePanelText) {\n return collapsableState === CollapsablePanelText.collapsed ? 35 : 300;\n}\n\nfunction buildValueSummaryPanel(title: string, options?: { levelColor?: boolean }): VizPanel {\n const collapsed =\n getPanelOption('collapsed', [CollapsablePanelText.collapsed, CollapsablePanelText.expanded]) ??\n CollapsablePanelText.expanded;\n\n const body = PanelBuilders.timeseries()\n .setTitle(title)\n .setMenu(new PanelMenu({}))\n .setCollapsible(true)\n .setCollapsed(collapsed === CollapsablePanelText.collapsed)\n .setCustomFieldConfig('stacking', { mode: StackingMode.Normal })\n .setCustomFieldConfig('fillOpacity', 100)\n .setCustomFieldConfig('lineWidth', 0)\n .setCustomFieldConfig('pointSize', 0)\n .setCustomFieldConfig('drawStyle', DrawStyle.Bars)\n .setShowMenuAlways(true)\n .setSeriesLimit(SUMMARY_PANEL_SERIES_LIMIT);\n\n if (options?.levelColor) {\n body.setOverrides(setLevelColorOverrides);\n }\n return body.build();\n}\n\nexport const VALUE_SUMMARY_PANEL_KEY = 'value_summary_panel';\n","import { css } from '@emotion/css';\nimport { Icon, IconButton, Input, useStyles2 } from '@grafana/ui';\nimport React, { HTMLProps } from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\n\ninterface Props extends Omit, 'width' | 'prefix'> {\n onClear?: () => void;\n suffix?: React.ReactNode;\n prefix?: React.ReactNode;\n}\n\nexport const SearchInput = ({ value, onChange, placeholder, onClear, suffix, ...rest }: Props) => {\n const styles = useStyles2(getStyles);\n return (\n \n {onClear && value ? (\n \n ) : undefined}\n {suffix && suffix}\n \n }\n prefix={}\n placeholder={placeholder}\n {...rest}\n />\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n suffixWrapper: css({\n gap: theme.spacing(0.5),\n display: 'inline-flex',\n }),\n clearIcon: css({\n cursor: 'pointer',\n }),\n});\n","import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { Button, ClickOutsideWrapper, Field, FieldSet, Input, Label, Select, Stack, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { SelectLabelActionScene } from './SelectLabelActionScene';\nimport {\n addNumericFilter,\n removeNumericFilter,\n validateVariableNameForField,\n InterpolatedFilterType,\n} from './AddToFiltersButton';\nimport { FilterOp } from '../../../services/filterTypes';\nimport { getAdHocFiltersVariable, getValueFromFieldsFilter } from '../../../services/variableGetters';\nimport { logger } from '../../../services/logger';\nimport { testIds } from '../../../services/testIds';\n\nexport interface NumericFilterPopoverSceneState extends SceneObjectState {\n labelName: string;\n variableType: InterpolatedFilterType;\n gt?: number;\n gte?: boolean;\n lt?: number;\n lte?: boolean;\n fieldType: 'float' | 'duration' | 'bytes';\n hasExistingFilter?: boolean;\n}\n\nexport type NumericFilterPopoverSceneStateTotal =\n | (NumericFilterPopoverSceneState & FloatTypes)\n | (NumericFilterPopoverSceneState & DurationTypes)\n | (NumericFilterPopoverSceneState & ByteTypes);\n\nenum DisplayDurationUnits {\n ns = 'ns',\n us = 'µs',\n ms = 'ms',\n s = 's',\n m = 'm',\n h = 'h',\n}\n\nexport const validDurationValues: { [key in DisplayDurationUnits]: string[] } = {\n [DisplayDurationUnits.ns]: ['ns'],\n [DisplayDurationUnits.us]: ['µs', 'us'],\n [DisplayDurationUnits.ms]: ['ms'],\n [DisplayDurationUnits.s]: ['s'],\n [DisplayDurationUnits.m]: ['m'],\n [DisplayDurationUnits.h]: ['h'],\n};\n\nenum DisplayByteUnits {\n B = 'B',\n KB = 'KB',\n MB = 'MB',\n GB = 'GB',\n TB = 'TB',\n}\n\nexport enum ValidByteUnitValues {\n B = 'B',\n KB = 'KB',\n MB = 'MB',\n GB = 'GB',\n TB = 'TB',\n\n // Not selectable in the UI, but valid from link extensions\n kB = 'kB',\n KiB = 'KiB',\n MiB = 'MiB',\n GiB = 'GiB',\n TiB = 'TiB',\n}\n\ninterface FloatUnitTypes {\n ltu: '';\n gtu: '';\n}\n\ninterface FloatTypes extends FloatUnitTypes {\n fieldType: 'float';\n}\n\ninterface DurationUnitTypes {\n ltu: DisplayDurationUnits;\n gtu: DisplayDurationUnits;\n}\n\ninterface DurationTypes extends DurationUnitTypes {\n fieldType: 'duration';\n}\n\ninterface ByteUnitTypes {\n ltu: DisplayByteUnits;\n gtu: DisplayByteUnits;\n}\n\ninterface ByteTypes extends ByteUnitTypes {\n fieldType: 'bytes';\n}\n\nexport class NumericFilterPopoverScene extends SceneObjectBase {\n constructor(state: Omit) {\n let units: FloatUnitTypes | DurationUnitTypes | ByteUnitTypes;\n const fieldType: 'float' | 'bytes' | 'duration' = state.fieldType;\n if (fieldType === 'bytes') {\n units = { ltu: DisplayByteUnits.B, gtu: DisplayByteUnits.B };\n } else if (fieldType === 'duration') {\n units = { ltu: DisplayDurationUnits.s, gtu: DisplayDurationUnits.s };\n } else if (fieldType === 'float') {\n units = { ltu: '', gtu: '' };\n } else {\n throw new Error(`field type incorrectly defined: ${fieldType}`);\n }\n\n // @todo - how to avoid type assertion?\n super({ ...state, ...units } as NumericFilterPopoverSceneStateTotal);\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onActivate() {\n // get existing values if they exist\n const variable = getAdHocFiltersVariable(\n validateVariableNameForField(this.state.labelName, this.state.variableType),\n this\n );\n const filters = variable.state.filters.filter((f) => f.key === this.state.labelName);\n const gtFilter = filters.find((f) => f.operator === FilterOp.gte || f.operator === FilterOp.gt);\n const ltFilter = filters.find((f) => f.operator === FilterOp.lte || f.operator === FilterOp.lt);\n let stateUpdate: Partial = {};\n\n if (this.state.fieldType === 'duration' || this.state.fieldType === 'bytes') {\n if (gtFilter) {\n const extractedValue = extractValueFromString(getValueFromFieldsFilter(gtFilter).value, this.state.fieldType);\n\n if (extractedValue) {\n stateUpdate.gt = extractedValue.value;\n stateUpdate.gtu = extractedValue.unit;\n stateUpdate.gte = gtFilter.operator === FilterOp.gte;\n }\n }\n\n if (ltFilter) {\n const extractedValue = extractValueFromString(getValueFromFieldsFilter(ltFilter).value, this.state.fieldType);\n\n if (extractedValue) {\n stateUpdate.lt = extractedValue.value;\n stateUpdate.ltu = extractedValue.unit;\n stateUpdate.lte = ltFilter.operator === FilterOp.lte;\n }\n }\n } else {\n // Floats have no unit\n if (gtFilter) {\n const extractedValue = getValueFromFieldsFilter(gtFilter).value;\n stateUpdate.gt = Number(extractedValue);\n stateUpdate.gtu = '';\n stateUpdate.gte = gtFilter.operator === FilterOp.gte;\n }\n if (ltFilter) {\n const extractedValue = getValueFromFieldsFilter(ltFilter).value;\n stateUpdate.lt = Number(extractedValue);\n stateUpdate.ltu = '';\n stateUpdate.lte = ltFilter.operator === FilterOp.lte;\n }\n }\n\n if (Object.keys(stateUpdate).length !== 0) {\n stateUpdate.hasExistingFilter = true;\n }\n\n this.setState(stateUpdate);\n }\n\n onSubmit() {\n // \"0\" values break byte queries see https://github.com/grafana/loki/issues/14993, for now we remove the filter when a 0 value is entered to prevent breakage\n // numeric values can only be fields or metadata variable\n if (this.state.gt) {\n addNumericFilter(\n this.state.labelName,\n this.state.gt.toString() + this.state.gtu,\n this.state.gte ? FilterOp.gte : FilterOp.gt,\n this,\n this.state.variableType\n );\n } else {\n removeNumericFilter(\n this.state.labelName,\n this,\n this.state.gte ? FilterOp.gte : FilterOp.gt,\n this.state.variableType\n );\n }\n\n if (this.state.lt) {\n addNumericFilter(\n this.state.labelName,\n this.state.lt.toString() + this.state.ltu,\n this.state.lte ? FilterOp.lte : FilterOp.lt,\n this,\n this.state.variableType\n );\n } else {\n removeNumericFilter(\n this.state.labelName,\n this,\n this.state.lte ? FilterOp.lte : FilterOp.lt,\n this.state.variableType\n );\n }\n\n const selectLabelActionScene = sceneGraph.getAncestor(this, SelectLabelActionScene);\n selectLabelActionScene.togglePopover();\n }\n onInputKeydown = (e: React.KeyboardEvent) => {\n const formDisabled = this.state.gt === undefined && this.state.lt === undefined;\n if (e.key === 'Enter' && !formDisabled) {\n this.onSubmit();\n }\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const popoverStyles = useStyles2(getPopoverStyles);\n const { labelName, gt, lt, gte, lte, gtu, ltu, fieldType, hasExistingFilter } = model.useState();\n const subTitle = fieldType !== 'float' && fieldType !== labelName ? `(${fieldType})` : undefined;\n\n const selectLabelActionScene = sceneGraph.getAncestor(model, SelectLabelActionScene);\n const formDisabled = gt === undefined && lt === undefined;\n\n return (\n selectLabelActionScene.togglePopover()}>\n \n
\n
\n {labelName} {subTitle}\n
\n\n
\n {/* greater than */}\n
\n \n \n className={popoverStyles.card.inclusiveInput}\n menuShouldPortal={false}\n value={gte !== undefined ? gte.toString() : 'false'}\n options={[\n { label: 'Greater than', value: 'false' },\n { label: 'Greater than or equal', value: 'true' },\n ]}\n onChange={(value) => model.setState({ gte: value.value === 'true' })}\n />\n \n \n {\n model.setState({\n gt: e.currentTarget.value !== '' ? Number(e.currentTarget.value) : undefined,\n });\n }}\n className={popoverStyles.card.numberInput}\n value={gt}\n type={'number'}\n />\n \n {fieldType !== 'float' && (\n \n )}\n
\n\n {/* less than */}\n
\n \n \n className={popoverStyles.card.inclusiveInput}\n menuShouldPortal={false}\n value={lte !== undefined ? lte.toString() : 'false'}\n options={[\n { label: 'Less than', value: 'false' },\n { label: 'Less than or equal', value: 'true' },\n ]}\n onChange={(value) => model.setState({ lte: value.value === 'true' })}\n />\n \n \n \n model.setState({ lt: e.currentTarget.value !== '' ? Number(e.currentTarget.value) : undefined })\n }\n className={popoverStyles.card.numberInput}\n value={lt}\n type={'number'}\n />\n \n {fieldType !== 'float' && (\n \n )}\n
\n
\n\n {/* buttons */}\n
\n {hasExistingFilter && (\n {\n model.setState({\n gt: undefined,\n lt: undefined,\n });\n model.onSubmit();\n }}\n size={'sm'}\n variant={'destructive'}\n fill={'outline'}\n >\n Remove\n \n )}\n model.onSubmit()}\n size={'sm'}\n variant={'primary'}\n fill={'outline'}\n type={'submit'}\n >\n Add\n \n\n selectLabelActionScene.togglePopover()}\n size={'sm'}\n variant={'secondary'}\n fill={'outline'}\n >\n Cancel\n \n
\n
\n
\n
\n );\n };\n}\n\nexport function extractValueFromString(\n inputString: string,\n inputType: 'bytes' | 'duration'\n): { value: number; unit: DisplayByteUnits | DisplayDurationUnits } | undefined {\n if (inputType === 'duration') {\n const durationValues = Object.values(DisplayDurationUnits);\n\n // Check the end of the filter value for a unit that exactly matches\n const durationValue = durationValues.find((durationValue) => {\n const durationValueLength = durationValue.length;\n return inputString.slice(durationValueLength * -1) === durationValue;\n });\n\n if (durationValue) {\n const value = Number(inputString.replace(durationValue, ''));\n if (!isNaN(value)) {\n return {\n unit: durationValue,\n value: value,\n };\n }\n }\n }\n\n if (inputType === 'bytes') {\n const bytesValues = Object.values(DisplayByteUnits)\n // must be sorted from longest to shortest\n .sort((a, b) => b.length - a.length);\n\n // Check the end of the filter value for a unit that exactly matches\n const bytesValue = bytesValues.find((bytesValue) => {\n const byteValueLength = bytesValue.length;\n return inputString.slice(byteValueLength * -1) === bytesValue;\n });\n\n if (bytesValue) {\n const value = Number(inputString.replace(bytesValue, ''));\n if (!isNaN(value)) {\n return {\n unit: bytesValue,\n value: value,\n };\n }\n }\n }\n\n return undefined;\n}\n\nfunction getUnitOptions(\n fieldType: 'duration' | 'bytes'\n): Array> {\n if (fieldType === 'duration') {\n const keys = Object.keys(DisplayDurationUnits) as Array;\n return keys.map((key) => {\n return {\n text: key,\n value: DisplayDurationUnits[key],\n label: key,\n };\n });\n }\n\n if (fieldType === 'bytes') {\n const keys = Object.keys(DisplayByteUnits) as Array;\n return keys.map((key) => {\n return {\n text: key,\n value: DisplayByteUnits[key],\n label: key,\n };\n });\n }\n\n const error = new Error(`invalid field type: ${fieldType}`);\n logger.error(error, { msg: 'getUnitOptions, invalid field type' });\n throw error;\n}\n\nconst getPopoverStyles = (theme: GrafanaTheme2) => ({\n card: {\n buttons: css({\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'flex-end',\n gap: theme.spacing(1.5),\n marginTop: theme.spacing(1),\n }),\n inclusiveInput: css({\n minWidth: '185px',\n }),\n selectInput: css({\n minWidth: '65px',\n }),\n numberInput: css({\n width: '75px',\n }),\n fieldWrap: css({\n display: 'flex',\n flexDirection: 'column',\n paddingTop: theme.spacing(2),\n paddingBottom: 0,\n }),\n field: css({\n display: 'flex',\n alignItems: 'center',\n marginBottom: theme.spacing(1),\n }),\n inclusiveField: css({\n marginRight: theme.spacing(1),\n }),\n unitFieldLabel: css({\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(1.5),\n }),\n numberFieldLabel: css({\n width: '100px',\n }),\n switchFieldLabel: css({\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(1),\n }),\n fieldset: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n marginBottom: 0,\n }),\n title: css({}),\n body: css({\n padding: theme.spacing(2),\n }),\n p: css({\n maxWidth: 300,\n }),\n },\n});\n","import {\n AdHocFiltersVariable,\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneQueryRunner,\n VizPanel,\n} from '@grafana/scenes';\nimport { getDetectedFieldsFrame, getLogsPanelFrame, ServiceScene } from '../ServiceScene';\nimport { getValueBreakdownLink } from '../../../services/navigate';\nimport { getPrimaryLabelFromUrl, ValueSlugs } from '../../../services/routing';\nimport {\n Button,\n ButtonGroup,\n ButtonSelect,\n IconButton,\n LinkButton,\n Popover,\n PopoverController,\n useStyles2,\n} from '@grafana/ui';\nimport React, { useRef } from 'react';\nimport { addToFilters, clearFilters, InterpolatedFilterType } from './AddToFiltersButton';\nimport { EMPTY_VARIABLE_VALUE, LEVEL_VARIABLE_VALUE, VAR_FIELDS } from '../../../services/variables';\nimport { AdHocVariableFilter, Field, GrafanaTheme2, Labels, LoadingState, SelectableValue } from '@grafana/data';\nimport {\n getFieldsVariable,\n getLabelsVariable,\n getLevelsVariable,\n getValueFromAdHocVariableFilter,\n getValueFromFieldsFilter,\n} from '../../../services/variableGetters';\nimport { FilterOp } from '../../../services/filterTypes';\nimport { LokiQuery } from '../../../services/lokiQuery';\nimport { css } from '@emotion/css';\nimport { rest } from 'lodash';\nimport { NumericFilterPopoverScene } from './NumericFilterPopoverScene';\nimport { getDetectedFieldType } from '../../../services/fields';\nimport { logger } from '../../../services/logger';\nimport { testIds } from '../../../services/testIds';\nimport { findObjectOfType } from '../../../services/scenes';\nimport { syncLevelsVariable } from '../../IndexScene/LevelsVariableScene';\n\ninterface SelectLabelActionSceneState extends SceneObjectState {\n labelName: string;\n fieldType: ValueSlugs;\n hideValueDrilldown?: boolean;\n hasSparseFilters?: boolean;\n hasNumericFilters?: boolean;\n selectedValue?: SelectableValue;\n popover?: NumericFilterPopoverScene;\n showPopover: boolean;\n}\n\nconst INCLUDE_VALUE = 'Include';\nconst EXCLUDE_VALUE = 'Exclude';\nconst NUMERIC_FILTER_VALUE = 'Add to filter';\n\nexport class SelectLabelActionScene extends SceneObjectBase {\n constructor(state: Omit) {\n super({ ...state, showPopover: false });\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onChange(value: SelectableValue) {\n const variable = this.getVariable();\n const variableName = variable.state.name as InterpolatedFilterType;\n const existingFilter = this.getExistingFilter(variable);\n const fieldValue = getValueFromAdHocVariableFilter(variableName, existingFilter);\n const isIncluded = existingFilter?.operator === FilterOp.NotEqual && fieldValue.value === EMPTY_VARIABLE_VALUE;\n\n if (isIncluded && value.value === INCLUDE_VALUE) {\n this.clearFilter(variableName);\n } else if (value.value === INCLUDE_VALUE) {\n this.onClickExcludeEmpty(variableName);\n } else if (value.value === EXCLUDE_VALUE) {\n this.onClickIncludeEmpty(variableName);\n } else if (value.value === NUMERIC_FILTER_VALUE) {\n this.onClickNumericFilter(variableName);\n }\n\n this.setState({\n selectedValue: value,\n });\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const {\n hideValueDrilldown,\n labelName,\n hasSparseFilters,\n hasNumericFilters,\n selectedValue,\n popover,\n showPopover,\n fieldType,\n } = model.useState();\n const variable = model.getVariable();\n const variableName = variable.useState().name as InterpolatedFilterType;\n const existingFilter = model.getExistingFilter(variable);\n const fieldValue = getValueFromAdHocVariableFilter(variableName, existingFilter);\n const styles = useStyles2(getStyles);\n const popoverRef = useRef(null);\n const filterButtonDisabled =\n fieldType === ValueSlugs.label &&\n variable.state.name === VAR_FIELDS &&\n variable.state.filters.filter((f) => f.key !== labelName && f.operator === FilterOp.Equal).length === 0;\n\n const isIncluded = existingFilter?.operator === FilterOp.NotEqual && fieldValue.value === EMPTY_VARIABLE_VALUE;\n const hasOtherFilter = !!existingFilter;\n\n const selectedOptionValue =\n selectedValue?.value ?? (isIncluded ? INCLUDE_VALUE : hasNumericFilters ? NUMERIC_FILTER_VALUE : INCLUDE_VALUE);\n\n const hasExistingNumericFilter = existingFilter?.operator\n ? [FilterOp.gte, FilterOp.gt, FilterOp.lte, FilterOp.lt].includes(existingFilter.operator)\n : false;\n const numericSelected = selectedOptionValue === NUMERIC_FILTER_VALUE || hasExistingNumericFilter;\n const includeSelected = selectedOptionValue === INCLUDE_VALUE && !numericSelected;\n\n const sparseIncludeOption: SelectableValue = {\n value: INCLUDE_VALUE,\n component: () => (\n \n ),\n };\n const sparseExcludeOption: SelectableValue = {\n value: EXCLUDE_VALUE,\n component: () => ,\n };\n const numericFilterOption: SelectableValue = {\n value: NUMERIC_FILTER_VALUE,\n component: () => (\n 30`} />\n ),\n };\n\n const options: Array> = [];\n if (hasNumericFilters) {\n options.push(numericFilterOption);\n }\n\n if (hasSparseFilters) {\n if (!hasExistingNumericFilter) {\n options.push(sparseIncludeOption);\n }\n\n options.push(sparseExcludeOption);\n }\n\n const defaultOption = isIncluded\n ? sparseIncludeOption\n : hasNumericFilters\n ? numericFilterOption\n : sparseIncludeOption;\n\n return (\n <>\n {hasOtherFilter && (\n model.clearFilters(variableName)}\n />\n )}\n {(hasNumericFilters || hasSparseFilters) && (\n <>\n \n model.onChange(selectedValue ?? defaultOption)}\n size={'sm'}\n fill={'outline'}\n variant={'secondary'}\n >\n {selectedValue?.value ?? defaultOption.value}\n \n {\n model.onChange(value);\n }}\n />\n \n \n )}\n {hideValueDrilldown !== true && (\n \n Select\n \n )}\n\n {popover && (\n }>\n {(showPopper, hidePopper, popperProps) => {\n const blurFocusProps = {\n onBlur: hidePopper,\n onFocus: showPopper,\n };\n\n return (\n <>\n {popoverRef.current && (\n <>\n \n \n )}\n \n );\n }}\n \n )}\n \n );\n };\n\n private getExistingFilter(variable?: AdHocFiltersVariable): AdHocVariableFilter | undefined {\n let { labelName } = getPrimaryLabelFromUrl();\n if (this.state.labelName !== labelName) {\n return variable?.state.filters.find((filter) => {\n return filter.key === this.state.labelName;\n });\n }\n\n return undefined;\n }\n\n public onActivate() {\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n\n if (serviceScene.state.$data?.state.data?.state === LoadingState.Done) {\n this.calculateSparsity();\n }\n\n this._subs.add(\n sceneGraph.getData(this).subscribeToState((newState) => {\n if (newState.data?.state === LoadingState.Done) {\n if (serviceScene.state.$data?.state.data?.state === LoadingState.Done) {\n this.calculateSparsity();\n }\n\n this._subs.add(\n serviceScene.state.$data?.subscribeToState((newLogsPanelState) => {\n if (newLogsPanelState.data?.state === LoadingState.Done) {\n this.calculateSparsity();\n }\n })\n );\n }\n })\n );\n }\n\n public onClickNumericFilter = (variableType: InterpolatedFilterType) => {\n const detectedFieldFrame = getDetectedFieldsFrame(this);\n const fieldType = getDetectedFieldType(this.state.labelName, detectedFieldFrame);\n\n if (!fieldType || fieldType === 'string' || fieldType === 'boolean' || fieldType === 'int') {\n const error = new Error(`Incorrect field type: ${fieldType}`);\n logger.error(error, { msg: `onClickNumericFilter invalid field type ${fieldType}` });\n throw error;\n }\n\n this.setState({\n popover: new NumericFilterPopoverScene({ labelName: this.state.labelName, variableType, fieldType }),\n });\n this.togglePopover();\n };\n\n public getViewValuesLink = () => {\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n return getValueBreakdownLink(this.state.fieldType, this.state.labelName, serviceScene);\n };\n\n public onClickExcludeEmpty = (variableType: InterpolatedFilterType) => {\n addToFilters(this.state.labelName, EMPTY_VARIABLE_VALUE, 'exclude', this, variableType);\n };\n\n public onClickIncludeEmpty = (variableType: InterpolatedFilterType) => {\n // If json do we want != '{}'?\n addToFilters(this.state.labelName, EMPTY_VARIABLE_VALUE, 'include', this, variableType);\n };\n\n public clearFilter = (variableType: InterpolatedFilterType) => {\n addToFilters(this.state.labelName, EMPTY_VARIABLE_VALUE, 'clear', this, variableType);\n };\n\n public clearFilters = (variableType: InterpolatedFilterType) => {\n clearFilters(this.state.labelName, this, variableType);\n if (this.state.labelName === LEVEL_VARIABLE_VALUE) {\n syncLevelsVariable(this);\n }\n };\n\n public togglePopover() {\n this.setState({\n showPopover: !this.state.showPopover,\n });\n }\n\n private calculateSparsity() {\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const logsPanelData = getLogsPanelFrame(serviceScene.state.$data?.state.data);\n const labels: Field | undefined = logsPanelData?.fields.find((field) => field.name === 'labels');\n\n const data = sceneGraph.getData(this);\n const queryRunner = findObjectOfType(data, (o) => o instanceof SceneQueryRunner, SceneQueryRunner);\n if (queryRunner) {\n const queries = queryRunner.state.queries;\n const query = queries[0] as LokiQuery | undefined;\n if (query?.expr.includes('avg_over_time')) {\n this.setState({\n hasNumericFilters: true,\n });\n }\n }\n\n if (!labels || !logsPanelData) {\n this.setState({\n hasSparseFilters: false,\n });\n return;\n }\n const variable = this.getVariable();\n // iterate through all the labels on the log panel query result and count how many times this exists\n const logLinesWithLabelCount = labels.values.reduce((acc, labels) => {\n if (labels?.[this.state.labelName]) {\n acc++;\n }\n return acc;\n }, 0);\n\n const panel = sceneGraph.getAncestor(this, VizPanel);\n if (logLinesWithLabelCount !== undefined && logsPanelData.length > 0) {\n const percentage = ((logLinesWithLabelCount / logsPanelData.length) * 100).toLocaleString();\n const description = `${this.state.labelName} exists on ${percentage}% of ${logsPanelData.length} sampled log lines`;\n\n // Update the desc\n panel.setState({\n description,\n });\n } else {\n panel.setState({\n description: undefined,\n });\n }\n\n // Only show for sparse fields and existing include and exclude filters, which will match an empty string in the value\n const existingFilter = this.getExistingFilter(variable);\n const existingFilterValue =\n existingFilter && variable.state.name === VAR_FIELDS ? getValueFromFieldsFilter(existingFilter) : undefined;\n\n if (logLinesWithLabelCount < logsPanelData.length || existingFilterValue?.value === EMPTY_VARIABLE_VALUE) {\n this.setState({\n hasSparseFilters: true,\n });\n } else {\n this.setState({\n hasSparseFilters: false,\n });\n }\n }\n\n private getVariable() {\n if (this.state.fieldType === ValueSlugs.field) {\n return getFieldsVariable(this);\n } else if (this.state.labelName === LEVEL_VARIABLE_VALUE) {\n return getLevelsVariable(this);\n } else {\n return getLabelsVariable(this);\n }\n }\n}\n\nfunction SelectableValueComponent(props: { text: string; selected: boolean }) {\n const styles = useStyles2(getSelectableValueComponentStyles);\n return (\n \n {props.selected && }\n {props.text}\n \n );\n}\n\nconst getSelectableValueComponentStyles = (theme: GrafanaTheme2) => {\n return {\n selected: css({\n label: 'selectable-value-selected',\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n top: '4px',\n height: 'calc(100% - 8px)',\n width: '2px',\n backgroundColor: theme.colors.warning.main,\n },\n }),\n description: css({\n textAlign: 'left',\n fontSize: theme.typography.pxToRem(12),\n }),\n };\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n popover: css({\n borderRadius: theme.shape.radius.default,\n boxShadow: theme.shadows.z3,\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n }),\n description: css({\n textAlign: 'left',\n fontSize: theme.typography.pxToRem(12),\n }),\n buttonSelect: css({\n border: `1px solid ${theme.colors.border.strong}`,\n borderLeft: 'none',\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n padding: 1,\n height: '24px',\n }),\n };\n};\n","import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport React from 'react';\nimport { BusEventBase, DataFrame, FieldReducerInfo, ReducerID, SelectableValue, fieldReducers } from '@grafana/data';\nimport { getLabelValueFromDataFrame } from 'services/levels';\nimport { InlineField, Select } from '@grafana/ui';\nimport { getSortByPreference, setSortByPreference } from 'services/store';\nimport { testIds } from '../../../services/testIds';\nimport { DEFAULT_SORT_BY } from '../../../services/sorting';\n\nexport type SortBy = 'changepoint' | 'outliers' | ReducerID | '';\nexport type SortDirection = 'asc' | 'desc';\nexport interface SortBySceneState extends SceneObjectState {\n target: 'fields' | 'labels';\n sortBy: SortBy;\n direction: SortDirection;\n}\n\nexport class SortCriteriaChanged extends BusEventBase {\n constructor(public target: 'fields' | 'labels', public sortBy: string, public direction: string) {\n super();\n }\n public static type = 'sort-criteria-changed';\n}\n\nexport class SortByScene extends SceneObjectBase {\n public sortingOptions: Array<{ label: string; options: SelectableValue }> = [\n {\n label: '',\n options: [\n {\n value: 'changepoint',\n label: 'Most relevant',\n description: 'Smart ordering of graphs based on the most significant spikes in the data',\n },\n {\n value: 'outliers',\n label: 'Outlying values',\n description: 'Order by the amount of outlying values in the data',\n },\n {\n value: ReducerID.stdDev,\n label: 'Widest spread',\n description: 'Sort graphs by deviation from the average value',\n },\n {\n value: 'alphabetical',\n label: 'Name',\n description: 'Alphabetical order',\n },\n {\n value: ReducerID.sum,\n label: 'Count',\n description: 'Sort graphs by total number of logs',\n },\n {\n value: ReducerID.max,\n label: 'Highest spike',\n description: 'Sort graphs by the highest values (max)',\n },\n {\n value: ReducerID.min,\n label: 'Lowest dip',\n description: 'Sort graphs by the smallest values (min)',\n },\n ],\n },\n {\n label: 'Percentiles',\n options: [...fieldReducers.selectOptions([], filterReducerOptions).options],\n },\n ];\n\n constructor(state: Pick) {\n const { sortBy, direction } = getSortByPreference(state.target, DEFAULT_SORT_BY, 'desc');\n super({\n target: state.target,\n sortBy,\n direction,\n });\n }\n\n public onCriteriaChange = (criteria: SelectableValue) => {\n if (!criteria.value) {\n return;\n }\n this.setState({ sortBy: criteria.value });\n setSortByPreference(this.state.target, criteria.value, this.state.direction);\n this.publishEvent(new SortCriteriaChanged(this.state.target, criteria.value, this.state.direction), true);\n };\n\n public onDirectionChange = (direction: SelectableValue) => {\n if (!direction.value) {\n return;\n }\n this.setState({ direction: direction.value });\n setSortByPreference(this.state.target, this.state.sortBy, direction.value);\n this.publishEvent(new SortCriteriaChanged(this.state.target, this.state.sortBy, direction.value), true);\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { sortBy, direction } = model.useState();\n const group = model.sortingOptions.find((group) =>\n group.options.find((option: SelectableValue) => option.value === sortBy)\n );\n const sortByValue: SelectableValue | undefined = group?.options.find(\n (option: SelectableValue) => option.value === sortBy\n );\n return (\n <>\n \n \n \n \n \n \n \n );\n };\n}\n\nconst ENABLED_PERCENTILES = ['p10', 'p25', 'p75', 'p90', 'p99'];\nfunction filterReducerOptions(ext: FieldReducerInfo) {\n if (ext.id >= 'p1' && ext.id <= 'p99') {\n return ENABLED_PERCENTILES.includes(ext.id);\n }\n return false;\n}\n\nexport function getLabelValue(frame: DataFrame) {\n return getLabelValueFromDataFrame(frame) ?? 'No labels';\n}\n","import { css } from '@emotion/css';\nimport React, { ReactNode } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { LoadingPlaceholder, useStyles2 } from '@grafana/ui';\n\ntype Props = {\n blockingMessage?: string;\n isLoading?: boolean;\n children?: ReactNode;\n};\n\nexport function StatusWrapper({ blockingMessage, isLoading, children }: Props) {\n const styles = useStyles2(getStyles);\n\n if (isLoading && !blockingMessage) {\n blockingMessage = 'Loading...';\n }\n\n if (isLoading) {\n return ;\n }\n\n if (!blockingMessage) {\n return <>{children};\n }\n\n return
{blockingMessage}
;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n statusMessage: css({\n fontStyle: 'italic',\n marginTop: theme.spacing(7),\n textAlign: 'center',\n }),\n };\n}\n","export const MAX_NUMBER_OF_TIME_SERIES = 20;\n","import { GrafanaTheme2 } from '@grafana/data';\n\n// from /grafana/grafana/packages/grafana-ui/src/themes/mixins.ts\nexport function getFocusStyles(theme: GrafanaTheme2) {\n return {\n outline: '2px dotted transparent',\n outlineOffset: '2px',\n boxShadow: `0 0 0 2px ${theme.colors.background.canvas}, 0 0 0px 4px ${theme.colors.primary.main}`,\n transitionTimingFunction: `cubic-bezier(0.19, 1, 0.22, 1)`,\n transitionDuration: '0.2s',\n transitionProperty: 'outline, outline-offset, box-shadow',\n };\n}\n\nexport function getMouseFocusStyles(theme: GrafanaTheme2) {\n return {\n outline: 'none',\n boxShadow: `none`,\n };\n}\n\nexport function getIconButtonBefore(hoverSize: number, theme: GrafanaTheme2) {\n return {\n zIndex: '-1',\n position: 'absolute',\n opacity: '0',\n width: `${hoverSize}px`,\n height: `${hoverSize}px`,\n borderRadius: theme.shape.radius.default,\n content: '\"\"',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transitionDuration: '0.2s',\n transitionTimingFunction: 'cubic-bezier(0.4, 0, 0.2, 1)',\n transitionProperty: 'opacity',\n },\n };\n}\n","import { IconButtonVariant, Tooltip, useTheme2 } from '@grafana/ui';\nimport React from 'react';\nimport { colorManipulator, GrafanaTheme2 } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { getFocusStyles, getIconButtonBefore, getMouseFocusStyles } from '../../../services/mixins';\n\nexport type RegexInputValue = 'regex' | 'match';\ninterface Props {\n onRegexToggle: (state: RegexInputValue) => void;\n regex: boolean;\n}\n\nexport const RegexIconButton = (props: Props) => {\n const theme = useTheme2();\n const fill = props.regex ? theme.colors.text.maxContrast : theme.colors.text.disabled;\n const styles = getStyles(theme);\n const description = `${props.regex ? 'Disable' : 'Enable'} regex`;\n\n return (\n \n props.onRegexToggle(props.regex ? 'match' : 'regex')}\n className={cx(styles.button, props.regex ? styles.active : null)}\n aria-label={description}\n >\n \n \n .*\n \n \n \n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, variant: IconButtonVariant = 'secondary') => {\n const hoverSize = 16 + theme.spacing.gridSize;\n\n return {\n button: css({\n zIndex: 0,\n position: 'relative',\n margin: `0 ${theme.spacing.x0_5} 0 ${theme.spacing.x0_5}`,\n boxShadow: 'none',\n border: 'none',\n display: 'inline-flex',\n background: 'transparent',\n justifyContent: 'center',\n alignItems: 'center',\n padding: 0,\n color: theme.colors.text.primary,\n\n '&:before': {\n ...getIconButtonBefore(hoverSize, theme),\n position: 'absolute',\n },\n\n '&:hover': {\n '&:before': {\n backgroundColor:\n variant === 'secondary'\n ? theme.colors.action.hover\n : colorManipulator.alpha(theme.colors.text.primary, 0.12),\n opacity: 1,\n },\n },\n\n '&:focus, &:focus-visible': getFocusStyles(theme),\n '&:focus:not(:focus-visible)': getMouseFocusStyles(theme),\n }),\n active: css({\n '&:before': {\n backgroundColor:\n variant === 'secondary' ? theme.colors.action.hover : colorManipulator.alpha(theme.colors.text.primary, 0.12),\n opacity: 1,\n },\n '&:hover': {\n '&:before': {\n backgroundColor: 'none',\n opacity: 0,\n },\n },\n }),\n };\n};\n","import { IconButtonVariant, Tooltip, useTheme2 } from '@grafana/ui';\nimport React from 'react';\nimport { colorManipulator, GrafanaTheme2 } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { getFocusStyles, getIconButtonBefore, getMouseFocusStyles } from '../../../services/mixins';\nimport { LineFilterCaseSensitive } from '../../../services/filterTypes';\n\ninterface Props {\n onCaseSensitiveToggle: (state: LineFilterCaseSensitive) => void;\n caseSensitive: boolean;\n}\n\nexport const LineFilterCaseSensitivityButton = (props: Props) => {\n const theme = useTheme2();\n const fill = props.caseSensitive ? theme.colors.text.maxContrast : theme.colors.text.disabled;\n const styles = getStyles(theme);\n const description = `${props.caseSensitive ? 'Disable' : 'Enable'} case match`;\n\n return (\n \n \n props.onCaseSensitiveToggle(\n props.caseSensitive ? LineFilterCaseSensitive.caseInsensitive : LineFilterCaseSensitive.caseSensitive\n )\n }\n className={cx(styles.button, props.caseSensitive ? styles.active : null)}\n aria-label={description}\n >\n \n \n Aa\n \n \n \n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, variant: IconButtonVariant = 'secondary') => {\n const hoverSize = 16 + theme.spacing.gridSize;\n\n return {\n button: css({\n zIndex: 0,\n position: 'relative',\n margin: `0 ${theme.spacing.x0_5} 0 ${theme.spacing.x0_5}`,\n boxShadow: 'none',\n border: 'none',\n display: 'inline-flex',\n background: 'transparent',\n justifyContent: 'center',\n alignItems: 'center',\n padding: 0,\n color: theme.colors.text.primary,\n\n '&:before': {\n ...getIconButtonBefore(hoverSize, theme),\n position: 'absolute',\n },\n\n '&:hover': {\n '&:before': {\n backgroundColor:\n variant === 'secondary'\n ? theme.colors.action.hover\n : colorManipulator.alpha(theme.colors.text.primary, 0.12),\n opacity: 1,\n },\n },\n\n '&:focus, &:focus-visible': getFocusStyles(theme),\n '&:focus:not(:focus-visible)': getMouseFocusStyles(theme),\n }),\n active: css({\n '&:before': {\n backgroundColor:\n variant === 'secondary' ? theme.colors.action.hover : colorManipulator.alpha(theme.colors.text.primary, 0.12),\n opacity: 1,\n },\n '&:hover': {\n '&:before': {\n backgroundColor: 'none',\n opacity: 0,\n },\n },\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { Icon, IconButton, Input, Tooltip, useStyles2 } from '@grafana/ui';\nimport React, { HTMLProps, useCallback, useEffect, useState } from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { narrowErrorMessage } from '../../../services/narrowing';\n\ninterface Props extends Omit, 'width' | 'prefix' | 'invalid' | 'onInvalid'> {\n onClear?: () => void;\n suffix?: React.ReactNode;\n prefix?: React.ReactNode;\n width?: number;\n regex: boolean;\n value: string;\n}\n\nlet re2JS: typeof import('re2js').RE2JS | undefined | null = undefined;\n\nexport const LineFilterInput = ({ value, onChange, placeholder, onClear, suffix, width, regex, ...rest }: Props) => {\n const styles = useStyles2(getStyles);\n const [invalid, setInvalid] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const validate = useCallback(\n (value: string) => {\n // Do we have a value that can be validated? Check this first before attempting to load the package.\n if (!value || !regex) {\n setErrorMessage('');\n setInvalid(false);\n return;\n }\n\n if (re2JS === undefined) {\n load().then(() => validate(value));\n return;\n }\n\n try {\n re2JS?.compile(value);\n setInvalid(false);\n setErrorMessage('');\n } catch (e) {\n const msg = narrowErrorMessage(e);\n setInvalid(true);\n if (msg) {\n setErrorMessage(msg);\n }\n }\n },\n [regex]\n );\n\n useEffect(() => {\n validate(value);\n }, [validate, value]);\n\n return (\n \n \n {onClear && value ? (\n \n ) : undefined}\n {suffix && suffix}\n \n }\n prefix={}\n placeholder={placeholder}\n {...rest}\n />\n \n );\n};\n\nconst load = async () => {\n re2JS = null;\n re2JS = (await import('re2js')).RE2JS;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n suffixWrapper: css({\n gap: theme.spacing(0.5),\n display: 'inline-flex',\n }),\n clearIcon: css({\n cursor: 'pointer',\n }),\n});\n","import React, { useEffect, useState } from 'react';\nimport { RegexIconButton } from './RegexIconButton';\nimport { Button, Field, Select, useStyles2 } from '@grafana/ui';\nimport { testIds } from '../../../services/testIds';\nimport { css, cx } from '@emotion/css';\nimport { LineFilterCaseSensitivityButton } from './LineFilterCaseSensitivityButton';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { LineFilterInput } from '../Breakdowns/LineFilterInput';\nimport { LineFilterProps } from '../../IndexScene/LineFilterVariable';\n\nexport interface LineFilterEditorProps extends LineFilterProps {\n focus: boolean;\n setFocus: (focus: boolean) => void;\n type: 'variable' | 'editor';\n}\n\nconst INITIAL_INPUT_WIDTH = 30;\n\nexport function LineFilterEditor({\n exclusive,\n lineFilter,\n caseSensitive,\n setExclusive,\n regex,\n onInputChange,\n onCaseSensitiveToggle,\n onRegexToggle,\n handleEnter,\n onSubmitLineFilter,\n onClearLineFilter,\n focus,\n setFocus,\n type,\n}: LineFilterEditorProps) {\n const styles = useStyles2((theme) => getStyles(theme, type));\n const [width, setWidth] = useState(INITIAL_INPUT_WIDTH);\n\n function resize(content?: string) {\n // The input width roughly corresponds to char count\n const width = Math.max(content?.length ?? 0, INITIAL_INPUT_WIDTH);\n // We add a few extra because the buttons are absolutely positioned within the input width\n setWidth(width + 9);\n }\n\n useEffect(() => {\n resize(lineFilter);\n }, [lineFilter, focus]);\n\n return (\n
\n {!onSubmitLineFilter && (\n setExclusive(!exclusive)}\n />\n )}\n \n setFocus(true)}\n data-testid={testIds.exploreServiceDetails.searchLogs}\n value={lineFilter ?? ''}\n className={cx(onSubmitLineFilter ? styles.inputNoBorderRight : undefined, styles.input)}\n onChange={onInputChange}\n suffix={\n \n \n \n \n }\n prefix={null}\n placeholder=\"Search in log lines\"\n onClear={onClearLineFilter}\n onKeyUp={(e) => {\n handleEnter(e, lineFilter);\n resize(lineFilter);\n }}\n />\n \n {onSubmitLineFilter && (\n \n {\n setExclusive(false);\n onSubmitLineFilter();\n }}\n className={styles.includeButton}\n variant={'secondary'}\n fill={'outline'}\n disabled={!lineFilter}\n >\n Include\n \n {\n setExclusive(true);\n onSubmitLineFilter();\n }}\n className={styles.excludeButton}\n variant={'secondary'}\n fill={'outline'}\n disabled={!lineFilter}\n >\n Exclude\n \n \n )}\n
\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, type: 'variable' | 'editor') => ({\n inputNoBorderRight: css({\n input: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n }),\n suffix: css({\n display: 'inline-flex',\n gap: theme.spacing(0.5),\n }),\n removeBtn: css({\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }),\n buttonWrap: css({\n display: 'flex',\n justifyContent: 'center',\n }),\n includeButton: css({\n borderLeft: 'none',\n borderRadius: 0,\n borderRight: 'none',\n '&[disabled]': {\n borderRight: 'none',\n },\n }),\n excludeButton: css({\n borderRadius: `0 ${theme.shape.radius.default} ${theme.shape.radius.default} 0`,\n borderLeft: 'none',\n '&[disabled]': {\n borderLeft: 'none',\n },\n }),\n submit: css({\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n }),\n select: css({\n label: 'line-filter-exclusion',\n marginLeft: 0,\n paddingLeft: 0,\n height: 'auto',\n borderBottomRightRadius: '0',\n borderTopRightRadius: '0',\n borderRight: 'none',\n minHeight: '30px',\n minWidth: '95px',\n maxWidth: '95px',\n outline: 'none',\n }),\n wrapper: css({\n display: 'flex',\n width: '100%',\n }),\n input: css({\n label: 'line-filter-input-wrapper',\n minWidth: '200px',\n\n // Keeps the input from overflowing container on resize\n maxWidth: type === 'editor' ? 'calc(100vw - 198px)' : 'calc(100vw - 288px)',\n\n input: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n fontFamily: 'monospace',\n fontSize: theme.typography.bodySmall.fontSize,\n width: '100%',\n },\n }),\n exclusiveBtn: css({\n marginRight: '1rem',\n }),\n field: css({\n label: 'field',\n flex: '0 1 auto',\n marginBottom: 0,\n }),\n});\n","import { css } from '@emotion/css';\nimport { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { Button, InlineField, RadioButtonGroup, Tooltip, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { getLogOption, LogsVisualizationType, setLogOption } from 'services/store';\nimport { LogsListScene } from './LogsListScene';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { LogsPanelHeaderActions } from '../Table/LogsHeaderActions';\nimport { GrafanaTheme2, LogsSortOrder } from '@grafana/data';\nimport { LogsPanelScene } from './LogsPanelScene';\nimport { locationService } from '@grafana/runtime';\nimport { narrowLogsSortOrder } from '../../services/narrowing';\nimport { logger } from '../../services/logger';\n\ninterface LogOptionsState extends SceneObjectState {\n visualizationType: LogsVisualizationType;\n onChangeVisualizationType: (type: LogsVisualizationType) => void;\n}\n\n/**\n * The options rendered in the logs panel header\n */\nexport class LogOptionsScene extends SceneObjectBase {\n static Component = LogOptionsRenderer;\n\n constructor(state: LogOptionsState) {\n super({\n ...state,\n });\n }\n\n handleWrapLinesChange = (type: boolean) => {\n this.getLogsPanelScene().setState({ wrapLogMessage: type });\n setLogOption('wrapLogMessage', type);\n this.getLogsListScene().setLogsVizOption({ wrapLogMessage: type });\n this.getLogsListScene().setLogsVizOption({ prettifyLogMessage: type });\n };\n\n onChangeLogsSortOrder = (sortOrder: LogsSortOrder) => {\n this.getLogsPanelScene().setState({ sortOrder: sortOrder });\n setLogOption('sortOrder', sortOrder);\n this.getLogsListScene().setLogsVizOption({ sortOrder: sortOrder });\n };\n\n getLogsListScene = () => {\n return sceneGraph.getAncestor(this, LogsListScene);\n };\n\n getLogsPanelScene = () => {\n return sceneGraph.getAncestor(this, LogsPanelScene);\n };\n\n clearDisplayedFields = () => {\n const parentScene = this.getLogsListScene();\n parentScene.clearDisplayedFields();\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.logs_clear_displayed_fields\n );\n };\n}\n\nfunction LogOptionsRenderer({ model }: SceneComponentProps) {\n const { onChangeVisualizationType, visualizationType } = model.useState();\n const { wrapLogMessage, sortOrder } = model.getLogsPanelScene().useState();\n const { displayedFields } = model.getLogsListScene().useState();\n const styles = useStyles2(getStyles);\n const wrapLines = wrapLogMessage ?? false;\n\n return (\n
\n {displayedFields.length > 0 && (\n \n \n \n )}\n \n \n \n\n \n \n \n \n
\n );\n}\n\nexport function getLogsPanelSortOrderFromStore() {\n return getLogOption('sortOrder', LogsSortOrder.Descending) as LogsSortOrder;\n}\n\nexport function getLogsPanelSortOrderFromURL() {\n // Since sort order is used to execute queries before the logs panel is instantiated, the scene url state will never influence the query\n // Hacking this for now to manually check the URL search params to override local storage state if set\n const location = locationService.getLocation();\n const search = new URLSearchParams(location.search);\n const sortOrder = search.get('sortOrder');\n\n try {\n if (typeof sortOrder === 'string') {\n const decodedSortOrder = narrowLogsSortOrder(JSON.parse(sortOrder));\n if (decodedSortOrder) {\n return decodedSortOrder;\n }\n }\n } catch (e) {\n // URL Params can be manually changed and it will make JSON.parse() fail.\n logger.error(e, { msg: 'LogOptionsScene(getLogsPanelSortOrderFromURL): unable to parse sortOrder' });\n }\n\n return false;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n marginTop: theme.spacing(0.5),\n }),\n buttonGroupWrapper: css({\n margin: 0,\n alignItems: 'center',\n }),\n});\n","import React, { createContext, ReactNode, useCallback, useContext, useEffect, useState } from 'react';\nimport { ActiveFieldMeta, FieldNameMetaStore } from 'Components/Table/TableTypes';\nimport { getBodyName, getTimeName, LogsFrame } from '../../../services/logsFrame';\nimport { logger } from '../../../services/logger';\n\nimport { PLUGIN_ID } from '../../../services/plugin';\nimport { NarrowingError, narrowRecordStringNumber } from '../../../services/narrowing';\n\nconst tableColumnCustomWidths = `${PLUGIN_ID}.tableColumnWidths`;\n\ntype TableColumnsContextType = {\n // the current list of labels from the dataframe combined with UI metadata\n columns: FieldNameMetaStore;\n // The active search results\n filteredColumns?: FieldNameMetaStore;\n // Update the column state\n setColumns(newColumns: FieldNameMetaStore): void;\n // Update search state\n setFilteredColumns(newColumns?: FieldNameMetaStore): void;\n // WIP - sets the visibility of the drawer right now\n visible: boolean;\n setVisible: (v: boolean) => void;\n bodyState: LogLineState;\n setBodyState: (s: LogLineState) => void;\n clearSelectedLine: () => void;\n setColumnWidthMap(map: Record): void;\n columnWidthMap: Record;\n};\n\nexport enum LogLineState {\n text = 'text',\n labels = 'labels',\n auto = 'auto',\n}\n\nconst TableColumnsContext = createContext({\n columnWidthMap: {},\n setColumnWidthMap: () => {},\n columns: {},\n filteredColumns: {},\n setColumns: () => {},\n setFilteredColumns: () => {},\n setVisible: () => false,\n visible: false,\n bodyState: LogLineState.auto,\n setBodyState: () => {},\n clearSelectedLine: () => {},\n});\n\nfunction setDefaultColumns(\n columns: FieldNameMetaStore,\n handleSetColumns: (newColumns: FieldNameMetaStore) => void,\n logsFrame: LogsFrame\n) {\n const pendingColumns = { ...columns };\n\n pendingColumns[getTimeName(logsFrame)] = {\n index: 0,\n active: true,\n type: 'TIME_FIELD',\n percentOfLinesWithLabel: 100,\n cardinality: Infinity,\n };\n pendingColumns[getBodyName(logsFrame)] = {\n index: 1,\n active: true,\n type: 'BODY_FIELD',\n percentOfLinesWithLabel: 100,\n cardinality: Infinity,\n };\n handleSetColumns(pendingColumns);\n}\n\nfunction getColumnWidthsFromLocalStorage(): Record {\n let initialColumnWidths = {};\n const existingWidths = localStorage.getItem(tableColumnCustomWidths);\n if (existingWidths) {\n try {\n initialColumnWidths = narrowRecordStringNumber(JSON.parse(existingWidths));\n if (initialColumnWidths === false) {\n logger.error(\n new NarrowingError('getColumnWidthsFromLocalStorage: unable to validate values in local storage'),\n { msg: 'NarrowingError: error parsing table column widths from local storage' }\n );\n }\n return initialColumnWidths;\n } catch (e) {\n logger.error(e, { msg: 'error parsing table column widths from local storage' });\n }\n }\n return initialColumnWidths;\n}\n\nexport const TableColumnContextProvider = ({\n children,\n initialColumns,\n logsFrame,\n setUrlColumns,\n clearSelectedLine,\n setUrlTableBodyState,\n urlTableBodyState,\n showColumnManagementDrawer,\n isColumnManagementActive,\n}: {\n children: ReactNode;\n initialColumns: FieldNameMetaStore;\n logsFrame: LogsFrame;\n setUrlColumns: (columns: string[]) => void;\n clearSelectedLine: () => void;\n setUrlTableBodyState: (logLineState: LogLineState) => void;\n urlTableBodyState?: LogLineState;\n showColumnManagementDrawer: (isActive: boolean) => void;\n isColumnManagementActive: boolean;\n}) => {\n const [columns, setColumns] = useState(removeExtraColumns(initialColumns));\n const [bodyState, setBodyState] = useState(urlTableBodyState ?? LogLineState.auto);\n const [filteredColumns, setFilteredColumns] = useState(undefined);\n\n const initialColumnWidths = getColumnWidthsFromLocalStorage();\n const [columnWidthMap, setColumnWidthMapState] = useState>(initialColumnWidths);\n const setColumnWidthMap = (map: Record) => {\n localStorage.setItem(tableColumnCustomWidths, JSON.stringify(map));\n setColumnWidthMapState(map);\n };\n\n const getActiveColumns = (columns: FieldNameMetaStore): string[] => {\n let activeColumns: string[] = [];\n Object.keys(columns).forEach((fieldName) => {\n if (columns[fieldName].active && columns[fieldName].index !== undefined) {\n activeColumns.push(fieldName);\n }\n });\n activeColumns.sort((a, b) => {\n // Typescript doesn't seem to know that the indicies we picked in the loop above are only for ActiveFieldMeta, so we're forced to assert\n const colA: ActiveFieldMeta = columns[a] as ActiveFieldMeta;\n const colB: ActiveFieldMeta = columns[b] as ActiveFieldMeta;\n return colA.index - colB.index;\n });\n return activeColumns;\n };\n\n const handleSetColumns = useCallback(\n (newColumns: FieldNameMetaStore) => {\n if (newColumns) {\n const columns = removeExtraColumns(newColumns);\n\n setColumns(columns);\n\n // Sync react state update with scenes url management\n setUrlColumns(getActiveColumns(columns));\n }\n },\n [setUrlColumns]\n );\n\n const handleSetBodyState = useCallback(\n (logLineState: LogLineState) => {\n setBodyState(logLineState);\n\n // Sync change with url state\n setUrlTableBodyState(logLineState);\n },\n [setUrlTableBodyState]\n );\n\n const handleClearSelectedLine = () => {\n clearSelectedLine();\n };\n\n const handleSetVisible = useCallback(\n (isVisible: boolean) => {\n showColumnManagementDrawer(isVisible);\n },\n [showColumnManagementDrawer]\n );\n\n // When the parent component recalculates new columns on dataframe change, we need to update or the column UI will be stale!\n useEffect(() => {\n if (initialColumns) {\n handleSetColumns(initialColumns);\n }\n }, [initialColumns, handleSetColumns]);\n\n // When the columns are updated, we need to check if nothing is selected so we can set the default\n useEffect(() => {\n const activeColumns = getDefaultColumns(columns, logsFrame);\n if (activeColumns?.length) {\n const activeFields = Object.keys(columns).filter((col) => columns[col].active);\n\n // If we're missing all fields, the user must have removed the last column, let's revert back to the default state\n if (activeFields.length === 0) {\n setDefaultColumns(columns, handleSetColumns, logsFrame);\n }\n\n // Reset any local search state\n setFilteredColumns(undefined);\n }\n }, [columns, logsFrame, setFilteredColumns, handleSetColumns]);\n\n return (\n \n {children}\n \n );\n};\n/**\n * Filter out fields that shouldn't be exposed in the UI\n * @param columns\n */\nconst removeExtraColumns = (columns: FieldNameMetaStore): FieldNameMetaStore => {\n // Remove label Types\n if ('labelTypes' in columns) {\n const { labelTypes, ...columnsToSet }: FieldNameMetaStore = {\n ...columns,\n };\n return columnsToSet;\n }\n return columns;\n};\n\nfunction getDefaultColumns(pendingLabelState: FieldNameMetaStore, logsFrame: LogsFrame) {\n if (!logsFrame) {\n logger.warn('missing dataframe, cannot set url state');\n return;\n }\n // Get all active columns and sort by index\n const newColumnsArray = Object.keys(pendingLabelState)\n // Only include active filters\n .filter((key) => pendingLabelState[key]?.active)\n .sort((a, b) => {\n const pa = pendingLabelState[a];\n const pb = pendingLabelState[b];\n if (pa.index !== undefined && pb.index !== undefined) {\n return pa.index - pb.index; // sort by index\n }\n return 0;\n });\n\n const timeField = logsFrame.timeField;\n const bodyField = logsFrame.bodyField;\n\n if ((timeField && bodyField) || newColumnsArray.length) {\n const defaultColumns = [];\n if (timeField?.name) {\n defaultColumns.push(timeField.name);\n }\n if (bodyField?.name) {\n defaultColumns.push(bodyField.name);\n }\n\n // Update url state\n return newColumnsArray.length ? newColumnsArray : defaultColumns;\n }\n\n return [];\n}\n\nexport const useTableColumnContext = () => {\n return useContext(TableColumnsContext);\n};\n","import React, { createContext, ReactNode, useCallback, useContext, useState } from 'react';\n\nexport type CellIndex = {\n fieldName?: string;\n // If the field contains labels (like log line), we need to know which field (line) and which label (e.g. level)\n subFieldName?: string;\n index: number | null;\n numberOfMenuItems?: number;\n};\n\ntype TableCellContextType = {\n cellIndex: CellIndex;\n setActiveCellIndex(cellIndex: CellIndex): void;\n};\n\nconst TableCellContext = createContext({\n cellIndex: { index: null, numberOfMenuItems: 3 },\n setActiveCellIndex: (cellIndex: CellIndex) => false,\n});\n\nexport const TableCellContextProvider = ({ children }: { children: ReactNode }) => {\n const [cellActive, setCellActive] = useState({ index: null });\n\n const handleCellActive = useCallback((cellIndex: CellIndex) => {\n setCellActive(cellIndex);\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useTableCellContext = () => {\n return useContext(TableCellContext);\n};\n","import React, { createContext, ReactNode, useCallback, useContext, useState } from 'react';\n\ntype TableHeaderContextType = {\n isHeaderMenuActive: boolean;\n setHeaderMenuActive: (isHeaderMenuActive: boolean) => void;\n};\n\nconst TableHeaderContext = createContext({\n isHeaderMenuActive: false,\n setHeaderMenuActive: (isHeaderMenuActive: boolean) => false,\n});\n\nexport const TableHeaderContextProvider = ({ children }: { children: ReactNode }) => {\n const [isHeaderMenuActive, setHeaderMenuActive] = useState(false);\n\n const handleisHeaderMenuActive = useCallback((isHeaderMenuActive: boolean) => {\n setHeaderMenuActive(isHeaderMenuActive);\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useTableHeaderContext = () => {\n return useContext(TableHeaderContext);\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Field, Input, useTheme2 } from '@grafana/ui';\n\nimport { useTableColumnContext } from 'Components/Table/Context/TableColumnsContext';\nimport { FieldNameMetaStore } from 'Components/Table/TableTypes';\nimport { reportInteraction } from '@grafana/runtime';\nimport { debouncedFuzzySearch } from '../../../services/search';\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n searchWrap: css({\n padding: `${theme.spacing(0.4)} 0 ${theme.spacing(0.4)} ${theme.spacing(0.4)}`,\n }),\n };\n}\n\ninterface LogsColumnSearchProps {\n searchValue: string;\n setSearchValue: (value: string) => void;\n}\nexport function LogsColumnSearch({ searchValue, setSearchValue }: LogsColumnSearchProps) {\n const { columns, setFilteredColumns } = useTableColumnContext();\n\n // uFuzzy search dispatcher, adds any matches to the local state\n const dispatcher = (data: string[][]) => {\n const matches = data[0];\n let newColumnsWithMeta: FieldNameMetaStore = {};\n let numberOfResults = 0;\n matches.forEach((match) => {\n if (match in columns) {\n newColumnsWithMeta[match] = columns[match];\n numberOfResults++;\n }\n });\n setFilteredColumns(newColumnsWithMeta);\n searchFilterEvent(numberOfResults);\n };\n\n // uFuzzy search\n const search = (needle: string) => {\n debouncedFuzzySearch(Object.keys(columns), needle, dispatcher);\n };\n\n // onChange handler for search input\n const onSearchInputChange = (e: React.FormEvent) => {\n const value = e.currentTarget?.value;\n setSearchValue(value);\n if (value) {\n search(value);\n } else {\n // If the search input is empty, reset the local search state.\n setFilteredColumns(undefined);\n }\n };\n\n const theme = useTheme2();\n const styles = getStyles(theme);\n return (\n \n \n \n );\n}\n\nfunction searchFilterEvent(searchResultCount: number) {\n reportInteraction('grafana_logs_app_table_text_search_result_count', {\n resultCount: searchResultCount,\n });\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n empty: css({\n marginBottom: theme.spacing(2),\n marginLeft: theme.spacing(1.75),\n fontSize: theme.typography.fontSize,\n }),\n };\n}\n\nexport function LogsTableEmptyFields() {\n const theme = useTheme2();\n const styles = getStyles(theme);\n return
No fields
;\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Checkbox, Icon, useTheme2 } from '@grafana/ui';\n\nimport { FieldNameMeta } from '../TableTypes';\n\nexport function LogsTableNavField(props: {\n label: string;\n onChange: () => void;\n labels: Record;\n draggable?: boolean;\n showCount?: boolean;\n setColumnWidthMap?: (map: Record) => void;\n columnWidthMap?: Record;\n}): React.JSX.Element | null {\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n if (props.labels[props.label]) {\n return (\n <>\n
\n \n {props.showCount && (\n
\n
{props.labels[props.label]?.percentOfLinesWithLabel}%
\n
\n {props.labels[props.label]?.cardinality}{' '}\n {props.labels[props.label]?.cardinality === 1 ? 'value' : 'values'}\n
\n
\n )}\n {props.columnWidthMap && props.setColumnWidthMap && props.columnWidthMap?.[props.label] !== undefined && (\n {\n const { [props.label]: omit, ...map } = { ...props.columnWidthMap };\n props.setColumnWidthMap?.(map);\n }}\n title={'Clear column width override'}\n className={styles.customWidthWrap}\n >\n Reset column width\n \n
\n )}\n \n {props.draggable && (\n \n )}\n \n );\n }\n\n return null;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n dragIcon: css({\n cursor: 'drag',\n marginLeft: theme.spacing(1),\n opacity: 0.4,\n }),\n labelCount: css({\n marginLeft: theme.spacing(0.5),\n marginRight: theme.spacing(0.5),\n appearance: 'none',\n background: 'none',\n border: 'none',\n fontSize: theme.typography.pxToRem(11),\n opacity: 0.6,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'self-end',\n }),\n contentWrap: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n }),\n customWidthWrap: css({\n fontSize: theme.typography.bodySmall.fontSize,\n cursor: 'pointer',\n }),\n // Hide text that overflows, had to select elements within the Checkbox component, so this is a bit fragile\n checkboxLabel: css({\n '> span': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n display: 'block',\n maxWidth: '100%',\n },\n }),\n };\n}\n","import React, { ReactElement } from 'react';\nimport { DragDropContext, Draggable, DraggableProvided, Droppable, DropResult } from '@hello-pangea/dnd';\nimport { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\nimport { FieldNameMeta, FieldNameMetaStore } from '../TableTypes';\n\nimport { LogsTableEmptyFields } from './LogsTableEmptyFields';\nimport { LogsTableNavField } from './LogsTableNavField';\nimport { useTableColumnContext } from 'Components/Table/Context/TableColumnsContext';\n\nexport function getLogsFieldsStyles(theme: GrafanaTheme2) {\n return {\n wrap: css({\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n display: 'flex',\n background: theme.colors.background.primary,\n }),\n dragging: css({\n background: theme.colors.background.secondary,\n }),\n columnWrapper: css({\n marginBottom: theme.spacing(1.5),\n // need some space or the outline of the checkbox is cut off\n paddingLeft: theme.spacing(0.5),\n }),\n };\n}\n\nfunction sortLabels(labels: Record) {\n return (a: string, b: string) => {\n const la = labels[a];\n const lb = labels[b];\n\n // Sort by index\n if (la.index != null && lb.index != null) {\n return la.index - lb.index;\n }\n\n // otherwise do not sort\n return 0;\n };\n}\n\nexport const LogsTableActiveFields = (props: {\n labels: Record;\n valueFilter: (value: string) => boolean;\n toggleColumn: (columnName: string) => void;\n reorderColumn: (cols: FieldNameMetaStore, sourceIndex: number, destinationIndex: number) => void;\n id: string;\n}): ReactElement => {\n const { columnWidthMap, setColumnWidthMap } = useTableColumnContext();\n const { reorderColumn, labels, valueFilter, toggleColumn } = props;\n const theme = useTheme2();\n const { columns } = useTableColumnContext();\n const styles = getLogsFieldsStyles(theme);\n const labelKeys = Object.keys(labels).filter((labelName) => valueFilter(labelName));\n\n const onDragEnd = (result: DropResult) => {\n if (!result.destination) {\n return;\n }\n reorderColumn(columns, result.source.index, result.destination.index);\n };\n\n const renderTitle = (labelName: string) => {\n const label = labels[labelName];\n if (label) {\n return `${labelName} appears in ${label?.percentOfLinesWithLabel}% of log lines`;\n }\n\n return undefined;\n };\n\n if (labelKeys.length) {\n return (\n \n \n {(provided) => (\n
\n {labelKeys.sort(sortLabels(labels)).map((labelName, index) => (\n \n {(provided: DraggableProvided, snapshot) => (\n \n toggleColumn(labelName)}\n labels={labels}\n draggable={true}\n />\n
\n )}\n \n ))}\n {provided.placeholder}\n \n )}\n
\n
\n );\n }\n\n return ;\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\nimport { FieldNameMeta } from '../TableTypes';\n\nimport { LogsTableEmptyFields } from './LogsTableEmptyFields';\nimport { LogsTableNavField } from './LogsTableNavField';\n\nconst collator = new Intl.Collator(undefined, { sensitivity: 'base' });\n\nfunction getLogsFieldsStyles(theme: GrafanaTheme2) {\n return {\n wrap: css({\n marginTop: theme.spacing(0.25),\n marginBottom: theme.spacing(0.25),\n display: 'flex',\n background: theme.colors.background.primary,\n borderBottom: `1px solid ${theme.colors.background.canvas}`,\n }),\n dragging: css({\n background: theme.colors.background.secondary,\n }),\n columnWrapper: css({\n marginBottom: theme.spacing(1.5),\n // need some space or the outline of the checkbox is cut off\n paddingLeft: theme.spacing(0.5),\n }),\n };\n}\n\nfunction sortLabels(labels: Record) {\n return (a: string, b: string) => {\n const la = labels[a];\n const lb = labels[b];\n\n // ...sort by type and alphabetically\n if (la != null && lb != null) {\n return (\n Number(lb.type === 'TIME_FIELD') - Number(la.type === 'TIME_FIELD') ||\n Number(lb.type === 'BODY_FIELD') - Number(la.type === 'BODY_FIELD') ||\n collator.compare(a, b)\n );\n }\n\n // otherwise do not sort\n return 0;\n };\n}\n\nexport const LogsTableAvailableFields = (props: {\n labels: Record;\n valueFilter: (value: string) => boolean;\n toggleColumn: (columnName: string) => void;\n}): React.ReactElement => {\n const { labels, valueFilter, toggleColumn } = props;\n const theme = useTheme2();\n const styles = getLogsFieldsStyles(theme);\n const labelKeys = Object.keys(labels).filter((labelName) => valueFilter(labelName));\n if (labelKeys.length) {\n // Otherwise show list with a hardcoded order\n return (\n
\n {labelKeys.sort(sortLabels(labels)).map((labelName) => (\n \n toggleColumn(labelName)}\n labels={labels}\n />\n
\n ))}\n \n );\n }\n\n return ;\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\nimport { LogsTableActiveFields } from 'Components/Table/ColumnSelection/LogsTableActiveFields';\nimport { LogsTableAvailableFields } from 'Components/Table/ColumnSelection/LogsTableAvailableFields';\n\nimport { FieldNameMeta, FieldNameMetaStore } from '../TableTypes';\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n sidebarWrap: css({\n overflowY: 'scroll',\n height: 'calc(100% - 50px)',\n /* Hide scrollbar for Chrome, Safari, and Opera */\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n /* Hide scrollbar for Firefox */\n scrollbarWidth: 'none',\n }),\n columnHeaderButton: css({\n appearance: 'none',\n background: 'none',\n border: 'none',\n fontSize: theme.typography.pxToRem(11),\n }),\n columnHeader: css({\n display: 'flex',\n justifyContent: 'space-between',\n fontSize: theme.typography.h6.fontSize,\n background: theme.colors.background.secondary,\n position: 'sticky',\n top: 0,\n left: 0,\n paddingTop: theme.spacing(0.75),\n paddingRight: theme.spacing(0.75),\n paddingBottom: theme.spacing(0.75),\n paddingLeft: theme.spacing(1.5),\n zIndex: 3,\n marginBottom: theme.spacing(2),\n }),\n };\n}\n\nexport const LogsTableMultiSelect = (props: {\n toggleColumn: (columnName: string) => void;\n filteredColumnsWithMeta: Record | undefined;\n columnsWithMeta: Record;\n clear: () => void;\n reorderColumn: (cols: FieldNameMetaStore, oldIndex: number, newIndex: number) => void;\n}) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n return (\n
\n {/* Sidebar columns */}\n <>\n
\n Selected fields\n \n
\n props.columnsWithMeta[value]?.active ?? false}\n id={'selected-fields'}\n />\n\n
Fields
\n !props.columnsWithMeta[value]?.active}\n />\n \n
\n );\n};\n","import React, { useState } from 'react';\n\nimport { ClickOutsideWrapper } from '@grafana/ui';\n\nimport { useTableColumnContext } from 'Components/Table/Context/TableColumnsContext';\nimport { LogsColumnSearch } from 'Components/Table/ColumnSelection/LogsColumnSearch';\nimport { LogsTableMultiSelect } from 'Components/Table/ColumnSelection/LogsTableMultiSelect';\n\nimport { FieldNameMetaStore } from '../TableTypes';\nimport { reportInteraction } from '@grafana/runtime';\nimport { logger } from '../../../services/logger';\n\nexport function getReorderColumn(setColumns: (cols: FieldNameMetaStore) => void) {\n return (columns: FieldNameMetaStore, sourceIndex: number, destinationIndex: number) => {\n if (sourceIndex === destinationIndex) {\n return;\n }\n\n const pendingLabelState = { ...columns };\n const keys = Object.keys(pendingLabelState)\n .filter((key) => pendingLabelState[key].active)\n .map((key) => ({\n fieldName: key,\n index: pendingLabelState[key].index ?? 0,\n }))\n .sort((a, b) => a.index - b.index);\n\n const [source] = keys.splice(sourceIndex, 1);\n keys.splice(destinationIndex, 0, source);\n\n keys\n .filter((key) => key !== undefined)\n .forEach((key, index) => {\n pendingLabelState[key.fieldName].index = index;\n });\n\n // Set local state\n setColumns(pendingLabelState);\n };\n}\n\nfunction logError(columnName: string, columns: FieldNameMetaStore) {\n let logContext;\n try {\n logContext = {\n columns: JSON.stringify(columns),\n columnName: columnName,\n };\n } catch (e) {\n logContext = {\n msg: 'Table: ColumnSelectionDrawerWrap failed to encode context',\n columnName: columnName,\n };\n }\n logger.warn('failed to get column', logContext);\n}\n\nexport function ColumnSelectionDrawerWrap() {\n const { columns, setColumns, setVisible, filteredColumns, setFilteredColumns } = useTableColumnContext();\n const [searchValue, setSearchValue] = useState('');\n const toggleColumn = (columnName: string) => {\n if (!columns || !(columnName in columns)) {\n logError(columnName, columns);\n return;\n }\n\n const length = Object.keys(columns).filter((c) => columns[c].active).length;\n const isActive = !columns[columnName].active ? true : undefined;\n\n let pendingLabelState: FieldNameMetaStore;\n if (isActive) {\n pendingLabelState = {\n ...columns,\n [columnName]: {\n ...columns[columnName],\n active: isActive,\n index: length,\n },\n };\n } else {\n pendingLabelState = {\n ...columns,\n [columnName]: {\n ...columns[columnName],\n active: false,\n index: undefined,\n },\n };\n }\n\n // Analytics\n columnFilterEvent(columnName);\n\n // Set local state\n setColumns(pendingLabelState);\n\n // If user is currently filtering, update filtered state\n if (filteredColumns) {\n const active = !filteredColumns[columnName]?.active;\n let pendingFilteredLabelState: FieldNameMetaStore;\n if (active) {\n pendingFilteredLabelState = {\n ...filteredColumns,\n [columnName]: {\n ...filteredColumns[columnName],\n active: active,\n index: length,\n },\n };\n } else {\n pendingFilteredLabelState = {\n ...filteredColumns,\n [columnName]: {\n ...filteredColumns[columnName],\n active: false,\n index: undefined,\n },\n };\n }\n\n setFilteredColumns(pendingFilteredLabelState);\n setSearchValue('');\n }\n };\n\n const reorderColumn = getReorderColumn(setColumns);\n\n const clearSelection = () => {\n const pendingLabelState = { ...columns };\n let index = 0;\n Object.keys(pendingLabelState).forEach((key) => {\n const isDefaultField =\n pendingLabelState[key].type === 'BODY_FIELD' || pendingLabelState[key].type === 'TIME_FIELD';\n // after reset the only active fields are the special time and body fields\n pendingLabelState[key].active = isDefaultField;\n // reset the index\n pendingLabelState[key].index = isDefaultField ? index++ : undefined;\n });\n\n setColumns(pendingLabelState);\n setFilteredColumns(pendingLabelState);\n setSearchValue('');\n };\n\n // Tracking event for filtering columns\n function columnFilterEvent(columnName: string) {\n if (columns) {\n const newState = !columns[columnName]?.active;\n const priorActiveCount = Object.keys(columns).filter((column) => columns[column]?.active)?.length;\n const event = {\n columnAction: newState ? 'add' : 'remove',\n columnCount: newState ? priorActiveCount + 1 : priorActiveCount - 1,\n };\n reportInteraction('grafana_logs_app_table_column_filter_clicked', event);\n }\n }\n\n return (\n {\n setVisible(false);\n setFilteredColumns(columns);\n setSearchValue('');\n }}\n useCapture={true}\n >\n \n \n \n );\n}\n","import React, { PropsWithChildren } from 'react';\nimport { css, cx } from '@emotion/css';\n\nimport { Field, GrafanaTheme2 } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\nimport { useTableCellContext } from 'Components/Table/Context/TableCellContext';\n\ninterface DefaultCellWrapComponentProps {}\n\ninterface Props extends PropsWithChildren {\n rowIndex: number;\n field: Field;\n onClick?: () => void;\n onMouseIn?: () => void;\n onMouseOut?: () => void;\n}\n\nconst getStyles = (theme: GrafanaTheme2, bgColor?: string, numberOfMenuItems?: number) => ({\n active: css({\n // Save 20px for context menu\n height: `calc(${100}% + 36px)`,\n zIndex: theme.zIndex.tooltip,\n background: 'transparent',\n }),\n wrap: css({\n position: 'absolute',\n overflowX: 'hidden',\n whiteSpace: 'nowrap',\n width: '100%',\n height: '100%',\n left: 0,\n top: 0,\n margin: 'auto',\n background: bgColor ?? 'transparent',\n }),\n});\n\nexport const DefaultCellWrapComponent = (props: Props) => {\n return (\n \n {props.children}\n \n );\n};\n\nconst CellWrapInnerComponent = (props: Props) => {\n const theme = useTheme2();\n const cellState = useTableCellContext();\n const styles = getStyles(theme, undefined, cellState.cellIndex?.numberOfMenuItems);\n\n return (\n \n {props.children}\n \n );\n};\n","import React, { createContext, ReactNode, useContext } from 'react';\nimport { LogsFrame } from '../../../services/logsFrame';\nimport { AdHocVariableFilter, TimeRange } from '@grafana/data';\nimport { SelectedTableRow } from '../LogLineCellComponent';\n\nexport type Label = { name: string; values: string[]; indexed: boolean };\n\nexport type QueryContextType = {\n logsFrame: LogsFrame | null;\n addFilter: (filter: AdHocVariableFilter) => void;\n selectedLine?: SelectedTableRow;\n timeRange?: TimeRange;\n};\n\nexport const initialState = {\n logsFrame: null,\n addFilter: (filter: AdHocVariableFilter) => {},\n timeRange: undefined,\n selectedLine: undefined,\n};\n\nexport const QueryContext = createContext(initialState);\n\nexport const QueryContextProvider = ({\n children,\n logsFrame,\n addFilter,\n selectedLine,\n timeRange,\n}: {\n children: ReactNode;\n logsFrame: LogsFrame;\n addFilter: (filter: AdHocVariableFilter) => void;\n selectedLine?: SelectedTableRow;\n timeRange?: TimeRange;\n}) => {\n return (\n \n {children}\n \n );\n};\n\nexport const useQueryContext = () => {\n return useContext(QueryContext);\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { Icon, useTheme2 } from '@grafana/ui';\nimport { useQueryContext } from './Context/QueryContext';\n\nimport { FilterOp } from '../../services/filterTypes';\n\ninterface Props {\n fieldType?: 'derived';\n label: string;\n value: string;\n showColumn?: () => void;\n links?: LinkModel[];\n pillType: 'logPill' | 'column';\n}\n\nconst getStyles = (theme: GrafanaTheme2, pillType: 'logPill' | 'column') => ({\n menu: css({\n position: 'relative',\n paddingRight: '5px',\n display: 'flex',\n minWidth: '60px',\n justifyContent: 'flex-start',\n }),\n menuItemsWrap: css({\n boxShadow: theme.shadows.z3,\n display: 'flex',\n background: theme.colors.background.secondary,\n padding: '5px 0',\n marginLeft: pillType === 'column' ? '5px' : undefined,\n }),\n menuItem: css({\n overflow: 'auto',\n textOverflow: 'ellipsis',\n cursor: 'pointer',\n paddingLeft: '5px',\n paddingRight: '5px',\n display: 'flex',\n alignItems: 'center',\n }),\n});\n\nexport const CellContextMenu = (props: Props) => {\n const theme = useTheme2();\n const styles = getStyles(theme, props.pillType);\n const { addFilter } = useQueryContext();\n\n return (\n \n \n {props.fieldType !== 'derived' && (\n <>\n {\n addFilter({\n key: props.label,\n value: props.value,\n operator: FilterOp.Equal,\n });\n }}\n >\n \n \n {\n addFilter({\n key: props.label,\n value: props.value,\n operator: FilterOp.NotEqual,\n });\n }}\n >\n \n \n \n )}\n\n {props.showColumn && (\n
\n \n \n \n \n
\n )}\n\n {props.links &&\n props.links.map((link) => {\n return (\n {\n window.open(link.href, '_blank');\n }}\n key={link.href}\n >\n \n \n );\n })}\n
\n
\n );\n};\n","export const LEVEL_NAME = 'detected_level';\nexport const DEFAULT_URL_COLUMNS = ['timestamp', 'body', 'Time', 'Line'];\n","import React, { ReactElement } from 'react';\nimport { css, cx } from '@emotion/css';\n\nimport { Field, FieldType, GrafanaTheme2 } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\nimport { useTableCellContext } from 'Components/Table/Context/TableCellContext';\nimport { CellContextMenu } from 'Components/Table/CellContextMenu';\nimport { getFieldMappings } from 'Components/Table/Table';\nimport { LEVEL_NAME } from './constants';\n\ninterface DefaultPillProps {\n label: string;\n showColumns?: () => void;\n value: string | unknown | ReactElement;\n rowIndex: number;\n field: Field;\n}\n\nconst getStyles = (theme: GrafanaTheme2, levelColor?: string) => ({\n activePillWrap: css({}),\n pillWrap: css({\n width: '100%',\n }),\n pill: css({\n border: `1px solid ${theme.colors.border.weak}`,\n '&:hover': {\n border: `1px solid ${theme.colors.border.strong}`,\n },\n marginRight: '5px',\n marginTop: '4px',\n marginLeft: '5px',\n padding: '2px 5px',\n position: 'relative',\n display: 'inline-flex',\n flexDirection: 'row-reverse',\n backgroundColor: 'transparent',\n\n paddingLeft: levelColor ? `${theme.spacing(0.75)}` : `2px`,\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n top: 0,\n height: '100%',\n width: `${theme.spacing(0.25)}`,\n backgroundColor: levelColor,\n },\n }),\n menu: css({\n width: '100%',\n }),\n menuItem: css({\n overflow: 'auto',\n textOverflow: 'ellipsis',\n }),\n menuItemText: css({\n width: '65px',\n display: 'inline-block',\n }),\n});\nexport const DefaultPill = (props: DefaultPillProps) => {\n const { label, value } = props;\n const theme = useTheme2();\n const { cellIndex } = useTableCellContext();\n let levelColor;\n\n if (label === LEVEL_NAME) {\n const mappings = getFieldMappings().options;\n if (typeof value === 'string' && value in mappings) {\n levelColor = mappings[value].color;\n }\n }\n\n const isPillActive = cellIndex.index === props.rowIndex && props.field.name === cellIndex.fieldName;\n\n const styles = getStyles(theme, levelColor);\n return (\n
\n {!!value && (\n <>\n \n <>{value}\n \n {isPillActive && typeof value === 'string' && props.field.type !== FieldType.time && (\n \n )}\n \n )}\n
\n );\n};\n","import { ClipboardButton, IconButton, Modal, useTheme2 } from '@grafana/ui';\nimport React, { useCallback, useState } from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { useQueryContext } from 'Components/Table/Context/QueryContext';\nimport { testIds } from '../../services/testIds';\nimport { generateLogShortlink } from 'services/text';\n\nexport const getStyles = (theme: GrafanaTheme2, bgColor?: string) => ({\n clipboardButton: css({\n padding: 0,\n height: '100%',\n lineHeight: '1',\n width: '20px',\n }),\n inspectButton: css({\n display: 'inline-flex',\n verticalAlign: 'middle',\n margin: 0,\n overflow: 'hidden',\n borderRadius: '5px',\n }),\n iconWrapper: css({\n height: '35px',\n position: 'sticky',\n left: 0,\n display: 'flex',\n background: theme.colors.background.secondary,\n padding: `0 ${theme.spacing(0.5)}`,\n zIndex: 1,\n boxShadow: theme.shadows.z2,\n }),\n inspect: css({\n padding: '5px 3px',\n\n '&:hover': {\n color: theme.colors.text.link,\n cursor: 'pointer',\n },\n }),\n});\nexport function LineActionIcons(props: { rowIndex: number; value: unknown }) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const { logsFrame, timeRange } = useQueryContext();\n const logId = logsFrame?.idField?.values[props.rowIndex];\n const lineValue = logsFrame?.bodyField.values[props.rowIndex];\n const [isInspecting, setIsInspecting] = useState(false);\n const getText = useCallback(() => {\n if (timeRange) {\n return generateLogShortlink('selectedLine', { id: logId, row: props.rowIndex }, timeRange);\n }\n return '';\n }, [logId, props.rowIndex, timeRange]);\n return (\n <>\n
\n
\n setIsInspecting(true)}\n tabIndex={0}\n />\n
\n
\n \n
\n
\n <>\n {isInspecting && (\n setIsInspecting(false)} isOpen={true} title=\"Inspect value\">\n
{lineValue}
\n \n props.value as string}>\n Copy to Clipboard\n \n \n
\n )}\n \n \n );\n}\n","import React, { ReactElement } from 'react';\nimport { Row } from 'react-table';\nimport { css } from '@emotion/css';\n\nimport { FieldType, formattedValueToString, GrafanaTheme2 } from '@grafana/data';\nimport { CustomCellRendererProps, DataLinksContextMenu, getCellLinks, useTheme2 } from '@grafana/ui';\n\nimport { useTableCellContext } from 'Components/Table/Context/TableCellContext';\nimport { useTableColumnContext } from 'Components/Table/Context/TableColumnsContext';\nimport { DefaultCellWrapComponent } from 'Components/Table/DefaultCellWrapComponent';\nimport { DefaultPill } from 'Components/Table/DefaultPill';\nimport { LineActionIcons } from 'Components/Table/LineActionIcons';\n\nconst getStyles = (theme: GrafanaTheme2, fieldType?: FieldType) => ({\n flexWrap: css({\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: fieldType === FieldType.number ? 'row-reverse' : 'row',\n textAlign: fieldType === FieldType.number ? 'right' : 'left',\n }),\n content: css({\n position: 'relative',\n overflow: 'hidden',\n display: 'flex',\n height: '100%',\n }),\n linkWrapper: css({\n color: theme.colors.text.link,\n marginTop: '7px',\n marginLeft: '7px',\n '&:hover': {\n textDecoration: 'underline',\n },\n }),\n});\n\ninterface DefaultCellComponentCustomProps {\n fieldIndex: number;\n}\nexport const DefaultCellComponent = (props: CustomCellRendererProps & DefaultCellComponentCustomProps) => {\n let value = props.value;\n const field = props.field;\n const displayValue = field.display!(value);\n const theme = useTheme2();\n const styles = getStyles(theme, props.field.type);\n const { setVisible } = useTableColumnContext();\n const { cellIndex, setActiveCellIndex } = useTableCellContext();\n\n // We don't get back the full react.table row here, but the calling function only uses the index, which are in `CustomCellRendererProps`\n const row = { index: props.rowIndex } as Row;\n const hasLinks = Boolean(getCellLinks(props.field, row)?.length);\n\n if (value === null) {\n return <>;\n }\n\n if (React.isValidElement(props.value)) {\n value = props.value;\n } else if (typeof value === 'object') {\n value = JSON.stringify(props.value);\n } else {\n value = formattedValueToString(displayValue);\n }\n\n const renderValue = (value: string | unknown | ReactElement, label: string) => {\n return (\n setVisible(true)}\n label={label}\n value={value}\n />\n );\n };\n\n return (\n {\n if (props.rowIndex === cellIndex.index && props.field.name === cellIndex.fieldName) {\n return setActiveCellIndex({ index: null });\n }\n return setActiveCellIndex({ index: props.rowIndex, fieldName: props.field.name, numberOfMenuItems: 3 });\n }}\n field={props.field}\n rowIndex={props.rowIndex}\n >\n
\n {props.fieldIndex === 0 && }\n
\n\n {!hasLinks && renderValue(value, field.name)}\n\n {hasLinks && field.getLinks && (\n getCellLinks(field, row) ?? []}>\n {(api) => {\n if (api.openMenu) {\n return (\n
\n <>{value}\n
\n );\n } else {\n return (\n
\n <>{value}\n
\n );\n }\n }}\n
\n )}\n
\n \n );\n};\n","import React, { useMemo } from 'react';\nimport { Row } from 'react-table';\nimport { css, cx } from '@emotion/css';\n\nimport { DataFrame, Field, FieldType, getLinksSupplier, GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { getCellLinks, useTheme2 } from '@grafana/ui';\n\nimport { useTableCellContext } from 'Components/Table/Context/TableCellContext';\nimport { CellContextMenu } from 'Components/Table/CellContextMenu';\nimport { getFieldMappings } from 'Components/Table/Table';\nimport { FieldNameMetaStore } from 'Components/Table/TableTypes';\nimport { useTableColumnContext } from 'Components/Table/Context/TableColumnsContext';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { LEVEL_NAME } from './constants';\n\ninterface LogLinePillProps {\n originalField?: Field;\n field?: Field;\n columns: FieldNameMetaStore;\n label: string;\n showColumns: () => void;\n rowIndex: number;\n frame: DataFrame;\n originalFrame: DataFrame | undefined;\n isDerivedField: boolean;\n value: string;\n}\n\nconst getStyles = (theme: GrafanaTheme2, levelColor?: string) => ({\n pill: css({\n flex: '0 1 auto',\n marginLeft: theme.spacing(0.5),\n marginRight: theme.spacing(0.5),\n padding: `${theme.spacing(0.25)} ${theme.spacing(0.25)}`,\n position: 'relative',\n display: 'inline-flex',\n flexDirection: 'column',\n marginTop: theme.spacing(0.5),\n }),\n activePill: css({}),\n valueWrap: css({\n border: `1px solid ${theme.colors.background.secondary}`,\n boxShadow: `-2px 2px 5px 0px ${theme.colors.background.secondary}`,\n backgroundColor: 'transparent',\n cursor: 'pointer',\n position: 'relative',\n\n paddingRight: `${theme.spacing(0.5)}`,\n paddingLeft: levelColor ? `${theme.spacing(0.75)}` : `${theme.spacing(0.5)}`,\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n top: 0,\n height: '100%',\n width: `${theme.spacing(0.25)}`,\n backgroundColor: levelColor,\n },\n\n '&:hover': {\n border: `1px solid ${theme.colors.border.strong}`,\n },\n }),\n});\n\nfunction LogLinePillValue(props: {\n fieldType?: 'derived';\n onClick: () => void;\n label: string;\n value: string;\n menuActive: boolean;\n onClickAdd: () => void;\n links?: LinkModel[];\n}) {\n const theme = useTheme2();\n\n let levelColor;\n if (props.label === LEVEL_NAME) {\n const mappings = getFieldMappings().options;\n if (props.value in mappings) {\n levelColor = mappings[props.value].color;\n }\n }\n\n const styles = getStyles(theme, levelColor);\n\n return (\n \n \n {props.label}={props.value}\n \n {props.menuActive && (\n \n )}\n \n );\n}\n\nexport const LogLinePill = (props: LogLinePillProps) => {\n const { label } = props;\n const { cellIndex, setActiveCellIndex } = useTableCellContext();\n const { columns, setColumns } = useTableColumnContext();\n const value = props.value;\n const templateSrv = getTemplateSrv();\n const replace = useMemo(() => templateSrv.replace.bind(templateSrv), [templateSrv]);\n\n // Need untransformed frame for links?\n const field = props.field;\n\n if (!field || field?.type === FieldType.other) {\n return null;\n }\n const row = { index: props.rowIndex } as Row;\n\n if (props.originalField && props.isDerivedField && props.originalFrame) {\n props.originalField.getLinks = getLinksSupplier(props.originalFrame, props.originalField, {}, replace);\n }\n\n const links = props.originalField && getCellLinks(props.originalField, row);\n\n /**\n * This Could be moved?\n * Callback called by the pill context menu\n * @param fieldName\n */\n const addFieldToColumns = (fieldName: string) => {\n const pendingColumns = { ...columns };\n\n const length = Object.keys(columns).filter((c) => columns[c].active).length;\n if (pendingColumns[fieldName].active) {\n pendingColumns[fieldName] = {\n ...pendingColumns[fieldName],\n active: false,\n index: undefined,\n };\n } else {\n pendingColumns[fieldName] = {\n ...pendingColumns[fieldName],\n active: true,\n index: length,\n };\n }\n\n setColumns(pendingColumns);\n };\n\n return (\n {\n if (\n props.rowIndex === cellIndex.index &&\n field.name === cellIndex.fieldName &&\n label === cellIndex.subFieldName\n ) {\n return setActiveCellIndex({ index: null });\n }\n\n return setActiveCellIndex({\n index: props.rowIndex,\n fieldName: field.name,\n subFieldName: label,\n numberOfMenuItems: props.isDerivedField ? 2 : 3,\n });\n }}\n menuActive={\n cellIndex.index === props.rowIndex && cellIndex.fieldName === field.name && cellIndex.subFieldName === label\n }\n fieldType={props.isDerivedField ? 'derived' : undefined}\n label={label}\n value={value}\n onClickAdd={() => addFieldToColumns(label)}\n links={links}\n />\n );\n};\n","import { Icon, useTheme2 } from '@grafana/ui';\nimport React from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n scroller: css`\n position: absolute;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 20px;\n top: 32px;\n margin-top: -24px;\n // For some reason clicking on this button causes text to be selected in the following row\n user-select: none;\n `,\n scrollLeft: css`\n cursor: pointer;\n background: ${theme.colors.background.primary};\n\n &:hover {\n background: ${theme.colors.background.secondary};\n }\n `,\n scrollRight: css`\n cursor: pointer;\n background: ${theme.colors.background.primary};\n\n &:hover {\n background: ${theme.colors.background.secondary};\n }\n `,\n});\n\nconst stopScroll = (id: React.MutableRefObject) => {\n id?.current?.scrollTo({\n left: id.current?.scrollLeft,\n });\n};\n\nconst goLeft = (id: React.MutableRefObject) => {\n id?.current?.scrollTo({\n top: 0,\n left: 0,\n behavior: 'smooth',\n });\n};\n\nconst goRight = (id: React.MutableRefObject) => {\n id?.current?.scrollTo({\n top: 0,\n left: id.current.scrollWidth,\n behavior: 'smooth',\n });\n};\n\nexport function Scroller({ scrollerRef: ref }: { scrollerRef: React.MutableRefObject }) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n return (\n
\n goLeft(ref)} onPointerUp={() => stopScroll(ref)} className={styles.scrollLeft}>\n \n \n goRight(ref)} onPointerUp={() => stopScroll(ref)} className={styles.scrollRight}>\n \n \n
\n );\n}\n","import React from 'react';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\nimport { testIds } from '../../services/testIds';\n\nexport function RawLogLineText(props: { value: unknown }) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n return (\n
\n <>{props.value}\n
\n );\n}\n\nexport const getStyles = (theme: GrafanaTheme2, bgColor?: string) => ({\n rawLogLine: css({\n fontFamily: theme.typography.fontFamilyMonospace,\n height: '35px',\n lineHeight: '35px',\n paddingRight: theme.spacing(1.5),\n paddingLeft: theme.spacing(1),\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n});\n","import React, { useRef, useState } from 'react';\nimport { ScrollSyncPane } from 'react-scroll-sync';\n\nimport { FieldType, formattedValueToString, GrafanaTheme2, Labels } from '@grafana/data';\nimport { CustomCellRendererProps, useTheme2 } from '@grafana/ui';\n\nimport { useQueryContext } from 'Components/Table/Context/QueryContext';\nimport { LogLineState, useTableColumnContext } from 'Components/Table/Context/TableColumnsContext';\nimport { DefaultCellWrapComponent } from 'Components/Table/DefaultCellWrapComponent';\nimport { LogLinePill } from 'Components/Table/LogLinePill';\nimport { Scroller } from 'Components/Table/Scroller';\nimport { css } from '@emotion/css';\nimport { LineActionIcons } from 'Components/Table/LineActionIcons';\nimport { RawLogLineText } from 'Components/Table/RawLogLineText';\nimport { getBodyName } from '../../services/logsFrame';\nimport { LEVEL_NAME } from './constants';\n\nexport type SelectedTableRow = {\n row: number;\n id: string;\n};\n\ninterface Props extends CustomCellRendererProps {\n labels: Labels;\n fieldIndex: number;\n}\nexport const LogLineCellComponent = (props: Props) => {\n let value = props.value;\n const field = props.field;\n const displayValue = field.display!(value);\n const theme = useTheme2();\n const styles = getStyles(theme);\n const { columns, setVisible, bodyState } = useTableColumnContext();\n const { logsFrame } = useQueryContext();\n const [isHover, setIsHover] = useState(false);\n const ref = useRef(null);\n\n if (React.isValidElement(props.value)) {\n value = props.value;\n } else if (typeof value === 'object') {\n value = JSON.stringify(props.value);\n } else {\n value = formattedValueToString(displayValue);\n }\n\n /**\n * Render labels as log line pills\n * @param labels Label[]\n */\n const renderLabels = (labels: Labels) => {\n const columnLabelNames = Object.keys(columns);\n const labelNames = columnLabelNames\n .filter((name) => name !== getBodyName(logsFrame))\n .sort((a, b) => {\n // Sort level first\n if (a === LEVEL_NAME) {\n return -1;\n }\n if (b === LEVEL_NAME) {\n return 1;\n }\n // Then sort links\n if (columns[a].type === 'LINK_FIELD') {\n return -1;\n }\n if (columns[b].type === 'LINK_FIELD') {\n return 1;\n }\n\n // Finally sort fields by cardinality descending\n return columns[a].cardinality > columns[b].cardinality ? -1 : 1;\n });\n\n const filteredLabels = labelNames.filter(\n (label) =>\n // Not already visible in another column\n !columns[label].active &&\n // And the cardinality is greater than 1\n columns[label].cardinality > 1\n );\n\n return filteredLabels\n .map((label) => {\n const labelValue = labels[label];\n const untransformedField = logsFrame?.raw?.fields.find((field) => field.name === label);\n const rawValue = field?.values[props.rowIndex];\n const isDerived = !labelValue && !!rawValue;\n\n // If we have a label value, the field is not derived\n if (labelValue) {\n return (\n setVisible(true)}\n key={label}\n label={label}\n isDerivedField={false}\n value={labelValue}\n />\n );\n }\n\n // Otherwise, the field might be derived\n if (isDerived && untransformedField?.name) {\n const untransformedValue = untransformedField?.values[props.rowIndex];\n if (untransformedField?.type === FieldType.string && untransformedValue) {\n return (\n setVisible(true)}\n key={untransformedField.name}\n label={untransformedField.name}\n isDerivedField={true}\n />\n );\n }\n }\n\n return null;\n })\n .filter((v) => v);\n };\n\n const labels = renderLabels(props.labels);\n const isAuto = bodyState === LogLineState.auto;\n const hasLabels = labels.length > 0;\n\n return (\n {\n setIsHover(true);\n }}\n onMouseOut={() => {\n setIsHover(false);\n }}\n rowIndex={props.rowIndex}\n field={props.field}\n >\n \n
\n {/* First Field gets the icons */}\n {props.fieldIndex === 0 && }\n {/* Labels */}\n {isAuto && hasLabels && <>{labels}}\n {bodyState === LogLineState.labels && hasLabels && <>{labels}}\n {bodyState === LogLineState.labels && !hasLabels && }\n\n {/* Raw log line*/}\n {isAuto && !hasLabels && }\n {bodyState === LogLineState.text && }\n\n {isHover && }\n
\n
\n \n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n content: css`\n white-space: nowrap;\n overflow-x: auto;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n padding-right: 30px;\n display: flex;\n align-items: flex-start;\n height: 100%;\n &::-webkit-scrollbar {\n display: none; /* Chrome, Safari and Opera */\n }\n\n &:after {\n pointer-events: none;\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n // Fade out text in last 10px to background color to add affordance to horiziontal scroll\n background: linear-gradient(to right, transparent calc(100% - 10px), ${theme.colors.background.primary});\n }\n `,\n});\n","import React, { PropsWithChildren, useRef } from 'react';\nimport { css } from '@emotion/css';\n\nimport { Field, GrafanaTheme2 } from '@grafana/data';\nimport { ClickOutsideWrapper, IconButton, Popover, useTheme2 } from '@grafana/ui';\n\nimport { useTableHeaderContext } from 'Components/Table/Context/TableHeaderContext';\nimport { useQueryContext } from './Context/QueryContext';\nimport { getBodyName } from '../../services/logsFrame';\nimport { LogLineState, useTableColumnContext } from './Context/TableColumnsContext';\n\nexport interface LogsTableHeaderProps extends PropsWithChildren {\n fieldIndex: number;\n}\n//@todo delete when released in Grafana core\nexport interface CustomHeaderRendererProps {\n field: Field;\n defaultContent: React.ReactNode;\n}\n\nconst getStyles = (theme: GrafanaTheme2, isFirstColumn: boolean, isLine: boolean) => ({\n logLineButton: css({\n marginLeft: '5px',\n }),\n tableHeaderMenu: css({\n label: 'tableHeaderMenu',\n width: '100%',\n minWidth: '250px',\n height: '100%',\n maxHeight: '400px',\n backgroundColor: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(2),\n margin: theme.spacing(1, 0),\n boxShadow: theme.shadows.z3,\n borderRadius: theme.shape.radius.default,\n }),\n leftAlign: css({\n label: 'left-align',\n display: 'flex',\n width: 'calc(100% - 20px)',\n }),\n clearButton: css({\n marginLeft: '5px',\n }),\n rightAlign: css({\n label: 'right-align',\n display: 'flex',\n marginRight: '5px',\n }),\n wrapper: css({\n label: 'wrapper',\n display: 'flex',\n marginLeft: isFirstColumn ? '56px' : '6px',\n // Body has extra padding then other columns\n width: isLine ? 'calc(100% + 6px)' : '100%',\n\n // Hack to show a visible resize indicator, despite 6px of padding on the header in grafana/table\n borderRight: `1px solid ${theme.colors.border.weak}`,\n marginRight: '-6px',\n }),\n defaultContentWrapper: css({\n borderLeft: isFirstColumn ? `1px solid ${theme.colors.border.weak}` : 'none',\n marginLeft: isFirstColumn ? '-6px' : 0,\n paddingLeft: isFirstColumn ? '12px' : 0,\n display: 'flex',\n }),\n});\n\nexport const LogsTableHeader = (props: LogsTableHeaderProps) => {\n const { setHeaderMenuActive, isHeaderMenuActive } = useTableHeaderContext();\n const { logsFrame } = useQueryContext();\n const referenceElement = useRef(null);\n const theme = useTheme2();\n const styles = getStyles(theme, props.fieldIndex === 0, props.field.name === getBodyName(logsFrame));\n const { columnWidthMap, setColumnWidthMap, setBodyState, bodyState } = useTableColumnContext();\n const isBodyField = props.field.name === getBodyName(logsFrame);\n\n const onLogTextToggle = () => {\n setBodyState(bodyState === LogLineState.text ? LogLineState.labels : LogLineState.text);\n };\n\n return (\n \n \n {props.defaultContent}\n {columnWidthMap && setColumnWidthMap && columnWidthMap?.[props.field.name] !== undefined && (\n {\n const { [props.field.name]: omit, ...map } = { ...columnWidthMap };\n setColumnWidthMap?.(map);\n }}\n />\n )}\n {isBodyField && (\n <>\n {bodyState === LogLineState.text ? (\n \n ) : (\n \n )}\n \n )}\n \n \n {\n setHeaderMenuActive(!isHeaderMenuActive);\n }}\n name={'ellipsis-v'}\n />\n \n\n {referenceElement.current && (\n //@ts-ignore\n setHeaderMenuActive(false)} useCapture={true}>\n
{props.children}
\n \n }\n referenceElement={referenceElement.current}\n />\n )}\n
\n );\n};\n","import { LogsTableHeader, LogsTableHeaderProps } from 'Components/Table/LogsTableHeader';\nimport { FieldNameMetaStore } from 'Components/Table/TableTypes';\nimport { useTableHeaderContext } from 'Components/Table/Context/TableHeaderContext';\nimport { LogLineState, useTableColumnContext } from 'Components/Table/Context/TableColumnsContext';\nimport { Icon } from '@grafana/ui';\nimport React, { useCallback } from 'react';\nimport { Field } from '@grafana/data';\nimport { getBodyName } from '../../services/logsFrame';\nimport { css, cx } from '@emotion/css';\nimport { useQueryContext } from './Context/QueryContext';\n\nexport function LogsTableHeaderWrap(props: {\n headerProps: LogsTableHeaderProps;\n openColumnManagementDrawer: () => void;\n\n // Moves the current column forward or backward one index\n slideLeft?: (cols: FieldNameMetaStore) => void;\n slideRight?: (cols: FieldNameMetaStore) => void;\n\n autoColumnWidths?: () => void;\n}) {\n const { setHeaderMenuActive } = useTableHeaderContext();\n const { columns, setColumns, bodyState, setBodyState } = useTableColumnContext();\n const { logsFrame } = useQueryContext();\n const styles = getStyles();\n\n const hideColumn = useCallback(\n (field: Field) => {\n const pendingColumnState = { ...columns };\n\n const columnsThatNeedIndexUpdate = Object.keys(pendingColumnState)\n .filter((col) => {\n const columnIndex = pendingColumnState[col].index;\n const fieldIndex = pendingColumnState[field.name].index;\n return pendingColumnState[col].active && fieldIndex && columnIndex && columnIndex > fieldIndex;\n })\n .map((cols) => pendingColumnState[cols]);\n\n columnsThatNeedIndexUpdate.forEach((col) => {\n if (col.index !== undefined) {\n col.index--;\n }\n });\n\n pendingColumnState[field.name].active = false;\n pendingColumnState[field.name].index = undefined;\n setColumns(pendingColumnState);\n },\n [columns, setColumns]\n );\n\n const isBodyField = props.headerProps.field.name === getBodyName(logsFrame);\n\n return (\n \n
\n {\n props.openColumnManagementDrawer();\n setHeaderMenuActive(false);\n }}\n >\n \n Manage columns\n \n
\n \n {props.slideLeft && (\n \n )}\n {props.slideRight && (\n \n )}\n {isBodyField && (\n
\n {\n if (bodyState === LogLineState.text) {\n setBodyState(LogLineState.labels);\n } else {\n setBodyState(LogLineState.text);\n }\n }}\n >\n {bodyState === LogLineState.text ? (\n \n ) : (\n \n )}\n\n {bodyState === LogLineState.text ? 'Show labels' : 'Show log text'}\n \n
\n )}\n\n {props.autoColumnWidths && (\n \n )}\n
\n );\n}\n\nconst getStyles = () => {\n return {\n reverse: css({\n transform: 'scaleX(-1)',\n }),\n link: css({\n paddingTop: '5px',\n paddingBottom: '5px',\n }),\n icon: css({\n marginRight: '10px',\n }),\n linkWrap: css({}),\n };\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ScrollSync } from 'react-scroll-sync';\nimport { css } from '@emotion/css';\nimport { lastValueFrom } from 'rxjs';\n\nimport {\n applyFieldOverrides,\n CustomTransformOperator,\n DataFrame,\n DataFrameType,\n DataTransformerConfig,\n Field,\n FieldType,\n FieldWithIndex,\n Labels,\n MappingType,\n transformDataFrame,\n ValueMap,\n} from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { TableCellHeight, TableColoredBackgroundCellOptions } from '@grafana/schema';\nimport { Drawer, Table as GrafanaTable, TableCellDisplayMode, TableCustomCellOptions, useTheme2 } from '@grafana/ui';\n\nimport { TableCellContextProvider } from 'Components/Table/Context/TableCellContext';\nimport { useTableColumnContext } from 'Components/Table/Context/TableColumnsContext';\nimport { TableHeaderContextProvider } from 'Components/Table/Context/TableHeaderContext';\nimport {\n ColumnSelectionDrawerWrap,\n getReorderColumn,\n} from 'Components/Table/ColumnSelection/ColumnSelectionDrawerWrap';\nimport { DefaultCellComponent } from 'Components/Table/DefaultCellComponent';\nimport { LogLineCellComponent } from 'Components/Table/LogLineCellComponent';\nimport { CustomHeaderRendererProps } from 'Components/Table/LogsTableHeader';\nimport { FieldName, FieldNameMeta, FieldNameMetaStore } from 'Components/Table/TableTypes';\nimport { guessLogsFieldTypeForValue } from 'Components/Table/TableWrap';\nimport { LogsTableHeaderWrap } from 'Components/Table/LogsTableHeaderWrap';\nimport { getBodyName, getIdName, getTimeName, LogsFrame } from '../../services/logsFrame';\nimport { useQueryContext } from './Context/QueryContext';\nimport { testIds } from '../../services/testIds';\nimport { debounce } from 'lodash';\n\ninterface Props {\n height: number;\n timeZone: string;\n logsFrame: LogsFrame;\n width: number;\n labels: Labels[];\n}\n\nconst getStyles = () => ({\n section: css({\n position: 'relative',\n }),\n tableWrap: css({\n '.cellActions': {\n // Hacky but without inspect turned on the table will change the width of the row on hover, but we don't want the default icons to show\n display: 'none !important',\n },\n }),\n});\n\nfunction TableAndContext(props: {\n data: DataFrame;\n height: number;\n width: number;\n selectedLine?: number;\n logsFrame: LogsFrame;\n onResize: (fieldDisplayName: string, width: number) => void;\n}) {\n return (\n \n );\n}\n\nexport const Table = (props: Props) => {\n const { height, timeZone, logsFrame, width, labels } = props;\n const theme = useTheme2();\n const styles = getStyles();\n\n const [tableFrame, setTableFrame] = useState(undefined);\n const {\n columns,\n visible,\n setVisible,\n setFilteredColumns,\n setColumns,\n clearSelectedLine,\n columnWidthMap,\n setColumnWidthMap,\n } = useTableColumnContext();\n\n const { selectedLine } = useQueryContext();\n\n // Create a local state for selected line so we can clear the state tied to the URL\n const [localSelectedLine] = useState(selectedLine);\n\n const reorderColumn = getReorderColumn(setColumns);\n\n const templateSrv = getTemplateSrv();\n const replace = useMemo(() => templateSrv.replace.bind(templateSrv), [templateSrv]);\n\n const prepareTableFrame = useCallback(\n (frame: DataFrame): DataFrame => {\n if (!frame.length) {\n return frame;\n }\n\n const [frameWithOverrides] = applyFieldOverrides({\n data: [frame],\n timeZone: timeZone,\n theme: theme,\n replaceVariables: replace,\n fieldConfig: {\n defaults: {\n custom: {},\n },\n overrides: [],\n },\n });\n\n // `getLinks` and `applyFieldOverrides` are taken from TableContainer.tsx\n for (const [index, field] of frameWithOverrides.fields.entries()) {\n // If it's a string, then try to guess for a better type for numeric support in viz\n field.type =\n field.type === FieldType.string ? guessLogsFieldTypeForField(field) ?? FieldType.string : field.type;\n\n field.config = {\n ...field.config,\n\n custom: {\n inspect: true,\n filterable: true, // This sets the columns to be filterable\n headerComponent: (props: CustomHeaderRendererProps) => (\n \n setVisible(true)}\n slideLeft={\n index !== 0 ? (cols: FieldNameMetaStore) => reorderColumn(cols, index, index - 1) : undefined\n }\n slideRight={\n index !== frame.fields.length - 1\n ? (cols: FieldNameMetaStore) => reorderColumn(cols, index, index + 1)\n : undefined\n }\n autoColumnWidths={\n Object.keys(columnWidthMap).length > 0\n ? () => {\n setColumnWidthMap({});\n }\n : undefined\n }\n />\n \n ),\n width:\n columnWidthMap[field.name] ??\n getInitialFieldWidth(field, index, columns, width, frameWithOverrides.fields.length, logsFrame),\n cellOptions: getTableCellOptions(field, index, labels, logsFrame),\n ...field.config.custom,\n },\n // This sets the individual field value as filterable\n // filterable: isFieldFilterable(field, logsFrame?.bodyField.name ?? '', logsFrame?.timeField.name ?? ''),\n filterable: true,\n };\n }\n\n return frameWithOverrides;\n },\n // This function is building the table dataframe that will be transformed, even though the components within the dataframe (cells, headers) can mutate the dataframe!\n // If we try to update the dataframe whenever the columns are changed (which are rebuilt using this dataframe after being transformed), react will infinitely update frame -> columns -> frame -> ...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [timeZone, theme, labels, width, replace, setVisible, columnWidthMap]\n );\n\n // prepare dataFrame\n useEffect(() => {\n const prepare = async () => {\n const transformations: Array = getExtractFieldsTransform(\n logsFrame.raw\n );\n\n let labelFilters = buildColumnsWithMeta(columns);\n\n const labelFiltersTransform = getOrganizeFieldsTransform(labelFilters);\n if (labelFiltersTransform) {\n transformations.push(labelFiltersTransform);\n } else {\n const specialFields = {\n time: logsFrame.timeField,\n body: logsFrame.bodyField,\n extraFields: logsFrame.extraFields,\n };\n if (specialFields && specialFields.body !== undefined && specialFields.time !== undefined) {\n transformations.push(\n getDefaultStateOrganizeFieldsTransform(\n specialFields as {\n time: FieldWithIndex;\n body: FieldWithIndex;\n }\n )\n );\n }\n }\n\n if (transformations.length > 0) {\n const transformedDataFrame: DataFrame[] = await lastValueFrom(\n // @ts-ignore\n transformDataFrame(transformations, [logsFrame.raw])\n );\n const tableFrame = prepareTableFrame(transformedDataFrame[0]);\n setTableFrame(tableFrame);\n } else {\n setTableFrame(prepareTableFrame(logsFrame.raw));\n }\n };\n prepare();\n }, [logsFrame.raw, logsFrame.bodyField, logsFrame.timeField, logsFrame.extraFields, prepareTableFrame, columns]);\n\n // Clear selected line from URL so it doesn't pollute future queries\n useEffect(() => {\n if (localSelectedLine && selectedLine) {\n clearSelectedLine();\n return;\n }\n }, [localSelectedLine, clearSelectedLine, selectedLine]);\n\n const idField = logsFrame.raw.fields.find((field) => field.name === getIdName(logsFrame));\n const lineIndex = idField?.values.findIndex((v) => v === localSelectedLine?.id);\n const cleanLineIndex = lineIndex && lineIndex !== -1 ? lineIndex : undefined;\n\n if (!tableFrame) {\n return <>;\n }\n\n const onResize = (fieldDisplayName: string, width: number) => {\n const key = Object.keys(columns)\n .filter((key) => columns[key].active)\n .find((key) => key === fieldDisplayName);\n\n if (key && width > 0) {\n const map = { ...columnWidthMap };\n map[key] = width;\n setColumnWidthMap(map);\n }\n };\n\n return (\n
\n {visible && (\n {\n setVisible(false);\n setFilteredColumns(columns);\n }}\n >\n \n \n )}\n\n
\n \n \n \n \n \n
\n
\n );\n};\n\nfunction getDefaultStateOrganizeFieldsTransform(specialFields: { time: FieldWithIndex; body: FieldWithIndex }) {\n return {\n id: 'organize',\n options: {\n indexByName: {\n [specialFields.time.name]: 0,\n [specialFields.body.name]: 1,\n },\n includeByName: {\n [specialFields.body.name]: true,\n [specialFields.time.name]: true,\n },\n },\n };\n}\n\nfunction guessLogsFieldTypeForField(field: Field): FieldType | undefined {\n // 1. Use the column name to guess\n if (field.name) {\n const name = field.name.toLowerCase();\n if (name === 'date' || name === 'time') {\n return FieldType.time;\n }\n }\n\n // 2. Check the first non-null value\n for (let i = 0; i < field.values.length; i++) {\n const v = field.values[i];\n if (v != null) {\n return guessLogsFieldTypeForValue(v);\n }\n }\n\n // Could not find anything\n return undefined;\n}\n\nexport const getFieldMappings = (): ValueMap => {\n return {\n options: {\n critical: {\n color: '#705da0',\n index: 0,\n },\n crit: {\n color: '#705da0',\n index: 1,\n },\n error: {\n color: '#e24d42',\n index: 2,\n },\n err: {\n color: '#e24d42',\n index: 3,\n },\n eror: {\n color: '#e24d42',\n index: 4,\n },\n warning: {\n color: '#FF9900',\n index: 5,\n },\n warn: {\n color: '#FF9900',\n index: 6,\n },\n info: {\n color: '#7eb26d',\n index: 7,\n },\n debug: {\n color: '#1f78c1',\n index: 8,\n },\n trace: {\n color: '#6ed0e0',\n index: 9,\n },\n },\n type: MappingType.ValueToText,\n };\n};\n\nfunction buildColumnsWithMeta(columnsWithMeta: Record) {\n // Create object of label filters to include columns selected by the user\n let labelFilters: Record = {};\n Object.keys(columnsWithMeta)\n .filter((key) => columnsWithMeta[key].active)\n .forEach((key) => {\n const index = columnsWithMeta[key].index;\n // Index should always be defined for any active column\n if (index !== undefined) {\n labelFilters[key] = index;\n }\n });\n\n return labelFilters;\n}\n\nfunction getOrganizeFieldsTransform(labelFilters: Record) {\n let labelFiltersInclude: Record = {};\n\n for (const key in labelFilters) {\n labelFiltersInclude[key] = true;\n }\n\n if (Object.keys(labelFilters).length > 0) {\n return {\n id: 'organize',\n options: {\n indexByName: labelFilters,\n includeByName: labelFiltersInclude,\n },\n };\n }\n return null;\n}\n\nexport function getExtractFieldsTransform(dataFrame: DataFrame) {\n return dataFrame.fields\n .filter((field: Field & { typeInfo?: { frame: string } }) => {\n const isFieldLokiLabels =\n field.typeInfo?.frame === 'json.RawMessage' &&\n field.name === 'labels' &&\n dataFrame?.meta?.type !== DataFrameType.LogLines;\n const isFieldDataplaneLabels =\n field.name === 'labels' && field.type === FieldType.other && dataFrame?.meta?.type === DataFrameType.LogLines;\n return isFieldLokiLabels || isFieldDataplaneLabels;\n })\n .flatMap((field: Field) => {\n return [\n {\n id: 'extractFields',\n options: {\n format: 'json',\n keepTime: false,\n replace: false,\n source: field.name,\n },\n },\n ];\n });\n}\n\nfunction getTableCellOptions(\n field: Field,\n fieldIndex: number,\n labels: Labels[],\n logsFrame: LogsFrame\n): TableCustomCellOptions | TableColoredBackgroundCellOptions {\n if (field.name === getBodyName(logsFrame)) {\n return {\n cellComponent: (props) => (\n \n ),\n type: TableCellDisplayMode.Custom,\n };\n }\n\n return {\n cellComponent: (props) => ,\n type: TableCellDisplayMode.Custom,\n };\n}\n\nfunction getInitialFieldWidth(\n field: Field,\n fieldIndex: number,\n columns: FieldNameMetaStore,\n tableWidth: number,\n numberOfFields: number,\n logsFrame: LogsFrame\n): number | undefined {\n const minWidth = 90;\n\n // Columns shouldn't take more than half the available space, unless there are only 2 columns\n const maxWidth = numberOfFields <= 2 ? tableWidth : Math.min(tableWidth / 2);\n\n // First field gets icons, and a little extra width\n const extraPadding = fieldIndex === 0 ? 50 : 0;\n\n // Time fields have consistent widths\n if (field.type === FieldType.time) {\n return 200 + extraPadding;\n }\n\n const columnMeta = columns[field.name];\n\n if (columnMeta === undefined) {\n return undefined;\n }\n\n const maxLength = Math.max(columnMeta.maxLength ?? 0, field.name.length);\n\n if (columnMeta.maxLength) {\n // Super rough estimate, about 6.5px per char, and 95px for some space for the header icons (remember when sorted a new icon is added to the table header).\n // I guess to be a little tighter we could only add the extra padding IF the field name is longer then the longest value\n return Math.min(Math.max(maxLength * 6.5 + 95 + extraPadding, minWidth + extraPadding), maxWidth);\n }\n\n if (field.name === getBodyName(logsFrame)) {\n return undefined;\n }\n\n // Just derived fields, which should have uniform length\n return Math.min(\n Math.max((field.values?.[0]?.length ?? 80) * 6.5 + 95 + extraPadding, minWidth + extraPadding),\n maxWidth\n );\n}\n","import React, { useCallback, useState } from 'react';\nimport { css } from '@emotion/css';\n\nimport { DataFrame, FieldType, FieldWithIndex, getTimeZone, guessFieldTypeFromValue, Labels } from '@grafana/data';\n\nimport { LogLineState, TableColumnContextProvider } from 'Components/Table/Context/TableColumnsContext';\nimport { Table } from 'Components/Table/Table';\nimport { FieldNameMeta, FieldNameMetaStore } from 'Components/Table/TableTypes';\nimport { useQueryContext } from 'Components/Table/Context/QueryContext';\nimport { useResizeObserver } from '@react-aria/utils';\n\nexport type SpecialFieldsType = {\n time: FieldWithIndex;\n body: FieldWithIndex;\n extraFields: FieldWithIndex[];\n};\n\n// matches common ISO 8601\nconst iso8601Regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3,})?(?:Z|[-+]\\d{2}:?\\d{2})$/;\n\ninterface TableWrapProps {\n urlColumns: string[];\n urlTableBodyState?: LogLineState;\n setUrlColumns: (columns: string[]) => void;\n panelWrap: React.RefObject;\n clearSelectedLine: () => void;\n setUrlTableBodyState: (logLineState: LogLineState) => void;\n showColumnManagementDrawer: (isActive: boolean) => void;\n isColumnManagementActive: boolean;\n}\n\nconst getStyles = () => ({\n section: css({\n position: 'relative',\n }),\n});\n\nexport const TableWrap = (props: TableWrapProps) => {\n const { logsFrame } = useQueryContext();\n\n const [panelWrapSize, setPanelWrapSize] = useState({ width: 0, height: 0 });\n\n // Table needs to be positioned absolutely, passing in reference wrapping panelChrome from parent\n useResizeObserver({\n ref: props.panelWrap,\n onResize: () => {\n const element = props.panelWrap.current;\n if (element) {\n if (panelWrapSize.width !== element.clientWidth || panelWrapSize.height !== element.clientHeight) {\n setPanelWrapSize({\n width: element.clientWidth,\n height: element.clientHeight,\n });\n }\n }\n },\n });\n\n const styles = getStyles();\n const timeZone = getTimeZone();\n\n // This function is called when we want to grab the column names that are currently stored in the URL.\n // So instead we have to grab the current columns directly from the URL.\n const getColumnsFromProps = useCallback(\n (fieldNames: FieldNameMetaStore) => {\n const previouslySelected = props.urlColumns;\n if (previouslySelected?.length) {\n Object.values(previouslySelected).forEach((key, index) => {\n if (fieldNames[key]) {\n fieldNames[key].active = true;\n fieldNames[key].index = index;\n }\n });\n }\n\n return fieldNames;\n },\n [props.urlColumns]\n );\n\n // If the data frame is empty, there's nothing to viz, it could mean the user has unselected all columns\n if (!logsFrame || !logsFrame.raw.length) {\n return null;\n }\n\n const labels = logsFrame.getLogFrameLabelsAsLabels() ?? [];\n const numberOfLogLines = logsFrame ? logsFrame.raw.length : 0;\n\n // If we have labels and log lines\n let pendingLabelState = mapLabelsToInitialState(logsFrame.raw, labels);\n const specialFields = {\n time: logsFrame.timeField,\n body: logsFrame.bodyField,\n extraFields: logsFrame.extraFields,\n };\n\n // Normalize the other fields\n if (specialFields) {\n addSpecialLabelsState(\n [specialFields.time, specialFields.body, ...specialFields.extraFields],\n pendingLabelState,\n numberOfLogLines\n );\n\n pendingLabelState = getColumnsFromProps(pendingLabelState);\n\n // Get all active columns\n const active = Object.keys(pendingLabelState).filter((key) => pendingLabelState[key].active);\n\n // If nothing is selected, then select the default columns\n setSpecialFieldMeta(active, specialFields, pendingLabelState);\n }\n\n return (\n
\n \n \n \n
\n );\n};\n\nconst normalize = (value: number, total: number): number => {\n return Math.ceil((100 * value) / total);\n};\n\ntype labelName = string;\ntype labelValue = string;\n\nexport function getCardinalityMapFromLabels(labels: Labels[]) {\n const cardinalityMap = new Map; maxLength: number }>();\n labels.forEach((fieldLabels) => {\n const labelNames = Object.keys(fieldLabels);\n labelNames.forEach((labelName) => {\n if (cardinalityMap.has(labelName)) {\n const setObj = cardinalityMap.get(labelName);\n const values = setObj?.valueSet;\n const maxLength = setObj?.maxLength;\n\n if (values && !values?.has(fieldLabels[labelName])) {\n values?.add(fieldLabels[labelName]);\n if (maxLength && fieldLabels[labelName].length > maxLength) {\n cardinalityMap.set(labelName, { maxLength: fieldLabels[labelName].length, valueSet: values });\n }\n }\n } else {\n cardinalityMap.set(labelName, {\n maxLength: fieldLabels[labelName].length,\n valueSet: new Set([fieldLabels[labelName]]),\n });\n }\n });\n });\n\n return cardinalityMap;\n}\n\n/**\n * Guess the field type of the value\n * @param value\n */\nexport function guessLogsFieldTypeForValue(value: string) {\n let fieldType = guessFieldTypeFromValue(value);\n const isISO8601 = fieldType === 'string' && iso8601Regex.test(value);\n if (isISO8601) {\n fieldType = FieldType.time;\n }\n return fieldType;\n}\n\nfunction mapLabelsToInitialState(dataFrame: DataFrame, labels: Labels[]) {\n let pendingLabelState: FieldNameMetaStore = {};\n\n // Use a map to dedupe labels and count their occurrences in the logs\n const labelMap = new Map();\n const cardinality = getCardinalityMapFromLabels(labels);\n const numberOfLogLines = dataFrame ? dataFrame.length : 0;\n\n if (labels?.length && numberOfLogLines) {\n // Iterate through all of Labels\n labels.forEach((labels: Labels) => {\n const labelsArray = Object.keys(labels);\n // Iterate through the label values\n labelsArray.forEach((label) => {\n const cardinalityMap = cardinality.get(label);\n const cardinalityCount = cardinalityMap?.valueSet?.size ?? 0;\n // If it's already in our map, increment the count\n if (labelMap.has(label)) {\n const value = labelMap.get(label);\n\n if (value) {\n if (value?.active) {\n labelMap.set(label, {\n percentOfLinesWithLabel: value.percentOfLinesWithLabel + 1,\n active: true,\n index: value.index,\n cardinality: cardinalityCount,\n maxLength: cardinalityMap?.maxLength,\n });\n } else {\n labelMap.set(label, {\n percentOfLinesWithLabel: value.percentOfLinesWithLabel + 1,\n active: false,\n index: undefined,\n cardinality: cardinalityCount,\n maxLength: cardinalityMap?.maxLength,\n });\n }\n }\n // Otherwise add it\n } else {\n labelMap.set(label, {\n percentOfLinesWithLabel: 1,\n active: false,\n index: undefined,\n cardinality: cardinalityCount,\n maxLength: cardinalityMap?.maxLength,\n });\n }\n });\n });\n\n // Converting the map to an object\n pendingLabelState = Object.fromEntries(labelMap);\n\n // Convert count to percent of log lines\n Object.keys(pendingLabelState).forEach((key) => {\n pendingLabelState[key].percentOfLinesWithLabel = normalize(\n pendingLabelState[key].percentOfLinesWithLabel,\n numberOfLogLines\n );\n });\n }\n return pendingLabelState;\n}\n\n/**\n * Add special fields like time and body\n * @param specialFieldArray\n * @param pendingLabelState\n * @param numberOfLogLines\n */\nfunction addSpecialLabelsState(\n specialFieldArray: Array,\n pendingLabelState: FieldNameMetaStore,\n numberOfLogLines: number\n) {\n specialFieldArray.forEach((field) => {\n if (!field) {\n return;\n }\n const isActive = pendingLabelState[field.name]?.active;\n const index = pendingLabelState[field.name]?.index;\n if (isActive && index !== undefined) {\n pendingLabelState[field.name] = {\n percentOfLinesWithLabel: normalize(\n field.values.filter((value) => value !== null && value !== undefined).length,\n numberOfLogLines\n ),\n active: true,\n index: index,\n cardinality: numberOfLogLines,\n };\n } else {\n pendingLabelState[field.name] = {\n percentOfLinesWithLabel: normalize(\n field.values.filter((value) => value !== null && value !== undefined).length,\n numberOfLogLines\n ),\n active: false,\n index: undefined,\n cardinality: numberOfLogLines,\n };\n }\n });\n\n return pendingLabelState;\n}\n\nfunction setSpecialFieldMeta(\n active: string[],\n specialFields: SpecialFieldsType,\n pendingLabelState: FieldNameMetaStore\n) {\n // If no fields are visible, set defaults\n if (active.length === 0) {\n if (specialFields.body?.name) {\n pendingLabelState[specialFields.body?.name].active = true;\n pendingLabelState[specialFields.body?.name].index = 1;\n }\n if (specialFields.time?.name) {\n pendingLabelState[specialFields.time?.name].active = true;\n pendingLabelState[specialFields.time?.name].index = 0;\n }\n }\n\n if (specialFields.time?.name && specialFields.body?.name) {\n pendingLabelState[specialFields.body?.name].type = 'BODY_FIELD';\n pendingLabelState[specialFields.time?.name].type = 'TIME_FIELD';\n }\n\n if (specialFields.extraFields.length) {\n specialFields.extraFields.forEach((field) => {\n const hasLinks = field.config.links?.length;\n if (hasLinks) {\n pendingLabelState[field.name].type = 'LINK_FIELD';\n }\n });\n }\n}\n","import React from 'react';\n\nimport { TableWrap } from 'Components/Table/TableWrap';\nimport { AdHocVariableFilter, DataFrame, TimeRange } from '@grafana/data';\nimport { QueryContextProvider } from 'Components/Table/Context/QueryContext';\nimport { parseLogsFrame } from '../../services/logsFrame';\nimport { SelectedTableRow } from './LogLineCellComponent';\nimport { LogLineState } from './Context/TableColumnsContext';\n\ninterface TableProviderProps {\n dataFrame: DataFrame;\n setUrlColumns: (columns: string[]) => void;\n urlColumns: string[];\n addFilter: (filter: AdHocVariableFilter) => void;\n selectedLine?: SelectedTableRow;\n timeRange?: TimeRange;\n panelWrap: React.RefObject;\n clearSelectedLine: () => void;\n setUrlTableBodyState: (logLineState: LogLineState) => void;\n urlTableBodyState?: LogLineState;\n showColumnManagementDrawer: (isActive: boolean) => void;\n isColumnManagementActive: boolean;\n}\n\nexport const TableProvider = ({\n dataFrame,\n setUrlColumns,\n urlColumns,\n addFilter,\n selectedLine,\n timeRange,\n panelWrap,\n clearSelectedLine,\n setUrlTableBodyState,\n urlTableBodyState,\n showColumnManagementDrawer,\n isColumnManagementActive,\n}: TableProviderProps) => {\n if (!dataFrame) {\n return null;\n }\n\n const logsFrame = parseLogsFrame(dataFrame);\n if (!logsFrame) {\n return null;\n }\n\n return (\n \n \n \n );\n};\n","import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { LogsListScene } from './LogsListScene';\nimport { AdHocVariableFilter, GrafanaTheme2 } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { TableProvider } from '../Table/TableProvider';\nimport React, { useRef } from 'react';\nimport { Button, PanelChrome, useStyles2 } from '@grafana/ui';\nimport { LogsPanelHeaderActions } from '../Table/LogsHeaderActions';\nimport { css } from '@emotion/css';\nimport { addAdHocFilter } from './Breakdowns/AddToFiltersButton';\nimport { areArraysStrictlyEqual } from '../../services/comparison';\nimport { getLogsPanelFrame } from './ServiceScene';\nimport { getVariableForLabel } from '../../services/fields';\nimport { PanelMenu } from '../Panels/PanelMenu';\nimport { setDisplayedFields } from '../../services/store';\nimport { LogLineState } from '../Table/Context/TableColumnsContext';\nimport { DEFAULT_URL_COLUMNS } from '../Table/constants';\nimport { narrowStringsArray } from 'services/narrowing';\n\nlet defaultUrlColumns = DEFAULT_URL_COLUMNS;\n\ninterface LogsTableSceneState extends SceneObjectState {\n menu?: PanelMenu;\n isColumnManagementActive: boolean;\n}\nexport class LogsTableScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({ ...state, isColumnManagementActive: false });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n public showColumnManagementDrawer = (isActive: boolean) => {\n this.setState({\n isColumnManagementActive: isActive,\n });\n };\n\n public onActivate() {\n this.setState({\n menu: new PanelMenu({ addInvestigationsLink: false }),\n });\n this.onActivateSyncDisplayedFieldsWithUrlColumns();\n }\n\n private getParentScene() {\n return sceneGraph.getAncestor(this, LogsListScene);\n }\n\n // on activate sync displayed fields with url columns\n onActivateSyncDisplayedFieldsWithUrlColumns = () => {\n const searchParams = new URLSearchParams(locationService.getLocation().search);\n const urlColumnsParam = searchParams.get('urlColumns');\n const urlColumnsUrl = narrowStringsArray(urlColumnsParam);\n const parentModel = this.getParentScene();\n // Sync from url\n defaultUrlColumns = urlColumnsUrl\n ? this.urlHasDefaultUrlColumns(urlColumnsUrl)\n ? this.updateDefaultUrlColumns(urlColumnsUrl)\n : defaultUrlColumns\n : defaultUrlColumns;\n defaultUrlColumns = defaultUrlColumns.length > 0 ? defaultUrlColumns : defaultUrlColumns;\n parentModel.setState({\n urlColumns: Array.from(new Set([...defaultUrlColumns, ...parentModel.state.displayedFields])),\n });\n };\n\n // setUrlColumns update displayed fields in the parent scene\n updateDisplayedFields = (urlColumns: string[]) => {\n const parentModel = this.getParentScene();\n // Remove any default columns that are no longer in urlColumns, if the user has un-selected the default columns\n defaultUrlColumns = this.updateDefaultUrlColumns(urlColumns);\n\n // Remove any default urlColumn for displayedFields\n const newDisplayedFields = Array.from(new Set([...(urlColumns || [])])).filter(\n (field) => !defaultUrlColumns.includes(field)\n );\n // sync state displayedFields for LogsPanelScene\n parentModel.setState({\n displayedFields: newDisplayedFields,\n });\n // sync LocalStorage displayedFields for Go to explore\n setDisplayedFields(this, parentModel.state.displayedFields);\n };\n\n // check if url has default columns initially there are none so we need to keep default values\n urlHasDefaultUrlColumns = (urlColumns: string[]) => {\n return defaultUrlColumns.some((col) => urlColumns.includes(col));\n };\n\n // update defaultUrlColumns and match order\n updateDefaultUrlColumns = (urlColumns: string[]) => {\n defaultUrlColumns = defaultUrlColumns.reduce((acc, col) => {\n // return the column in the same index position as urlColumns\n if (urlColumns.includes(col)) {\n const urlIndex = urlColumns.indexOf(col);\n acc[urlIndex] = col;\n }\n return acc;\n }, []);\n\n return defaultUrlColumns;\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const styles = useStyles2(getStyles);\n // Get state from parent model\n const parentModel = sceneGraph.getAncestor(model, LogsListScene);\n const { data } = sceneGraph.getData(model).useState();\n const { selectedLine, urlColumns, visualizationType, tableLogLineState } = parentModel.useState();\n const { menu, isColumnManagementActive } = model.useState();\n\n // Get time range\n const timeRange = sceneGraph.getTimeRange(model);\n const { value: timeRangeValue } = timeRange.useState();\n\n const dataFrame = getLogsPanelFrame(data);\n\n // Define callback function to update filters in react\n const addFilter = (filter: AdHocVariableFilter) => {\n const variableType = getVariableForLabel(dataFrame, filter.key, model);\n addAdHocFilter(filter, parentModel, variableType);\n };\n\n // Get reference to panel wrapper so table knows how much space it can use to render\n const panelWrap = useRef(null);\n\n // Define callback function to update url columns in react\n const setUrlColumns = (urlColumns: string[]) => {\n if (!areArraysStrictlyEqual(urlColumns, parentModel.state.urlColumns)) {\n parentModel.setState({ urlColumns });\n // sync table urlColumns with log panel displayed fields\n model.updateDisplayedFields(urlColumns);\n }\n };\n\n const setUrlTableBodyState = (logLineState: LogLineState) => {\n parentModel.setState({ tableLogLineState: logLineState });\n };\n\n const clearSelectedLine = () => {\n if (parentModel.state.selectedLine) {\n parentModel.clearSelectedLine();\n }\n };\n\n return (\n
\n {/* @ts-expect-error todo: fix this when https://github.com/grafana/grafana/issues/103486 is done*/}\n : undefined}\n showMenuAlways={true}\n actions={\n <>\n \n \n \n }\n >\n {dataFrame && (\n \n )}\n \n
\n );\n };\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n panelWrapper: css({\n width: '100%',\n height: '100%',\n label: 'panel-wrapper-table',\n }),\n});\n","import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport debounce from 'lodash/debounce';\nimport { ChangeEvent, KeyboardEvent, useState } from 'react';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { getLineFiltersVariable, getLineFilterVariable } from '../../../services/variableGetters';\nimport {\n getLineFilterCase,\n getLineFilterExclusive,\n getLineFilterRegex,\n setLineFilterCase,\n setLineFilterExclusive,\n setLineFilterRegex,\n} from '../../../services/store';\nimport { RegexInputValue } from './RegexIconButton';\nimport { LineFilterCaseSensitive, LineFilterOp } from '../../../services/filterTypes';\nimport { LineFilterEditor } from './LineFilterEditor';\nimport { addCurrentUrlToHistory } from '../../../services/navigate';\n\ninterface LineFilterState extends SceneObjectState {\n lineFilter: string;\n caseSensitive: boolean;\n regex: boolean;\n exclusive: boolean;\n}\n\n/**\n * The line filter scene used in the logs tab\n */\nexport class LineFilterScene extends SceneObjectBase {\n static Component = LineFilterComponent;\n\n /**\n * Sets default regex/sensitivity/exclusivity state from local storage\n */\n constructor(state?: Partial) {\n super({\n lineFilter: state?.lineFilter ?? '',\n caseSensitive: state?.caseSensitive ?? getLineFilterCase(false),\n regex: state?.regex ?? getLineFilterRegex(false),\n exclusive: state?.exclusive ?? getLineFilterExclusive(false),\n ...state,\n });\n this.addActivationHandler(this.onActivate);\n }\n\n /**\n * Set initial state on activation\n */\n private onActivate = () => {\n const filter = this.getFilter();\n\n if (!filter) {\n return;\n }\n\n this.setState({\n lineFilter: filter.value,\n regex: filter.operator === LineFilterOp.regex || filter.operator === LineFilterOp.negativeRegex,\n caseSensitive: filter.key === LineFilterCaseSensitive.caseSensitive,\n exclusive: filter.operator === LineFilterOp.negativeMatch || filter.operator === LineFilterOp.negativeRegex,\n });\n\n return () => {\n // This won't clear the variable as the URL won't have time to sync, but it does prevent changes to the variable that haven't yet been synced with this scene state\n this.clearFilter();\n };\n };\n\n /**\n * Clear filter variable\n */\n private clearVariable() {\n const variable = getLineFilterVariable(this);\n variable.updateFilters([], {\n skipPublish: true,\n });\n this.setState({\n lineFilter: '',\n });\n }\n /**\n * Returns operator from current state\n */\n private getOperator(): LineFilterOp {\n if (this.state.regex && this.state.exclusive) {\n return LineFilterOp.negativeRegex;\n }\n if (this.state.regex && !this.state.exclusive) {\n return LineFilterOp.regex;\n }\n if (!this.state.regex && this.state.exclusive) {\n return LineFilterOp.negativeMatch;\n }\n if (!this.state.regex && !this.state.exclusive) {\n return LineFilterOp.match;\n }\n\n throw new Error('getOperator: failed to determine operation');\n }\n\n /**\n * Since there is no \"key\" for line-filters in logQL that will map to the key of the ad-hoc filter, we currently use the key to store the case sensitivity state\n * Note: This is technically a non-standard implementation (hack) of the ad-hoc variable, we should look into adding metadata to the ad-hoc variables in scenes\n * However the behavior of the ad-hoc variable lines up well with our use-case, we want case sensitivity state to be saved in the URL and to trigger query updates.\n * Since we use a custom renderer, this should be fine, but a source of tech-debt nonetheless.\n */\n private getFilterKey() {\n return this.state.caseSensitive ? LineFilterCaseSensitive.caseSensitive : LineFilterCaseSensitive.caseInsensitive;\n }\n\n /**\n * Returns the current ad-hoc variable filter\n */\n private getFilter() {\n const lineFilterVariable = getLineFilterVariable(this);\n return lineFilterVariable.state.filters[0];\n }\n\n /**\n * Clears filter input and clears debounce queue\n */\n clearFilter = () => {\n this.updateVariableDebounced.cancel();\n this.updateFilter('', false);\n };\n\n /**\n * Updates line filter state\n * Note: Updating/debouncing the queries onChange was removed to prevent people from accidentally hammering loki while writing line filters (particularly regex)\n * The code has been left in for now as we discussed adding an \"edit\" mode with a dedicated logs panel with a smaller line limit to let users debug the results as they type\n */\n updateFilter(lineFilter: string, debounced = true) {\n this.updateInputState(lineFilter);\n if (debounced) {\n this.updateVariableDebounced(lineFilter);\n } else {\n this.updateVariable(lineFilter);\n }\n }\n\n updateInputState(lineFilter: string) {\n this.setState({\n lineFilter,\n });\n }\n\n /**\n * Update exclusive state, triggers re-query without debounce\n */\n onToggleExclusive = (exclusive: boolean) => {\n setLineFilterExclusive(exclusive);\n this.setState({\n exclusive,\n });\n\n this.updateFilter(this.state.lineFilter, false);\n };\n\n /**\n * Moves the filter to the \"global\" line-filter ad-hoc variable after flushing the debounce queue.\n * Clears the state of the local ad-hoc variable.\n */\n onSubmitLineFilter = () => {\n addCurrentUrlToHistory();\n this.updateFilter(this.state.lineFilter, false);\n // Flush any debounced updates before grabbing the filter. Important that this happens before getFilter is called!\n this.updateVariableDebounced.flush();\n\n const lineFiltersVariable = getLineFiltersVariable(this);\n const existingFilters = lineFiltersVariable.state.filters;\n const thisFilter = this.getFilter();\n\n lineFiltersVariable.updateFilters([...existingFilters, thisFilter]);\n this.clearVariable();\n };\n\n /**\n * Passes the input value to the updateFilter method\n */\n handleChange = (e: ChangeEvent) => {\n this.updateInputState(e.target.value);\n };\n\n /**\n * Submits on enter\n */\n handleEnter = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && this.state.lineFilter) {\n this.onSubmitLineFilter();\n }\n };\n\n /**\n * Sets local state and triggers query on case sensitivity toggle\n */\n onCaseSensitiveToggle = (newState: LineFilterCaseSensitive) => {\n const caseSensitive = newState === LineFilterCaseSensitive.caseSensitive;\n\n // Set value to scene state\n this.setState({\n caseSensitive,\n });\n\n // Set value in local storage\n setLineFilterCase(caseSensitive);\n\n this.updateFilter(this.state.lineFilter, false);\n };\n\n /**\n * Sets local state and triggers query on regex toggle\n */\n onRegexToggle = (newState: RegexInputValue) => {\n const regex = newState === 'regex';\n\n // Set value to scene state\n this.setState({\n regex,\n });\n\n // Set value in local storage\n setLineFilterRegex(regex);\n\n this.updateFilter(this.state.lineFilter, false);\n };\n\n /**\n * Instance variable reference to debounced update method\n */\n updateVariableDebounced = debounce((search: string) => {\n this.updateVariable(search);\n }, 1000);\n\n /**\n * Updates the ad-hoc variable from local state and triggers a query.\n * Sends analytics event.\n */\n updateVariable = (search: string) => {\n this.updateVariableDebounced.flush();\n const variable = getLineFilterVariable(this);\n const variables = getLineFiltersVariable(this);\n const filter = {\n key: this.getFilterKey(),\n // The keyLabel is used to sort line filters by order added.\n keyLabel: variables.state.filters.length.toString(),\n operator: this.getOperator(),\n value: search,\n };\n\n variable.updateFilters([filter]);\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.search_string_in_logs_changed,\n {\n searchQueryLength: search.length,\n containsLevel: search.toLowerCase().includes('level'),\n operator: filter.operator,\n caseSensitive: filter.key,\n }\n );\n };\n}\n\nfunction LineFilterComponent({ model }: SceneComponentProps) {\n const { lineFilter, caseSensitive, regex, exclusive } = model.useState();\n const [focus, setFocus] = useState(false);\n return LineFilterEditor({\n exclusive,\n lineFilter,\n caseSensitive,\n regex,\n onSubmitLineFilter: model.onSubmitLineFilter,\n handleEnter: model.handleEnter,\n onInputChange: model.handleChange,\n updateFilter: model.updateFilter,\n onCaseSensitiveToggle: model.onCaseSensitiveToggle,\n onRegexToggle: model.onRegexToggle,\n setExclusive: model.onToggleExclusive,\n onClearLineFilter: model.clearFilter,\n focus,\n setFocus,\n type: 'editor',\n });\n}\n","import React from 'react';\n\nimport {\n SceneComponentProps,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneObjectUrlSyncConfig,\n SceneObjectUrlValues,\n SceneTimeRangeLike,\n} from '@grafana/scenes';\nimport { SelectedTableRow } from '../Table/LogLineCellComponent';\nimport { LogsTableScene } from './LogsTableScene';\nimport { css } from '@emotion/css';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../services/analytics';\nimport { locationService } from '@grafana/runtime';\nimport { LogsPanelScene } from './LogsPanelScene';\nimport {\n getDisplayedFields,\n getLogsVisualizationType,\n LogsVisualizationType,\n setLogsVisualizationType,\n} from 'services/store';\nimport { logger } from '../../services/logger';\nimport { Options } from '@grafana/schema/dist/esm/raw/composable/logs/panelcfg/x/LogsPanelCfg_types.gen';\nimport { narrowLogsVisualizationType, narrowSelectedTableRow, unknownToStrings } from '../../services/narrowing';\nimport { LogLineState } from '../Table/Context/TableColumnsContext';\nimport { LineFilterScene } from './LineFilter/LineFilterScene';\n\nexport interface LogsListSceneState extends SceneObjectState {\n loading?: boolean;\n panel?: SceneFlexLayout;\n visualizationType: LogsVisualizationType;\n urlColumns?: string[];\n tableLogLineState?: LogLineState;\n selectedLine?: SelectedTableRow;\n $timeRange?: SceneTimeRangeLike;\n displayedFields: string[];\n lineFilter?: string;\n}\n\nexport class LogsListScene extends SceneObjectBase {\n protected _urlSync = new SceneObjectUrlSyncConfig(this, {\n keys: ['urlColumns', 'selectedLine', 'visualizationType', 'displayedFields', 'tableLogLineState'],\n });\n private logsPanelScene?: LogsPanelScene = undefined;\n constructor(state: Partial) {\n super({\n ...state,\n visualizationType: getLogsVisualizationType(),\n displayedFields: [],\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n getUrlState() {\n const urlColumns = this.state.urlColumns ?? [];\n const selectedLine = this.state.selectedLine;\n const visualizationType = this.state.visualizationType;\n const displayedFields = this.state.displayedFields ?? getDisplayedFields(this) ?? [];\n return {\n urlColumns: JSON.stringify(urlColumns),\n selectedLine: JSON.stringify(selectedLine),\n visualizationType: JSON.stringify(visualizationType),\n displayedFields: JSON.stringify(displayedFields),\n tableLogLineState: JSON.stringify(this.state.tableLogLineState),\n };\n }\n\n updateFromUrl(values: SceneObjectUrlValues) {\n const stateUpdate: Partial = {};\n try {\n if (typeof values.urlColumns === 'string') {\n const decodedUrlColumns: string[] = unknownToStrings(JSON.parse(values.urlColumns));\n if (decodedUrlColumns !== this.state.urlColumns) {\n stateUpdate.urlColumns = decodedUrlColumns;\n }\n }\n if (typeof values.selectedLine === 'string') {\n const unknownTableRow = narrowSelectedTableRow(JSON.parse(values.selectedLine));\n if (unknownTableRow) {\n const decodedSelectedTableRow: SelectedTableRow = unknownTableRow;\n if (decodedSelectedTableRow !== this.state.selectedLine) {\n stateUpdate.selectedLine = decodedSelectedTableRow;\n }\n }\n }\n if (typeof values.visualizationType === 'string') {\n const decodedVisualizationType = narrowLogsVisualizationType(JSON.parse(values.visualizationType));\n if (decodedVisualizationType && decodedVisualizationType !== this.state.visualizationType) {\n stateUpdate.visualizationType = decodedVisualizationType;\n }\n }\n if (typeof values.displayedFields === 'string') {\n const displayedFields = unknownToStrings(JSON.parse(values.displayedFields));\n if (displayedFields && displayedFields.length) {\n stateUpdate.displayedFields = displayedFields;\n }\n }\n if (typeof values.tableLogLineState === 'string') {\n const tableLogLineState = JSON.parse(values.tableLogLineState);\n if (tableLogLineState === LogLineState.labels || tableLogLineState === LogLineState.text) {\n stateUpdate.tableLogLineState = tableLogLineState;\n }\n }\n } catch (e) {\n // URL Params can be manually changed and it will make JSON.parse() fail.\n logger.error(e, { msg: 'LogsListScene: updateFromUrl unexpected error' });\n }\n\n if (Object.keys(stateUpdate).length) {\n this.setState(stateUpdate);\n }\n }\n\n clearSelectedLine() {\n this.setState({\n selectedLine: undefined,\n });\n }\n\n clearDisplayedFields = () => {\n this.setState({ displayedFields: [] });\n if (this.logsPanelScene) {\n this.logsPanelScene.clearDisplayedFields();\n }\n };\n\n public onActivate() {\n const searchParams = new URLSearchParams(locationService.getLocation().search);\n this.setStateFromUrl(searchParams);\n\n if (!this.state.panel) {\n this.updateLogsPanel();\n }\n\n this._subs.add(\n this.subscribeToState((newState, prevState) => {\n if (newState.visualizationType !== prevState.visualizationType) {\n this.updateLogsPanel();\n }\n })\n );\n }\n\n private setStateFromUrl(searchParams: URLSearchParams) {\n const selectedLineUrl = searchParams.get('selectedLine');\n const urlColumnsUrl = searchParams.get('urlColumns');\n const vizTypeUrl = searchParams.get('visualizationType');\n const displayedFieldsUrl = searchParams.get('displayedFields') ?? JSON.stringify(getDisplayedFields(this));\n const tableLogLineState = searchParams.get('tableLogLineState');\n\n this.updateFromUrl({\n selectedLine: selectedLineUrl,\n urlColumns: urlColumnsUrl,\n vizType: vizTypeUrl,\n displayedFields: displayedFieldsUrl,\n tableLogLineState,\n });\n }\n\n public setLogsVizOption = (options: Partial = {}) => {\n if (this.logsPanelScene) {\n this.logsPanelScene.setLogsVizOption(options);\n }\n };\n\n public updateLogsPanel = () => {\n this.setState({\n panel: this.getVizPanel(),\n });\n\n // Subscribe to line filter state so we can pass the current filter between different viz\n if (this.state.panel) {\n const lineFilterScenes = sceneGraph.findDescendents(this.state.panel, LineFilterScene);\n if (lineFilterScenes.length) {\n const lineFilterScene = lineFilterScenes[0];\n this._subs.add(\n lineFilterScene.subscribeToState((newState, prevState) => {\n if (newState.lineFilter !== prevState.lineFilter) {\n this.setState({\n lineFilter: newState.lineFilter,\n });\n }\n })\n );\n }\n }\n };\n\n public setVisualizationType = (type: LogsVisualizationType) => {\n this.setState({\n visualizationType: type,\n });\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.logs_visualization_toggle,\n {\n visualisationType: type,\n }\n );\n setLogsVisualizationType(type);\n };\n\n private getVizPanel() {\n this.logsPanelScene = new LogsPanelScene({});\n\n return new SceneFlexLayout({\n direction: 'column',\n children:\n this.state.visualizationType === 'logs'\n ? [\n new SceneFlexLayout({\n children: [\n new SceneFlexItem({\n body: new LineFilterScene({ lineFilter: this.state.lineFilter }),\n xSizing: 'fill',\n }),\n ],\n }),\n new SceneFlexItem({\n height: 'calc(100vh - 220px)',\n body: this.logsPanelScene,\n }),\n ]\n : [\n new SceneFlexItem({\n body: new LineFilterScene({ lineFilter: this.state.lineFilter }),\n xSizing: 'fill',\n }),\n new SceneFlexItem({\n height: 'calc(100vh - 220px)',\n body: new LogsTableScene({}),\n }),\n ],\n });\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { panel } = model.useState();\n\n if (!panel) {\n return;\n }\n\n return (\n
\n \n
\n );\n };\n}\n\nconst styles = {\n panelWrapper: css({\n // Hack to select internal div\n 'section > div[class$=\"panel-content\"]': css({\n // A components withing the Logs viz sets contain, which creates a new containing block that is not body which breaks the popover menu\n contain: 'none',\n // Prevent overflow from spilling out of parent container\n overflow: 'auto',\n }),\n }),\n};\n","import { LogRowModel } from '@grafana/data';\nimport { IconButton } from '@grafana/ui';\nimport React, { MouseEvent, useCallback, useEffect, useState } from 'react';\n\ninterface Props {\n onClick(event: MouseEvent, row?: LogRowModel): void;\n}\n\nexport const CopyLinkButton = ({ onClick }: Props) => {\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n let timeoutId: ReturnType;\n\n if (copied) {\n timeoutId = setTimeout(() => {\n setCopied(false);\n }, 2000);\n }\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [copied]);\n\n const handleClick = useCallback(\n (event: MouseEvent, row?: LogRowModel) => {\n onClick(event, row);\n setCopied(true);\n },\n [onClick]\n );\n\n return (\n \n );\n};\n","import React from 'react';\nimport { GrotError } from 'Components/GrotError';\nimport { Button } from '@grafana/ui';\n\ninterface Props {\n clearFilters(): void;\n error: string;\n}\n\nexport const LogsPanelError = ({ clearFilters, error }: Props) => {\n return (\n \n
\n

{error}

\n \n
\n
\n );\n};\n","import {\n AdHocFiltersVariable,\n PanelBuilders,\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneObjectUrlSyncConfig,\n SceneObjectUrlValues,\n SceneQueryRunner,\n VizPanel,\n} from '@grafana/scenes';\nimport { DataFrame, getValueFormat, LoadingState, LogRowModel, PanelData } from '@grafana/data';\nimport { getLogOption, getLogsVolumeOption, setDisplayedFields } from '../../services/store';\nimport React, { MouseEvent } from 'react';\nimport { LogsListScene } from './LogsListScene';\nimport { LoadingPlaceholder, useStyles2 } from '@grafana/ui';\nimport { addToFilters, FilterType } from './Breakdowns/AddToFiltersButton';\nimport { getVariableForLabel } from '../../services/fields';\nimport { VAR_FIELDS, VAR_LABELS, VAR_LEVELS, VAR_METADATA } from '../../services/variables';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../services/analytics';\nimport {\n getAdHocFiltersVariable,\n getLineFiltersVariable,\n getValueFromFieldsFilter,\n} from '../../services/variableGetters';\nimport { copyText, generateLogShortlink, resolveRowTimeRangeForSharing } from 'services/text';\nimport { CopyLinkButton } from './CopyLinkButton';\nimport { getLogsPanelSortOrderFromStore, LogOptionsScene } from './LogOptionsScene';\nimport { LogsVolumePanel, logsVolumePanelKey } from './LogsVolumePanel';\nimport { getPanelWrapperStyles, PanelMenu } from '../Panels/PanelMenu';\nimport { ServiceScene } from './ServiceScene';\nimport { LineFilterCaseSensitive, LineFilterOp } from '../../services/filterTypes';\nimport { Options } from '@grafana/schema/dist/esm/raw/composable/logs/panelcfg/x/LogsPanelCfg_types.gen';\nimport { locationService } from '@grafana/runtime';\nimport { narrowLogsSortOrder } from '../../services/narrowing';\nimport { logger } from '../../services/logger';\nimport { LogsSortOrder } from '@grafana/schema';\nimport { getPrettyQueryExpr } from 'services/scenes';\nimport { LogsPanelError } from './LogsPanelError';\nimport { clearVariables } from 'services/variableHelpers';\nimport { isEmptyLogsResult } from 'services/logsFrame';\n\ninterface LogsPanelSceneState extends SceneObjectState {\n body?: VizPanel;\n error?: string;\n logsVolumeCollapsedByError?: boolean;\n sortOrder?: LogsSortOrder;\n wrapLogMessage?: boolean;\n}\n\nexport class LogsPanelScene extends SceneObjectBase {\n protected _urlSync = new SceneObjectUrlSyncConfig(this, {\n keys: ['sortOrder', 'wrapLogMessage'],\n });\n\n constructor(state: Partial) {\n super({\n sortOrder: getLogsPanelSortOrderFromStore(),\n wrapLogMessage: Boolean(getLogOption('wrapLogMessage', false)),\n error: undefined,\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n private setStateFromUrl() {\n const searchParams = new URLSearchParams(locationService.getLocation().search);\n\n this.updateFromUrl({\n sortOrder: searchParams.get('sortOrder'),\n wrapLogMessage: searchParams.get('wrapLogMessage'),\n });\n }\n\n getUrlState() {\n return {\n sortOrder: JSON.stringify(this.state.sortOrder),\n wrapLogMessage: JSON.stringify(this.state.wrapLogMessage),\n };\n }\n\n updateFromUrl(values: SceneObjectUrlValues) {\n const stateUpdate: Partial = {};\n try {\n if (typeof values.sortOrder === 'string' && values.sortOrder) {\n const decodedSortOrder = narrowLogsSortOrder(JSON.parse(values.sortOrder));\n if (decodedSortOrder) {\n stateUpdate.sortOrder = decodedSortOrder;\n this.setLogsVizOption({ sortOrder: decodedSortOrder });\n }\n }\n\n if (typeof values.wrapLogMessage === 'string' && values.wrapLogMessage) {\n const decodedWrapLogMessage = JSON.parse(values.wrapLogMessage);\n if (typeof decodedWrapLogMessage === 'boolean') {\n stateUpdate.wrapLogMessage = decodedWrapLogMessage;\n this.setLogsVizOption({ wrapLogMessage: decodedWrapLogMessage });\n this.setLogsVizOption({ prettifyLogMessage: decodedWrapLogMessage });\n }\n }\n } catch (e) {\n // URL Params can be manually changed and it will make JSON.parse() fail.\n logger.error(e, { msg: 'LogOptionsScene: updateFromUrl unexpected error' });\n }\n\n if (Object.keys(stateUpdate).length) {\n this.setState({ ...stateUpdate });\n }\n }\n\n public onActivate() {\n // Need viz to set options, but setting options will trigger query\n this.setStateFromUrl();\n\n if (!this.state.body) {\n this.setState({\n body: this.getLogsPanel({\n wrapLogMessage: this.state.wrapLogMessage,\n prettifyLogMessage: this.state.wrapLogMessage,\n sortOrder: this.state.sortOrder,\n }),\n });\n }\n\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n this._subs.add(\n serviceScene.subscribeToState((newState, prevState) => {\n if (newState.$data?.state.data?.state === LoadingState.Error) {\n this.handleLogsError(newState.$data?.state.data);\n } else if (\n newState.$data?.state.data?.state === LoadingState.Done &&\n isEmptyLogsResult(newState.$data?.state.data.series)\n ) {\n this.handleNoData();\n } else if (this.state.error) {\n this.clearLogsError();\n }\n if (newState.logsCount !== prevState.logsCount) {\n if (!this.state.body) {\n this.setState({\n body: this.getLogsPanel({\n wrapLogMessage: this.state.wrapLogMessage,\n prettifyLogMessage: this.state.wrapLogMessage,\n sortOrder: this.state.sortOrder,\n }),\n });\n } else {\n this.state.body.setState({\n title: this.getTitle(newState.logsCount),\n });\n }\n }\n })\n );\n }\n\n handleLogsError(data: PanelData) {\n const error = data.errors?.length ? data.errors[0] : data.error;\n const errorResponse = error?.message;\n if (errorResponse) {\n logger.error(new Error('Logs Panel error'), {\n msg: errorResponse,\n status: error.statusText ?? 'N/A',\n type: error.type ?? 'N/A',\n });\n }\n\n let errorMessage = 'Unexpected error response. Please review your filters or try a different time range.';\n if (errorResponse?.includes('parse error')) {\n errorMessage =\n 'Logs could not be retrieved due to invalid filter parameters. Please review your filters and try again.';\n } else if (errorResponse?.includes('response larger than the max message size')) {\n errorMessage =\n 'The response is too large to process. Try narrowing your search or using filters to reduce the data size.';\n }\n\n this.showLogsError(errorMessage);\n }\n\n handleNoData() {\n this.showLogsError('No logs match your search. Please review your filters or try a different time range.');\n }\n\n showLogsError(error: string) {\n const logsVolumeCollapsedByError = this.state.logsVolumeCollapsedByError ?? !getLogsVolumeOption('collapsed');\n\n this.setState({ error, logsVolumeCollapsedByError });\n\n if (logsVolumeCollapsedByError) {\n const logsVolume = sceneGraph.findByKeyAndType(this, logsVolumePanelKey, LogsVolumePanel);\n logsVolume.state.panel?.setState({ collapsed: true });\n }\n }\n\n clearLogsError() {\n if (this.state.logsVolumeCollapsedByError) {\n const logsVolume = sceneGraph.findByKeyAndType(this, logsVolumePanelKey, LogsVolumePanel);\n logsVolume.state.panel?.setState({ collapsed: false });\n }\n\n this.setState({ error: undefined, logsVolumeCollapsedByError: undefined });\n }\n\n onClickShowField = (field: string) => {\n const parent = this.getParentScene();\n const index = parent.state.displayedFields.indexOf(field);\n\n if (index === -1 && this.state.body) {\n const displayedFields = [...parent.state.displayedFields, field];\n this.setLogsVizOption({\n displayedFields,\n });\n parent.setState({ displayedFields });\n setDisplayedFields(this, parent.state.displayedFields);\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.logs_toggle_displayed_field\n );\n }\n };\n\n onClickHideField = (field: string) => {\n const parent = this.getParentScene();\n const index = parent.state.displayedFields.indexOf(field);\n\n if (index >= 0 && this.state.body) {\n const displayedFields = parent.state.displayedFields.filter((displayedField) => field !== displayedField);\n this.setLogsVizOption({\n displayedFields,\n });\n parent.setState({ displayedFields });\n setDisplayedFields(this, parent.state.displayedFields);\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.logs_toggle_displayed_field\n );\n }\n };\n\n setLogsVizOption(options: Partial = {}) {\n if (!this.state.body) {\n return;\n }\n if ('sortOrder' in options && options.sortOrder !== this.state.body.state.options.sortOrder) {\n const $data = sceneGraph.getData(this);\n const queryRunner =\n $data instanceof SceneQueryRunner ? $data : sceneGraph.findDescendents($data, SceneQueryRunner)[0];\n if (queryRunner) {\n queryRunner.runQueries();\n }\n }\n this.state.body.onOptionsChange(options);\n }\n\n clearDisplayedFields = () => {\n if (!this.state.body) {\n return;\n }\n this.setLogsVizOption({\n displayedFields: [],\n });\n setDisplayedFields(this, []);\n };\n\n private getParentScene() {\n return sceneGraph.getAncestor(this, LogsListScene);\n }\n\n private getTitle(logsCount: number | undefined) {\n const valueFormatter = getValueFormat('short');\n const formattedCount = logsCount !== undefined ? valueFormatter(logsCount, 0) : undefined;\n return formattedCount !== undefined ? `Logs (${formattedCount.text}${formattedCount.suffix?.trim()})` : 'Logs';\n }\n\n private getLogsPanel(options: Partial) {\n const parentModel = this.getParentScene();\n const visualizationType = parentModel.state.visualizationType;\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n return PanelBuilders.logs()\n .setTitle(this.getTitle(serviceScene.state.logsCount))\n .setOption('showTime', true)\n .setOption('onClickFilterLabel', this.handleLabelFilterClick)\n .setOption('onClickFilterOutLabel', this.handleLabelFilterOutClick)\n .setOption('isFilterLabelActive', this.handleIsFilterLabelActive)\n .setOption('onClickFilterString', this.handleFilterStringClick)\n .setOption('onClickFilterOutString', this.handleFilterOutStringClick)\n .setOption('onClickShowField', this.onClickShowField)\n .setOption('onClickHideField', this.onClickHideField)\n .setOption('displayedFields', parentModel.state.displayedFields)\n .setOption('sortOrder', options.sortOrder ?? getLogsPanelSortOrderFromStore())\n .setOption('wrapLogMessage', options.wrapLogMessage ?? Boolean(getLogOption('wrapLogMessage', false)))\n .setOption(\n 'prettifyLogMessage',\n options.prettifyLogMessage ?? Boolean(getLogOption('wrapLogMessage', false))\n )\n .setMenu(\n new PanelMenu({\n investigationOptions: { type: 'logs', getLabelName: () => `Logs: ${getPrettyQueryExpr(serviceScene)}` },\n })\n )\n .setOption('showLogContextToggle', true)\n .setShowMenuAlways(true)\n .setOption('enableInfiniteScrolling', true)\n .setOption('onNewLogsReceived', this.updateVisibleRange)\n .setOption('logRowMenuIconsAfter', [])\n .setHeaderActions(\n new LogOptionsScene({ visualizationType, onChangeVisualizationType: parentModel.setVisualizationType })\n )\n .build();\n }\n\n private updateVisibleRange = (newLogs: DataFrame[]) => {\n // Update logs count\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n serviceScene.setState({\n logsCount: newLogs[0].length,\n });\n\n if (serviceScene.state.$data?.state.data?.series) {\n // We need to update the state with the new data without triggering state-dependent changes.\n serviceScene.state.$data.setState({\n ...serviceScene.state.$data.state,\n data: {\n ...serviceScene.state.$data.state.data,\n series: newLogs,\n },\n });\n }\n\n const logsVolumeScene = sceneGraph.findByKeyAndType(this, logsVolumePanelKey, LogsVolumePanel);\n logsVolumeScene.updateVisibleRange(newLogs);\n };\n\n private handleShareLogLineClick = (event: MouseEvent, row?: LogRowModel) => {\n if (row?.rowId && this.state.body) {\n const parent = this.getParentScene();\n const timeRange = resolveRowTimeRangeForSharing(row);\n copyText(\n generateLogShortlink(\n 'panelState',\n {\n logs: { id: row.uid, displayedFields: parent.state.displayedFields },\n },\n timeRange\n )\n );\n }\n };\n\n private handleLabelFilterClick = (key: string, value: string, frame?: DataFrame) => {\n this.handleLabelFilter(key, value, frame, 'toggle');\n };\n\n private handleLabelFilterOutClick = (key: string, value: string, frame?: DataFrame) => {\n this.handleLabelFilter(key, value, frame, 'exclude');\n };\n\n private handleIsFilterLabelActive = (key: string, value: string) => {\n const labels = getAdHocFiltersVariable(VAR_LABELS, this);\n const fields = getAdHocFiltersVariable(VAR_FIELDS, this);\n const levels = getAdHocFiltersVariable(VAR_LEVELS, this);\n const metadata = getAdHocFiltersVariable(VAR_METADATA, this);\n\n const hasKeyValueFilter = (filter: AdHocFiltersVariable | null) => {\n return (\n filter &&\n filter.state.filters.findIndex(\n (filter) => filter.operator === '=' && filter.key === key && filter.value === value\n ) >= 0\n );\n };\n\n // Fields have json encoded values unlike the other variables, get the value for the matching filter and parse it before comparing\n const hasKeyValueFilterField = (filter: AdHocFiltersVariable | null) => {\n if (filter) {\n const fieldFilter = filter.state.filters.find((filter) => filter.operator === '=' && filter.key === key);\n\n if (fieldFilter) {\n const fieldValue = getValueFromFieldsFilter(fieldFilter, key);\n return fieldValue.value === value;\n }\n }\n return false;\n };\n\n return (\n hasKeyValueFilter(labels) ||\n hasKeyValueFilterField(fields) ||\n hasKeyValueFilter(levels) ||\n hasKeyValueFilter(metadata)\n );\n };\n\n private handleFilterOutStringClick = (value: string) => {\n const lineFiltersVar = getLineFiltersVariable(this);\n if (lineFiltersVar) {\n lineFiltersVar.setState({\n filters: [\n ...lineFiltersVar.state.filters,\n {\n operator: LineFilterOp.negativeMatch,\n value,\n key: LineFilterCaseSensitive.caseSensitive,\n keyLabel: lineFiltersVar.state.filters.length.toString(),\n },\n ],\n });\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.logs_popover_line_filter,\n {\n selectionLength: value.length,\n }\n );\n }\n };\n\n private handleFilterStringClick = (value: string) => {\n const lineFiltersVar = getLineFiltersVariable(this);\n if (lineFiltersVar) {\n lineFiltersVar.setState({\n filters: [\n ...lineFiltersVar.state.filters,\n {\n operator: LineFilterOp.match,\n value,\n key: LineFilterCaseSensitive.caseSensitive,\n keyLabel: lineFiltersVar.state.filters.length.toString(),\n },\n ],\n });\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.logs_popover_line_filter,\n {\n selectionLength: value.length,\n }\n );\n }\n };\n\n private handleLabelFilter(key: string, value: string, frame: DataFrame | undefined, operator: FilterType) {\n const variableType = getVariableForLabel(frame, key, this);\n addToFilters(key, value, operator, this, variableType);\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.logs_detail_filter_applied,\n {\n filterType: variableType,\n key,\n action: operator,\n }\n );\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { body, error } = model.useState();\n const styles = useStyles2(getPanelWrapperStyles);\n if (body) {\n return (\n \n {!error && }\n {error && clearVariables(body)} />}\n \n );\n }\n return ;\n };\n}\n","import React from 'react';\n\nimport { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { usePluginComponent } from '@grafana/runtime';\nimport { VAR_LABELS } from 'services/variables';\nimport { getAdHocFiltersVariable } from 'services/variableGetters';\nimport { AdHocVariableFilter } from '@grafana/data';\nimport { getDataSource } from 'services/scenes';\n\ninterface LogsVolumeActionsState extends SceneObjectState {}\n\nexport class LogsVolumeActions extends SceneObjectBase {\n static Component = Component;\n}\n\ntype StreamSelector = Pick;\n\ntype TemporaryExemptionsProps = {\n /** An ordered list of lower-case [a-z]+ string identifiers to provide context clues of where this component is being embedded and how we might want to consider displaying it */\n contextHints?: string[];\n /** Currently selected data source */\n dataSourceUid?: string;\n /** The stream selector, broken down into a list of structured subselector filter items */\n streamSelector?: StreamSelector[];\n};\n\nfunction Component({ model }: SceneComponentProps) {\n const { component: TemporaryExemptionsButton, isLoading } = usePluginComponent(\n 'grafana-adaptivelogs-app/temporary-exemptions/v1'\n );\n\n const labelsVar = getAdHocFiltersVariable(VAR_LABELS, model);\n const { filters } = labelsVar.useState();\n const streamSelector = filters.map(({ key, operator, value }: AdHocVariableFilter) => ({ key, operator, value }));\n\n const dataSourceUid = getDataSource(model);\n\n if (isLoading || !TemporaryExemptionsButton) {\n return null;\n }\n\n return (\n \n );\n}\n","import React from 'react';\n\nimport {\n PanelBuilders,\n SceneComponentProps,\n SceneFlexLayout,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n VizPanel,\n} from '@grafana/scenes';\nimport { LegendDisplayMode, PanelContext, SeriesVisibilityChangeMode, useStyles2 } from '@grafana/ui';\nimport { getQueryRunner, setLogsVolumeFieldConfigs, syncLevelsVisibleSeries } from 'services/panel';\nimport { buildDataQuery, LINE_LIMIT } from 'services/query';\nimport { LEVEL_VARIABLE_VALUE } from 'services/variables';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { getTimeSeriesExpr } from '../../services/expressions';\nimport { toggleLevelFromFilter } from 'services/levels';\nimport { DataFrame, getValueFormat, LoadingState } from '@grafana/data';\nimport { getFieldsVariable, getLabelsVariable, getLevelsVariable } from '../../services/variableGetters';\nimport { areArraysEqual } from '../../services/comparison';\nimport { getPanelWrapperStyles, PanelMenu } from '../Panels/PanelMenu';\nimport { ServiceScene } from './ServiceScene';\nimport { getSeriesVisibleRange, getVisibleRangeFrame } from 'services/logsFrame';\nimport { getLogsVolumeOption, setLogsVolumeOption } from 'services/store';\nimport { IndexScene } from '../IndexScene/IndexScene';\nimport { LogsVolumeActions } from './LogsVolumeActions';\nimport { AddFilterEvent } from './Breakdowns/AddToFiltersButton';\nimport { LevelsVariableScene } from '../IndexScene/LevelsVariableScene';\n\nexport interface LogsVolumePanelState extends SceneObjectState {\n panel?: VizPanel;\n}\n\nexport const logsVolumePanelKey = 'logs-volume-panel';\nexport class LogsVolumePanel extends SceneObjectBase {\n private updatedLogSeries: DataFrame[] | null = null;\n constructor(state: LogsVolumePanelState) {\n super({\n ...state,\n key: logsVolumePanelKey,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n private onActivate() {\n if (!this.state.panel) {\n const panel = this.getVizPanel();\n this.setState({\n panel,\n });\n this.updateContainerHeight(panel);\n }\n\n const labels = getLabelsVariable(this);\n const fields = getFieldsVariable(this);\n\n // Set panel on labels variable filter update\n this._subs.add(\n labels.subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.setState({\n panel: this.getVizPanel(),\n });\n }\n })\n );\n\n // Set Panel on fields variable filter update\n this._subs.add(\n fields.subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.setState({\n panel: this.getVizPanel(),\n });\n }\n })\n );\n\n // trigger variable render on AddFilterEvent, set filter state to trigger logs panel query\n this._subs.add(\n this.subscribeToEvent(AddFilterEvent, (event) => {\n if (event.key === LEVEL_VARIABLE_VALUE) {\n const levelsVariableScene = sceneGraph.findObject(this, (obj) => obj instanceof LevelsVariableScene);\n if (levelsVariableScene instanceof LevelsVariableScene) {\n const levelsVar = getLevelsVariable(this);\n levelsVar.setState({ filters: levelsVar.state.filters });\n }\n }\n })\n );\n }\n\n private getTitle(totalLogsCount: number | undefined, logsCount: number | undefined) {\n const indexScene = sceneGraph.getAncestor(this, IndexScene);\n const maxLines = indexScene.state.ds?.maxLines ?? LINE_LIMIT;\n const valueFormatter = getValueFormat('short');\n const formattedTotalCount = totalLogsCount !== undefined ? valueFormatter(totalLogsCount, 0) : undefined;\n // The instant query (totalLogsCount) doesn't return good results for small result sets, if we're below the max number of lines, use the logs query result instead.\n if (totalLogsCount === undefined && logsCount !== undefined && logsCount < maxLines) {\n const formattedCount = valueFormatter(logsCount, 0);\n return formattedCount !== undefined\n ? `Log volume (${formattedCount.text}${formattedCount.suffix?.trim()})`\n : 'Log volume';\n }\n return formattedTotalCount !== undefined\n ? `Log volume (${formattedTotalCount.text}${formattedTotalCount.suffix?.trim()})`\n : 'Log volume';\n }\n\n private getVizPanel() {\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const viz = PanelBuilders.timeseries()\n .setTitle(this.getTitle(serviceScene.state.totalLogsCount, serviceScene.state.logsCount))\n .setOption('legend', { showLegend: true, calcs: ['sum'], displayMode: LegendDisplayMode.List })\n .setUnit('short')\n .setMenu(new PanelMenu({ investigationOptions: { labelName: 'level' } }))\n .setCollapsible(true)\n .setCollapsed(getLogsVolumeOption('collapsed'))\n .setHeaderActions(new LogsVolumeActions({}))\n .setShowMenuAlways(true)\n .setData(\n getQueryRunner([\n buildDataQuery(getTimeSeriesExpr(this, LEVEL_VARIABLE_VALUE, false), {\n legendFormat: `{{${LEVEL_VARIABLE_VALUE}}}`,\n }),\n ])\n );\n\n setLogsVolumeFieldConfigs(viz);\n\n const panel = viz.build();\n panel.setState({\n extendPanelContext: (_, context) => this.extendTimeSeriesLegendBus(context),\n });\n\n this._subs.add(\n panel.subscribeToState((newState, prevState) => {\n if (newState.collapsed !== prevState.collapsed) {\n this.updateContainerHeight(panel);\n setLogsVolumeOption('collapsed', newState.collapsed ? 'true' : undefined);\n }\n })\n );\n\n this._subs.add(\n panel.state.$data?.subscribeToState((newState) => {\n if (newState.data?.state !== LoadingState.Done) {\n return;\n }\n if (serviceScene.state.$data?.state.data?.state === LoadingState.Done && !newState.data.annotations?.length) {\n this.updateVisibleRange(serviceScene.state.$data?.state.data?.series);\n } else {\n this.displayVisibleRange();\n }\n syncLevelsVisibleSeries(panel, newState.data.series, this);\n })\n );\n\n this._subs.add(\n serviceScene.state.$data?.subscribeToState((newState) => {\n if (newState.data?.state === LoadingState.Done) {\n this.updateVisibleRange(newState.data.series);\n }\n })\n );\n\n this._subs.add(\n serviceScene.subscribeToState((newState, prevState) => {\n if (newState.totalLogsCount !== prevState.totalLogsCount || newState.logsCount !== undefined) {\n if (!this.state.panel) {\n this.setState({\n panel: this.getVizPanel(),\n });\n } else {\n this.state.panel.setState({\n title: this.getTitle(newState.totalLogsCount, newState.logsCount),\n });\n }\n }\n })\n );\n\n return panel;\n }\n\n public updateContainerHeight(panel: VizPanel) {\n const containerLayout = sceneGraph.getAncestor(panel, SceneFlexLayout);\n const height = panel.state.collapsed ? 35 : Math.max(Math.round(window.innerHeight * 0.2), 100);\n containerLayout.setState({\n minHeight: height,\n height: height,\n maxHeight: height,\n });\n }\n\n public updateVisibleRange(data: DataFrame[] = []) {\n this.updatedLogSeries = data;\n this.displayVisibleRange();\n }\n\n private displayVisibleRange() {\n const panel = this.state.panel;\n if (\n !panel ||\n !panel.state.$data?.state.data ||\n panel.state.$data?.state.data.state !== LoadingState.Done ||\n !this.updatedLogSeries\n ) {\n return;\n }\n const visibleRange = getSeriesVisibleRange(this.updatedLogSeries);\n this.updatedLogSeries = null;\n panel.state.$data.setState({\n data: {\n ...panel.state.$data.state.data,\n annotations: [getVisibleRangeFrame(visibleRange.start, visibleRange.end)],\n },\n });\n }\n\n private extendTimeSeriesLegendBus = (context: PanelContext) => {\n const levelFilter = getLevelsVariable(this);\n this._subs.add(\n levelFilter?.subscribeToState(() => {\n const panel = this.state.panel;\n if (!panel?.state.$data?.state.data?.series) {\n return;\n }\n\n syncLevelsVisibleSeries(panel, panel?.state.$data?.state.data?.series, this);\n })\n );\n\n context.onToggleSeriesVisibility = (label: string, mode: SeriesVisibilityChangeMode) => {\n const action = toggleLevelFromFilter(label, this);\n this.publishEvent(new AddFilterEvent('legend', 'include', LEVEL_VARIABLE_VALUE, label), true);\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.level_in_logs_volume_clicked,\n {\n level: label,\n action,\n }\n );\n };\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { panel } = model.useState();\n if (!panel) {\n return;\n }\n const styles = useStyles2(getPanelWrapperStyles);\n\n return (\n \n \n \n );\n };\n}\n","import {\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneTimeRangeLike,\n} from '@grafana/scenes';\nimport { ButtonGroup, Dropdown, IconName, Menu, MenuGroup, ToolbarButton } from '@grafana/ui';\nimport React from 'react';\nimport { config, getAppEvents, getBackendSrv, locationService, reportInteraction } from '@grafana/runtime';\nimport { AppEvents, toUtc, urlUtil } from '@grafana/data';\nimport { copyText } from '../../services/text';\n\ninterface ShortLinkMenuItemData {\n key: string;\n label: string;\n icon: IconName;\n getUrl: Function;\n shorten: boolean;\n absTime: boolean;\n}\n\ninterface ShortLinkGroupData {\n key: string;\n label: string;\n items: ShortLinkMenuItemData[];\n}\n\nexport interface ShareButtonSceneState extends SceneObjectState {\n lastSelected: ShortLinkMenuItemData;\n isOpen: boolean;\n /**\n * Reference to $timeRange\n */\n getSceneTimeRange?: () => SceneTimeRangeLike;\n /**\n * Callback on link copy\n */\n onCopyLink?: (shortened: boolean, absTime: boolean, url?: string) => void;\n}\n\nexport class ShareButtonScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({ isOpen: false, lastSelected: defaultMode, ...state });\n }\n\n public setIsOpen(isOpen: boolean) {\n this.setState({ isOpen });\n }\n\n public onCopyLink(shorten: boolean, absTime: boolean, url?: string) {\n if (shorten) {\n createAndCopyShortLink(url || global.location.href);\n reportInteraction('grafana_explore_shortened_link_clicked', { isAbsoluteTime: absTime });\n } else {\n copyText(\n url !== undefined\n ? `${window.location.protocol}//${window.location.host}${config.appSubUrl}${url}`\n : global.location.href\n );\n\n if (this.state.onCopyLink) {\n this.state.onCopyLink(shorten, absTime, url);\n }\n }\n }\n\n static MenuActions = ({ model }: SceneComponentProps) => {\n const menuOptions: ShortLinkGroupData[] = [\n {\n key: 'normal',\n label: 'Normal URL links',\n items: [\n {\n key: 'copy-shortened-link',\n icon: 'link',\n label: 'Copy shortened URL',\n getUrl: () => undefined,\n shorten: true,\n absTime: false,\n },\n {\n key: 'copy-link',\n icon: 'link',\n label: 'Copy URL',\n getUrl: () => undefined,\n shorten: false,\n absTime: false,\n },\n ],\n },\n {\n key: 'timesync',\n label: 'Time-sync URL links (share with time range intact)',\n items: [\n {\n key: 'copy-short-link-abs-time',\n icon: 'clock-nine',\n label: 'Copy absolute shortened URL',\n shorten: true,\n getUrl: () => {\n return constructAbsoluteUrl(\n model.state.getSceneTimeRange !== undefined\n ? model.state.getSceneTimeRange()\n : sceneGraph.getTimeRange(model)\n );\n },\n absTime: true,\n },\n {\n key: 'copy-link-abs-time',\n icon: 'clock-nine',\n label: 'Copy absolute URL',\n shorten: false,\n getUrl: () => {\n return constructAbsoluteUrl(\n model.state.getSceneTimeRange !== undefined\n ? model.state.getSceneTimeRange()\n : sceneGraph.getTimeRange(model)\n );\n },\n absTime: true,\n },\n ],\n },\n ];\n\n return (\n \n {menuOptions.map((groupOption) => {\n return (\n \n {groupOption.items.map((option) => {\n return (\n {\n const url = option.getUrl();\n model.onCopyLink(option.shorten, option.absTime, url);\n model.setState({\n lastSelected: option,\n });\n }}\n />\n );\n })}\n \n );\n })}\n \n );\n };\n\n static Component = ({ model }: SceneComponentProps) => {\n const { lastSelected, isOpen } = model.useState();\n\n return (\n \n {\n const url = lastSelected.getUrl();\n model.onCopyLink(lastSelected.shorten, lastSelected.absTime, url);\n }}\n aria-label={'Copy shortened URL'}\n >\n Share\n \n }\n placement=\"bottom-end\"\n onVisibleChange={model.setIsOpen.bind(model)}\n >\n \n \n \n );\n };\n}\n\nconst defaultMode: ShortLinkMenuItemData = {\n key: 'copy-link',\n label: 'Copy shortened URL',\n icon: 'share-alt',\n getUrl: () => undefined,\n shorten: true,\n absTime: false,\n};\n\n// Adapted from grafana/grafana/public/app/core/utils/shortLinks.ts shortLinks.ts\nfunction buildHostUrl() {\n return `${window.location.protocol}//${window.location.host}${config.appSubUrl}`;\n}\n\nfunction getRelativeURLPath(url: string) {\n let path = url.replace(buildHostUrl(), '');\n return path.startsWith('/') ? path.substring(1, path.length) : path;\n}\n\nexport const createShortLink = async function (path: string) {\n const appEvents = getAppEvents();\n try {\n const shortLink = await getBackendSrv().post(`/api/short-urls`, {\n path: getRelativeURLPath(path),\n });\n return shortLink.url;\n } catch (err) {\n console.error('Error when creating shortened link: ', err);\n\n appEvents.publish({\n type: AppEvents.alertError.name,\n payload: ['Error generating shortened link'],\n });\n }\n};\n\nexport const createAndCopyShortLink = async (path: string) => {\n const appEvents = getAppEvents();\n const shortLink = await createShortLink(path);\n if (shortLink) {\n copyText(shortLink);\n appEvents.publish({\n type: AppEvents.alertSuccess.name,\n payload: ['Shortened link copied to clipboard'],\n });\n } else {\n appEvents.publish({\n type: AppEvents.alertError.name,\n payload: ['Error generating shortened link'],\n });\n }\n};\n\n/**\n * Adapted from /grafana/grafana/public/app/features/explore/utils/links.ts\n * Returns the current URL with absolute time range\n */\nconst constructAbsoluteUrl = (timeRange: SceneTimeRangeLike): string => {\n const from = toUtc(timeRange.state.value.from);\n const to = toUtc(timeRange.state.value.to);\n const location = locationService.getLocation();\n const searchParams = urlUtil.getUrlSearchParams();\n searchParams['from'] = from.toISOString();\n searchParams['to'] = to.toISOString();\n return urlUtil.renderUrl(location.pathname, searchParams);\n};\n","import { sceneGraph, SceneObjectState } from '@grafana/scenes';\nimport { IndexScene } from '../../../IndexScene/IndexScene';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { logger } from '../../../../services/logger';\nimport { addCurrentUrlToHistory } from '../../../../services/navigate';\n\nexport interface FilterByPatternsButtonState extends SceneObjectState {\n pattern: string;\n type: 'exclude' | 'include' | 'undo';\n}\n\nexport interface FilterByPatternsState extends FilterByPatternsButtonState {\n indexScene: IndexScene;\n}\n\nexport function onPatternClick(props: FilterByPatternsState) {\n const { indexScene: staleIndex, pattern, type } = { ...props };\n\n const indexScene = sceneGraph.getAncestor(staleIndex, IndexScene);\n\n if (!indexScene) {\n logger.warn('logs exploration scene not found');\n return;\n }\n\n addCurrentUrlToHistory();\n const { patterns = [] } = indexScene.state;\n\n // Remove the pattern if it's already there\n const filteredPatterns = patterns.filter((pat) => pat.pattern !== pattern);\n // Analytics\n const includePatternsLength = filteredPatterns.filter((p) => p.type === 'include')?.length ?? 0;\n const excludePatternsLength = filteredPatterns.filter((p) => p.type === 'exclude')?.length ?? 0;\n reportAppInteraction(USER_EVENTS_PAGES.service_details, USER_EVENTS_ACTIONS.service_details.pattern_selected, {\n type: type,\n includePatternsLength: includePatternsLength + (type === 'include' ? 1 : 0),\n excludePatternsLength: excludePatternsLength + (type === 'exclude' ? 1 : 0),\n });\n\n // If we have type undo, then we don't need to add the pattern\n if (type === 'undo') {\n indexScene.setState({\n patterns: filteredPatterns,\n });\n } else {\n // Otherwise, add the pattern\n indexScene.setState({\n patterns: [...filteredPatterns, { pattern: pattern, type: type }],\n });\n }\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n logsStatsRow: css({\n margin: `${theme.spacing(1.15)}px 0`,\n }),\n logsStatsRowActive: css({\n color: theme.colors.primary.text,\n position: 'relative',\n }),\n logsStatsRowLabel: css({\n display: 'flex',\n marginBottom: '1px',\n }),\n logsStatsRowValue: css({\n flex: 1,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n }),\n logsStatsRowCount: css({\n textAlign: 'right',\n marginLeft: theme.spacing(0.75),\n }),\n logsStatsRowPercent: css({\n textAlign: 'right',\n marginLeft: theme.spacing(0.75),\n width: theme.spacing(4.5),\n }),\n logsStatsRowBar: css({\n height: theme.spacing(0.5),\n overflow: 'hidden',\n background: theme.colors.text.disabled,\n }),\n logsStatsRowInnerBar: css({\n height: theme.spacing(0.5),\n overflow: 'hidden',\n background: theme.colors.primary.main,\n }),\n});\n\nexport interface Props {\n active?: boolean;\n count: number;\n proportion: number;\n value?: string;\n}\n\nexport const PatternFieldLabelStatsRow = ({ active, count, proportion, value }: Props) => {\n const style = useStyles2(getStyles);\n const percent = `${Math.round(proportion * 100)}%`;\n const barStyle = { width: percent };\n\n return (\n
\n
\n
\n {value}\n
\n
{count}
\n
{percent}
\n
\n
\n
\n
\n
\n );\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { LogLabelStatsModel, GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\n//Components\nimport { PatternFieldLabelStatsRow } from './PatternFieldLabelStatsRow';\n\nconst STATS_ROW_LIMIT = 10;\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n logsStats: css({\n background: 'inherit',\n color: theme.colors.text.primary,\n wordBreak: 'break-all',\n width: 'fit-content',\n maxHeight: '40vh',\n overflowY: 'auto',\n marginTop: theme.spacing(1),\n }),\n logsStatsHeader: css({\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n display: 'flex',\n }),\n logsStatsTitle: css({\n fontWeight: theme.typography.fontWeightMedium,\n paddingRight: theme.spacing(2),\n display: 'inline-block',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n flexGrow: 1,\n }),\n logsStatsClose: css({\n cursor: 'pointer',\n }),\n logsStatsBody: css({\n padding: '5px 0px',\n }),\n});\n\ninterface PatternFieldLabelStatsProps {\n stats: LogLabelStatsModel[];\n value: string;\n}\n\nexport const PatternFieldLabelStats = (props: PatternFieldLabelStatsProps) => {\n const style = useStyles2(getStyles);\n\n const { stats, value } = props;\n\n const topRows = stats.slice(0, STATS_ROW_LIMIT);\n let activeRow = topRows.find((row) => row.value === value);\n let otherRows = stats.slice(STATS_ROW_LIMIT);\n const insertActiveRow = !activeRow;\n\n // Remove active row from other to show extra\n if (insertActiveRow) {\n activeRow = otherRows.find((row) => row.value === value);\n otherRows = otherRows.filter((row) => row.value !== value);\n }\n\n const otherCount = otherRows.reduce((sum, row) => sum + row.count, 0);\n const topCount = topRows.reduce((sum, row) => sum + row.count, 0);\n const total = topCount + otherCount;\n\n // Combine topRows and otherRows\n let combinedRows = [...topRows];\n\n // If there's an \"Other\" category, add it to combinedRows\n if (otherCount > 0) {\n combinedRows.push({ value: 'Other', count: otherCount, proportion: otherCount / total });\n }\n\n // Sort combinedRows by count in descending order\n combinedRows.sort((a, b) => b.count - a.count);\n\n return (\n
\n
\n
From a sample of {total} rows found
\n
\n
\n {combinedRows.map((stat) => (\n \n ))}\n
\n
\n );\n};\n","import React, { useMemo, useRef, useState } from 'react';\nimport { AdHocFiltersVariable, sceneGraph } from '@grafana/scenes';\nimport { Spinner, Toggletip, useStyles2 } from '@grafana/ui';\nimport { getLokiDatasource } from 'services/scenes';\nimport { IndexScene } from 'Components/IndexScene/IndexScene';\nimport { buildDataQuery } from 'services/query';\nimport { PatternFieldLabelStats } from './PatternFieldLabelStats';\nimport { GrafanaTheme2, LoadingState, LogLabelStatsModel, TimeRange } from '@grafana/data';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { css } from '@emotion/css';\nimport { getLabelsVariable } from '../../../../services/variableGetters';\n\ninterface PatternNameLabelProps {\n exploration: IndexScene;\n pattern: string;\n maxLines: number;\n}\n\nexport const PatternNameLabel = ({ exploration, pattern, maxLines }: PatternNameLabelProps) => {\n const patternIndices = extractPatternIndices(pattern);\n const [stats, setStats] = useState(undefined);\n const [statsError, setStatsError] = useState(false);\n const styles = useStyles2(getStyles);\n\n // Refs to store the previous values of query and timeRange\n const previousQueryRef = useRef(null);\n const previousTimeRangeRef = useRef(null);\n\n const handlePatternClick = async () => {\n reportAppInteraction(USER_EVENTS_PAGES.service_details, USER_EVENTS_ACTIONS.service_details.pattern_field_clicked);\n const query = constructQuery(pattern, patternIndices, getLabelsVariable(exploration));\n const datasource = await getLokiDatasource(exploration);\n const currentTimeRange = sceneGraph.getTimeRange(exploration).state.value;\n\n // If the query and timeRange are the same as the previous ones, do not re-query\n if (stats && query === previousQueryRef.current && currentTimeRange === previousTimeRangeRef.current) {\n return;\n }\n\n // Update the refs with the new values\n previousQueryRef.current = query;\n previousTimeRangeRef.current = currentTimeRange;\n\n datasource\n ?.query({\n requestId: '1',\n interval: '',\n intervalMs: 0,\n scopedVars: {},\n range: currentTimeRange,\n targets: [buildDataQuery(query, { maxLines })],\n timezone: '',\n app: '',\n startTime: 0,\n })\n .forEach((result) => {\n if (result.state === LoadingState.Done && !result.errors?.length) {\n setStats(convertResultToStats(result, patternIndices.length, maxLines));\n setStatsError(false);\n } else if (result.state === LoadingState.Error || result.errors?.length) {\n setStats(undefined);\n setStatsError(true);\n }\n });\n };\n\n const parts = useMemo(() => pattern.split('<_>'), [pattern]);\n\n return (\n
\n {parts.map((part, index) => (\n \n {part}\n {index !== patternIndices.length && (\n \n {stats && stats[index].length > 0 && }\n {stats && stats[index].length === 0 && (\n
No available stats for this field in the current timestamp.
\n )}\n {!stats && statsError &&
Could not load stats for this pattern.
}\n {!stats && !statsError && (\n
\n \n
\n )}\n \n }\n >\n <_>\n \n )}\n
\n ))}\n
\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n pattern: css({\n cursor: 'pointer',\n backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.1),\n margin: '0 2px',\n\n '&:hover': {\n backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.2),\n },\n }),\n };\n}\n\n// Convert the result to statistics data structure\nfunction convertResultToStats(result: any, fieldCount: number, maxLines: number): LogLabelStatsModel[][] {\n const fieldStatsMap = new Map>();\n\n // Populate the fieldStatsMap with values from the result\n result.data[0].fields[0].values.toArray().forEach((value: Record) => {\n Object.keys(value).forEach((key) => {\n if (!fieldStatsMap.has(key)) {\n fieldStatsMap.set(key, new Map());\n }\n fieldStatsMap.get(key)?.set(value[key], (fieldStatsMap.get(key)?.get(value[key]) || 0) + 1);\n });\n });\n\n const stats: LogLabelStatsModel[][] = [];\n\n // Construct stats array from fieldStatsMap\n for (let i = 0; i <= fieldCount; i++) {\n const fieldStats: LogLabelStatsModel[] = [];\n fieldStatsMap.get(`field_${i + 1}`)?.forEach((count, key) => {\n fieldStats.push({ value: key, count, proportion: count / maxLines });\n });\n fieldStats.sort((a, b) => b.count - a.count);\n stats.push(fieldStats);\n }\n\n return stats;\n}\n\n// Extract indices of the pattern '<_>' in the given string\nfunction extractPatternIndices(pattern: string): number[] {\n const indices: number[] = [];\n let currentIndex = pattern.indexOf('<_>');\n\n while (currentIndex !== -1) {\n indices.push(currentIndex);\n currentIndex = pattern.indexOf('<_>', currentIndex + 1);\n }\n return indices;\n}\n\n// Construct the query string based on pattern and other conditions\nfunction constructQuery(pattern: string, patternIndices: number[], filters: AdHocFiltersVariable): string {\n let fieldIndex = 1;\n const patternExtractor = pattern.replace(/<_>/g, () => ``);\n const filterExpression = filters.state.filterExpression;\n const fields = patternIndices.map((_value, index) => `field_${index + 1}`).join(' ,');\n return `{${filterExpression}} |> \\`${pattern}\\` | pattern \\`${patternExtractor}\\` | keep ${fields} | line_format \"\"`;\n}\n","import {\n PanelBuilders,\n SceneComponentProps,\n SceneDataProviderResult,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneReactObject,\n VizPanel,\n} from '@grafana/scenes';\nimport React from 'react';\n\nimport { LoadingState } from '@grafana/data';\nimport { Alert, Button } from '@grafana/ui';\nimport {\n AppliedPattern,\n LOG_STREAM_SELECTOR_EXPR,\n PATTERNS_SAMPLE_SELECTOR_EXPR,\n VAR_PATTERNS_EXPR,\n} from '../../../../services/variables';\nimport { buildDataQuery } from '../../../../services/query';\nimport { getQueryRunner } from '../../../../services/panel';\nimport { PatternsViewTableScene } from './PatternsViewTableScene';\nimport { emptyStateStyles } from '../FieldsBreakdownScene';\nimport { getFieldsVariable, getLevelsVariable, getLineFiltersVariable } from '../../../../services/variableGetters';\nimport { LokiQuery } from '../../../../services/lokiQuery';\nimport { logger } from '../../../../services/logger';\nimport { renderPatternFilters } from '../../../../services/renderPatternFilters';\n\ninterface PatternsLogsSampleSceneState extends SceneObjectState {\n pattern: string;\n body?: SceneFlexLayout;\n}\nexport class PatternsLogsSampleScene extends SceneObjectBase {\n constructor(state: PatternsLogsSampleSceneState) {\n super(state);\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n private onActivate() {\n if (this.state.body) {\n return;\n }\n\n // We start by querying with the users current query context\n const queryWithFilters = buildDataQuery(LOG_STREAM_SELECTOR_EXPR);\n this.replacePatternsInQuery(queryWithFilters);\n\n // but if that fails to return results, we fire the query without the filters, instead of showing no-data in the viz\n const queryRunnerWithFilters = getQueryRunner([queryWithFilters]);\n queryRunnerWithFilters.getResultsStream().subscribe((value) => {\n this.onQueryWithFiltersResult(value);\n });\n\n this.setState({\n body: new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneFlexItem({\n body: undefined,\n width: '100%',\n height: 0,\n }),\n new SceneFlexItem({\n height: 300,\n width: '100%',\n body: PanelBuilders.logs()\n .setHoverHeader(true)\n .setOption('showLogContextToggle', true)\n .setOption('showTime', true)\n .setData(queryRunnerWithFilters)\n .build(),\n }),\n ],\n }),\n });\n }\n\n private replacePatternsInQuery(queryWithFilters: LokiQuery) {\n const pendingPattern: AppliedPattern = {\n pattern: this.state.pattern,\n type: 'include',\n };\n const patternsLine = renderPatternFilters([pendingPattern]);\n queryWithFilters.expr = queryWithFilters.expr.replace(VAR_PATTERNS_EXPR, patternsLine);\n }\n\n private clearFilters = () => {\n const filterVariable = getFieldsVariable(this);\n const lineFiltersVariable = getLineFiltersVariable(this);\n const levelsVariable = getLevelsVariable(this);\n filterVariable.setState({\n filters: [],\n });\n levelsVariable.setState({\n filters: [],\n });\n if (lineFiltersVariable.state.filters.length) {\n lineFiltersVariable.setState({\n filters: [],\n });\n\n const noticeFlexItem = this.getNoticeFlexItem();\n\n // The query we just fired is already correct after we clear the filters, we just need to hide the warning, and allow filtering\n noticeFlexItem?.setState({\n isHidden: true,\n });\n\n this.removePatternFromFilterExclusion();\n }\n };\n\n private removePatternFromFilterExclusion() {\n const patternsViewTableScene = sceneGraph.getAncestor(this, PatternsViewTableScene);\n const patternsNotMatchingFilters = patternsViewTableScene.state.patternsNotMatchingFilters ?? [];\n\n const index = patternsNotMatchingFilters.findIndex((pattern) => pattern === this.state.pattern);\n\n if (index !== -1) {\n patternsNotMatchingFilters.splice(index, 1);\n // remove this pattern, as they can filter by this pattern again\n patternsViewTableScene.setState({\n patternsNotMatchingFilters: patternsNotMatchingFilters,\n });\n }\n }\n\n /**\n * If the first query with the users filters applied fails, we run another one after removing the filters\n * @param value\n */\n private onQueryError = (value: SceneDataProviderResult) => {\n if (\n (value.data.state === LoadingState.Done &&\n (value.data.series.length === 0 || value.data.series.every((frame) => frame.length === 0))) ||\n value.data.state === LoadingState.Error\n ) {\n // Logging an error so loki folks can debug why some patterns returned from the API seem to fail.\n let logContext;\n try {\n logContext = {\n pattern: this.state.pattern,\n traceIds: JSON.stringify(value.data.traceIds),\n request: JSON.stringify(value.data.request),\n msg: 'onQueryError',\n };\n } catch (e) {\n logContext = {\n pattern: this.state.pattern,\n msg: 'Failed to encode context',\n };\n }\n\n // Logging an error so loki folks can debug why some patterns returned from the API seem to fail.\n logger.error(new Error('Pattern sample query returns no results'), logContext);\n\n this.setWarningMessage(\n \n This pattern returns no logs.\n \n );\n\n const panelFlexItem = this.getVizFlexItem();\n\n // Run another query without the filters so we can still show log lines of what the pattern looks like.\n if (panelFlexItem instanceof SceneFlexItem) {\n panelFlexItem.setState({\n isHidden: true,\n });\n }\n }\n };\n\n private setWarningMessage(reactNode: React.ReactNode) {\n const noticeFlexItem = this.getNoticeFlexItem();\n const vizFlexItem = this.getVizFlexItem();\n\n if (noticeFlexItem instanceof SceneFlexItem) {\n noticeFlexItem.setState({\n isHidden: false,\n height: 'auto',\n body: new SceneReactObject({\n reactNode: reactNode,\n }),\n });\n }\n return vizFlexItem;\n }\n\n private getNoticeFlexItem() {\n const children = this.getFlexItemChildren();\n return children?.[0];\n }\n private getVizFlexItem() {\n const children = this.getFlexItemChildren();\n return children?.[1];\n }\n\n private getFlexItemChildren() {\n return this.state.body?.state.children;\n }\n\n /**\n * Callback to subscription of pattern sample query with all of the current query filters applied.\n * If this query fails to return data, we show a warning, and attempt the pattern sample query again without applying the existing filters.\n * We also add the pattern to the state of the PatternsTableViewScene so we can hide the filter buttons for this pattern, as including it would break the query\n * @param value\n */\n private onQueryWithFiltersResult = (value: SceneDataProviderResult) => {\n const queryWithoutFilters = buildDataQuery(PATTERNS_SAMPLE_SELECTOR_EXPR);\n this.replacePatternsInQuery(queryWithoutFilters);\n\n const queryRunnerWithoutFilters = getQueryRunner([queryWithoutFilters]);\n\n // Subscribe to the secondary query, so we can log errors and update the UI\n queryRunnerWithoutFilters.getResultsStream().subscribe(this.onQueryError);\n\n if (\n value.data.state === LoadingState.Done &&\n (value.data.series.length === 0 || value.data.series.every((frame) => frame.length === 0))\n ) {\n const noticeFlexItem = this.getNoticeFlexItem();\n const panelFlexItem = this.getVizFlexItem();\n\n // Add a warning notice that the patterns shown will not show up in their current log results due to their existing filters.\n if (noticeFlexItem instanceof SceneFlexItem) {\n noticeFlexItem.setState({\n isHidden: false,\n height: 'auto',\n body: new SceneReactObject({\n reactNode: (\n \n The logs returned by this pattern do not match the current query filters.\n \n \n ),\n }),\n });\n }\n\n // Run another query without the filters so we can still show log lines of what the pattern looks like.\n if (panelFlexItem instanceof SceneFlexItem) {\n const panel = panelFlexItem.state.body;\n if (panel instanceof VizPanel) {\n panel?.setState({\n $data: queryRunnerWithoutFilters,\n });\n }\n }\n this.excludeThisPatternFromFiltering();\n }\n\n if (value.data.state === LoadingState.Error) {\n this.onQueryError(value);\n }\n };\n\n private excludeThisPatternFromFiltering() {\n const patternsViewTableScene = sceneGraph.getAncestor(this, PatternsViewTableScene);\n const patternsThatDontMatchCurrentFilters = patternsViewTableScene.state.patternsNotMatchingFilters ?? [];\n\n // Add this pattern to the array of patterns that don't match current filters\n patternsViewTableScene.setState({\n patternsNotMatchingFilters: [...patternsThatDontMatchCurrentFilters, this.state.pattern],\n });\n }\n\n public static Component({ model }: SceneComponentProps) {\n const { body } = model.useState();\n if (body) {\n return ;\n }\n return null;\n }\n}\n","import React, { useEffect } from 'react';\nimport { PatternsLogsSampleScene } from './PatternsLogsSampleScene';\nimport { PatternsTableCellData, PatternsViewTableScene } from './PatternsViewTableScene';\n\ninterface ExpandedRowProps {\n tableViz: PatternsViewTableScene;\n row: PatternsTableCellData;\n}\n\nexport function PatternsTableExpandedRow({ tableViz, row }: ExpandedRowProps) {\n const { expandedRows } = tableViz.useState();\n\n const rowScene = expandedRows?.find((scene) => scene.state.key === row.pattern);\n\n useEffect(() => {\n if (!rowScene) {\n const newRowScene = buildExpandedRowScene(row.pattern);\n tableViz.setState({ expandedRows: [...(tableViz.state.expandedRows ?? []), newRowScene] });\n }\n }, [row, tableViz, rowScene]);\n\n return rowScene ? : null;\n}\n\nfunction buildExpandedRowScene(pattern: string) {\n return new PatternsLogsSampleScene({\n pattern: pattern,\n key: pattern,\n });\n}\n","import {\n PanelBuilders,\n SceneComponentProps,\n SceneDataNode,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n} from '@grafana/scenes';\nimport { PatternFrame, PatternsBreakdownScene } from './PatternsBreakdownScene';\nimport React from 'react';\nimport { IndexScene } from '../../../IndexScene/IndexScene';\nimport { DataFrame, GrafanaTheme2, LoadingState, PanelData, scaledUnits } from '@grafana/data';\nimport { AxisPlacement, Column, InteractiveTable, TooltipDisplayMode, useTheme2 } from '@grafana/ui';\nimport { CellProps } from 'react-table';\nimport { css, cx } from '@emotion/css';\nimport { onPatternClick } from './FilterByPatternsButton';\nimport { FilterButton } from '../../../FilterButton';\nimport { config } from '@grafana/runtime';\nimport { testIds } from '../../../../services/testIds';\nimport { PatternsFrameScene } from './PatternsFrameScene';\nimport { PatternNameLabel } from './PatternNameLabel';\nimport { getExplorationFor } from 'services/scenes';\nimport { PatternsTableExpandedRow } from './PatternsTableExpandedRow';\nimport { LINE_LIMIT } from '../../../../services/query';\nimport { AppliedPattern } from '../../../../services/variables';\n\n// copied from from grafana repository packages/grafana-data/src/valueFormats/categories.ts\n// that is used in Grafana codebase for \"short\" units\nconst SCALED_UNITS = ['', ' K', ' Mil', ' Bil', ' Tri', ' Quadr', ' Quint', ' Sext', ' Sept'];\nexport interface SingleViewTableSceneState extends SceneObjectState {\n // The local copy of the pattern frames, the parent breakdown scene decides if we get the filtered subset or not, in this scene we just present the data\n patternFrames: PatternFrame[] | undefined;\n expandedRows?: SceneObject[];\n\n // An array of patterns to exclude links\n patternsNotMatchingFilters?: string[];\n maxLines?: number;\n}\n\nexport interface PatternsTableCellData {\n pattern: string;\n dataFrame: DataFrame;\n sum: number;\n includeLink: () => void;\n excludeLink: () => void;\n undoLink: () => void;\n}\n\nexport class PatternsViewTableScene extends SceneObjectBase {\n constructor(state: SingleViewTableSceneState) {\n super(state);\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n onActivate() {\n const indexScene = sceneGraph.getAncestor(this, IndexScene);\n const maxLines = indexScene.state.ds?.maxLines;\n this.setState({ maxLines });\n }\n\n public static Component = PatternTableViewSceneComponent;\n\n /**\n * Build columns for interactive table (wrapper for react-table v7)\n * @param total\n * @param appliedPatterns\n * @param theme\n * @param patternsNotMatchingFilters\n * @protected\n */\n public buildColumns(\n total: number,\n appliedPatterns: AppliedPattern[] | undefined,\n theme: GrafanaTheme2,\n maxLines: number,\n patternsNotMatchingFilters?: string[]\n ) {\n const styles = getColumnStyles(theme);\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const columns: Array> = [\n {\n id: 'volume-samples',\n header: '',\n cell: (props: CellProps) => {\n const panelData: PanelData = {\n timeRange: timeRange,\n series: [props.cell.row.original.dataFrame],\n state: LoadingState.Done,\n };\n const dataNode = new SceneDataNode({\n data: panelData,\n });\n\n const timeSeries = PanelBuilders.timeseries()\n .setData(dataNode)\n .setHoverHeader(true)\n .setOption('tooltip', {\n mode: TooltipDisplayMode.None,\n })\n .setCustomFieldConfig('hideFrom', {\n legend: true,\n tooltip: true,\n })\n .setCustomFieldConfig('axisPlacement', AxisPlacement.Hidden)\n .setDisplayMode('transparent')\n .build();\n\n return (\n
\n
\n \n
\n
\n );\n },\n },\n {\n id: 'count',\n header: 'Count',\n sortType: 'number',\n cell: (props) => {\n const value = scaledUnits(1000, SCALED_UNITS)(props.cell.row.original.sum);\n return (\n
\n
\n {value.prefix ?? ''}\n {value.text}\n {value.suffix ?? ''}\n
\n
\n );\n },\n },\n {\n id: 'percent',\n header: '%',\n sortType: 'number',\n cell: (props) => (\n
\n
{((100 * props.cell.row.original.sum) / total).toFixed(0)}%
\n
\n ),\n },\n {\n id: 'pattern',\n header: 'Pattern',\n cell: (props: CellProps) => {\n return (\n
\n \n
\n );\n },\n },\n {\n id: 'include',\n header: undefined,\n disableGrow: true,\n cell: (props: CellProps) => {\n if (patternsNotMatchingFilters?.includes(props.cell.row.original.pattern)) {\n return undefined;\n }\n\n const existingPattern = appliedPatterns?.find(\n (appliedPattern) => appliedPattern.pattern === props.cell.row.original.pattern\n );\n const isIncluded = existingPattern?.type === 'include';\n const isExcluded = existingPattern?.type === 'exclude';\n return (\n props.cell.row.original.includeLink()}\n onExclude={() => props.cell.row.original.excludeLink()}\n onClear={() => props.cell.row.original.undoLink()}\n buttonFill={'outline'}\n />\n );\n },\n },\n ];\n return columns;\n }\n\n /**\n * Filter visible patterns in table, and return cell data for InteractiveTable\n * @param patternFrames\n * @param legendSyncPatterns\n * @private\n */\n public buildTableData(patternFrames: PatternFrame[], legendSyncPatterns: Set): PatternsTableCellData[] {\n const logExploration = sceneGraph.getAncestor(this, IndexScene);\n return patternFrames\n .filter((patternFrame) => {\n return legendSyncPatterns.size ? legendSyncPatterns.has(patternFrame.pattern) : true;\n })\n .map((pattern: PatternFrame) => {\n return {\n dataFrame: pattern.dataFrame,\n pattern: pattern.pattern,\n sum: pattern.sum,\n includeLink: () =>\n onPatternClick({\n pattern: pattern.pattern,\n type: 'include',\n indexScene: logExploration,\n }),\n excludeLink: () =>\n onPatternClick({\n pattern: pattern.pattern,\n type: 'exclude',\n indexScene: logExploration,\n }),\n undoLink: () =>\n onPatternClick({\n pattern: pattern.pattern,\n type: 'undo',\n indexScene: logExploration,\n }),\n };\n });\n }\n}\n\nconst theme = config.theme2;\n\nconst getTablePatternTextStyles = () => {\n return css({\n minWidth: '200px',\n fontFamily: theme.typography.fontFamilyMonospace,\n overflow: 'hidden',\n overflowWrap: 'break-word',\n });\n};\n\nconst getTableStyles = (theme: GrafanaTheme2) => {\n return {\n link: css({\n textDecoration: 'underline',\n }),\n tableWrap: css({\n // Override interactive table style\n '> div': {\n // Need to define explicit height for overflowX\n height: 'calc(100vh - 450px)',\n minHeight: '470px',\n },\n // Make table headers sticky\n th: {\n top: 0,\n position: 'sticky',\n backgroundColor: theme.colors.background.canvas,\n zIndex: theme.zIndex.navbarFixed,\n },\n }),\n };\n};\nconst getColumnStyles = (theme: GrafanaTheme2) => {\n return {\n tablePatternTextDefault: css({\n fontFamily: theme.typography.fontFamilyMonospace,\n minWidth: '200px',\n maxWidth: '100%',\n overflow: 'hidden',\n overflowWrap: 'break-word',\n fontSize: theme.typography.bodySmall.fontSize,\n wordBreak: 'break-word',\n }),\n countTextWrap: css({\n textAlign: 'right',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n tableTimeSeriesWrap: css({\n width: '230px',\n pointerEvents: 'none',\n }),\n tableTimeSeries: css({\n height: '30px',\n overflow: 'hidden',\n }),\n };\n};\n\nexport function PatternTableViewSceneComponent({ model }: SceneComponentProps) {\n const indexScene = sceneGraph.getAncestor(model, IndexScene);\n const { patterns: appliedPatterns } = indexScene.useState();\n const theme = useTheme2();\n const styles = getTableStyles(theme);\n\n // Get state from parent\n const patternsFrameScene = sceneGraph.getAncestor(model, PatternsFrameScene);\n const { legendSyncPatterns } = patternsFrameScene.useState();\n\n // Must use local patternFrames as the parent decides if we get the filtered or not\n const { patternFrames: patternFramesRaw, patternsNotMatchingFilters } = model.useState();\n const patternFrames = patternFramesRaw ?? [];\n\n // Get unfiltered patterns for percentage calculation\n const patternsBreakdownScene = sceneGraph.getAncestor(model, PatternsBreakdownScene);\n const unfilteredPatterns = patternsBreakdownScene.state.patternFrames ?? [];\n\n // Calculate total for percentages\n const total = unfilteredPatterns.reduce((previousValue, frame) => {\n return previousValue + frame.sum;\n }, 0);\n\n const tableData = model.buildTableData(patternFrames, legendSyncPatterns);\n const columns = model.buildColumns(\n total,\n appliedPatterns,\n theme,\n model.state.maxLines ?? LINE_LIMIT,\n patternsNotMatchingFilters\n );\n\n return (\n
\n r.pattern}\n renderExpandedRow={(row) => }\n />\n
\n );\n}\n","import React from 'react';\n\nimport { ConfigOverrideRule, FieldColor, LoadingState } from '@grafana/data';\nimport {\n PanelBuilders,\n SceneComponentProps,\n SceneCSSGridLayout,\n SceneDataNode,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n VizPanel,\n} from '@grafana/scenes';\nimport { LegendDisplayMode, PanelContext, SeriesVisibilityChangeMode } from '@grafana/ui';\nimport { ServiceScene } from '../../ServiceScene';\nimport { onPatternClick } from './FilterByPatternsButton';\nimport { IndexScene } from '../../../IndexScene/IndexScene';\nimport { PatternsViewTableScene } from './PatternsViewTableScene';\nimport { config } from '@grafana/runtime';\nimport { css } from '@emotion/css';\nimport { PatternFrame, PatternsBreakdownScene } from './PatternsBreakdownScene';\nimport { areArraysEqual } from '../../../../services/comparison';\nimport { logger } from '../../../../services/logger';\n\nconst palette = config.theme2.visualization.palette;\n\nexport interface PatternsFrameSceneState extends SceneObjectState {\n body?: SceneCSSGridLayout;\n loading?: boolean;\n legendSyncPatterns: Set;\n}\n\nexport class PatternsFrameScene extends SceneObjectBase {\n constructor(state?: Partial) {\n super({\n loading: true,\n ...state,\n legendSyncPatterns: new Set(),\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n // parent render\n public static Component = ({ model }: SceneComponentProps) => {\n const { body, loading } = model.useState();\n const logsByServiceScene = sceneGraph.getAncestor(model, ServiceScene);\n const { $patternsData } = logsByServiceScene.useState();\n const patterns = $patternsData?.state.data?.series;\n\n return (\n
\n {!loading && patterns && patterns.length > 0 && <>{body && }}\n
\n );\n };\n\n private onActivate() {\n this.updateBody();\n\n // If the patterns have changed, recalculate the dataframes\n this._subs.add(\n sceneGraph.getAncestor(this, ServiceScene).subscribeToState((newState, prevState) => {\n const newFrame = newState?.$patternsData?.state?.data?.series;\n const prevFrame = prevState?.$patternsData?.state?.data?.series;\n\n if (!areArraysEqual(newFrame, prevFrame)) {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n this.updatePatterns(patternsBreakdownScene.state.patternFrames);\n\n // In order to keep the search state from clearing, we need to clear the filtered state\n patternsBreakdownScene.setState({\n filteredPatterns: undefined,\n });\n }\n })\n );\n\n // If the text search results have changed, update the components to use the filtered dataframe\n this._subs.add(\n sceneGraph.getAncestor(this, PatternsBreakdownScene).subscribeToState((newState, prevState) => {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n if (newState.filteredPatterns && !areArraysEqual(newState.filteredPatterns, prevState.filteredPatterns)) {\n this.updatePatterns(patternsBreakdownScene.state.filteredPatterns);\n } else {\n // If there is no search string, clear the state\n if (!patternsBreakdownScene.state.patternFilter) {\n this.updatePatterns(patternsBreakdownScene.state.patternFrames);\n }\n }\n })\n );\n }\n\n private async updatePatterns(patternFrames: PatternFrame[] = []) {\n // CSS Grid doesn't need rebuilding, just the children need the updated dataframe\n this.state.body?.forEachChild((child) => {\n if (child instanceof VizPanel) {\n child.setState({\n $data: this.getTimeseriesDataNode(patternFrames),\n });\n }\n if (child instanceof PatternsViewTableScene) {\n child.setState({\n patternFrames,\n });\n }\n });\n }\n\n private async updateBody() {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n const patternFrames = patternsBreakdownScene.state.patternFrames;\n\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n\n const lokiPatterns = serviceScene.state.$patternsData?.state.data?.series;\n if (!lokiPatterns || !patternFrames) {\n logger.warn('Failed to update PatternsFrameScene body');\n return;\n }\n\n this.setState({\n body: this.getSingleViewLayout(),\n legendSyncPatterns: new Set(),\n loading: false,\n });\n }\n\n private extendTimeSeriesLegendBus(vizPanel: VizPanel, context: PanelContext) {\n const originalOnToggleSeriesVisibility = context.onToggleSeriesVisibility;\n\n context.onToggleSeriesVisibility = (label: string, mode: SeriesVisibilityChangeMode) => {\n originalOnToggleSeriesVisibility?.(label, mode);\n\n const override: ConfigOverrideRule | undefined = vizPanel.state.fieldConfig.overrides?.[0];\n const patternsToShow: string[] = override?.matcher.options.names;\n const legendSyncPatterns = new Set();\n\n if (patternsToShow) {\n patternsToShow.forEach(legendSyncPatterns.add, legendSyncPatterns);\n }\n\n this.setState({\n legendSyncPatterns,\n });\n };\n }\n\n private getSingleViewLayout() {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n const patternFrames = patternsBreakdownScene.state.patternFrames;\n\n if (!patternFrames) {\n logger.warn('Failed to set getSingleViewLayout');\n return;\n }\n\n const timeSeries = this.getTimeSeries(patternFrames);\n\n return new SceneCSSGridLayout({\n templateColumns: '100%',\n autoRows: '200px',\n isLazy: true,\n\n children: [\n timeSeries,\n new PatternsViewTableScene({\n patternFrames,\n }),\n ],\n });\n }\n\n private getTimeSeries(patternFrames: PatternFrame[]) {\n const logExploration = sceneGraph.getAncestor(this, IndexScene);\n\n const timeSeries = PanelBuilders.timeseries()\n .setData(this.getTimeseriesDataNode(patternFrames))\n .setOption('legend', {\n asTable: true,\n showLegend: true,\n displayMode: LegendDisplayMode.Table,\n placement: 'right',\n width: 200,\n })\n .setHoverHeader(true)\n .setUnit('short')\n .setLinks([\n {\n url: '#',\n targetBlank: false,\n onClick: (event) => {\n onPatternClick({\n pattern: event.origin.labels.name,\n type: 'include',\n indexScene: logExploration,\n });\n },\n title: 'Include',\n },\n {\n url: '#',\n targetBlank: false,\n onClick: (event) => {\n onPatternClick({\n pattern: event.origin.labels.name,\n type: 'exclude',\n indexScene: logExploration,\n });\n },\n title: 'Exclude',\n },\n ])\n .build();\n\n timeSeries.setState({\n extendPanelContext: (vizPanel, context) => this.extendTimeSeriesLegendBus(vizPanel, context),\n });\n\n return timeSeries;\n }\n\n private getTimeseriesDataNode(patternFrames: PatternFrame[]) {\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n\n return new SceneDataNode({\n data: {\n series: patternFrames.map((patternFrame, seriesIndex) => {\n // Mutating the dataframe config here means that we don't need to update the colors in the table view\n const dataFrame = patternFrame.dataFrame;\n dataFrame.fields[1].config.color = overrideToFixedColor(seriesIndex);\n dataFrame.fields[1].name = '';\n return dataFrame;\n }),\n state: LoadingState.Done,\n timeRange: timeRange,\n },\n });\n }\n}\n\nexport function overrideToFixedColor(key: keyof typeof palette): FieldColor {\n return {\n mode: 'fixed',\n fixedColor: palette[key] as string,\n };\n}\n\nconst styles = {\n container: css({\n width: '100%',\n // Hide header on hover hack\n '.show-on-hover': {\n display: 'none',\n },\n }),\n};\n","import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport React, { ChangeEvent } from 'react';\nimport { Field } from '@grafana/ui';\nimport { css } from '@emotion/css';\nimport { PatternFrame, PatternsBreakdownScene } from './PatternsBreakdownScene';\nimport { debouncedFuzzySearch, fuzzySearch } from '../../../../services/search';\nimport { SearchInput } from '../SearchInput';\nimport { areArraysEqual } from '../../../../services/comparison';\n\nexport interface PatternsViewTextSearchState extends SceneObjectState {}\n\nexport class PatternsViewTextSearch extends SceneObjectBase {\n public static Component = PatternTextSearchComponent;\n\n constructor(state?: Partial) {\n super({\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n /**\n * On click callback to clear current text search\n */\n public clearSearch = () => {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n patternsBreakdownScene.setState({\n patternFilter: '',\n });\n };\n\n /**\n * Search input onchange callback\n * @param e\n */\n public handleSearchChange = (e: ChangeEvent) => {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n patternsBreakdownScene.setState({\n patternFilter: e.target.value,\n });\n };\n\n /**\n * Activation handler\n * @private\n */\n private onActivate() {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n this._subs.add(\n patternsBreakdownScene.subscribeToState((newState, prevState) => {\n if (newState.patternFilter !== prevState.patternFilter) {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n if (patternsBreakdownScene.state.patternFrames) {\n debouncedFuzzySearch(\n patternsBreakdownScene.state.patternFrames.map((frame) => frame.pattern),\n patternsBreakdownScene.state.patternFilter,\n this.onSearchResult\n );\n }\n }\n })\n );\n\n this._subs.add(\n patternsBreakdownScene.subscribeToState((newState, prevState) => {\n // If we have a search string, but no filtered patterns, run the search\n if (\n newState.patternFilter &&\n !newState.filteredPatterns &&\n newState.patternFrames &&\n !areArraysEqual(newState.filteredPatterns, prevState.filteredPatterns)\n ) {\n fuzzySearch(\n newState.patternFrames.map((frame) => frame.pattern),\n newState.patternFilter,\n this.onSearchResult\n );\n }\n })\n );\n }\n\n /**\n * Sets the patterns filtered by string match\n * @param patterns\n * @param patternFramesOverride\n */\n setFilteredPatterns(patterns: string[], patternFramesOverride?: PatternFrame[]) {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n const patternFrames = patternFramesOverride ?? patternsBreakdownScene.state.patternFrames;\n\n if (patternFrames) {\n const filteredPatternFrames = patternFrames.filter((patternFrame) => {\n if (patternsBreakdownScene.state.patternFilter && patternFrames?.length) {\n return patterns.find((pattern) => pattern === patternFrame.pattern);\n }\n return false;\n });\n\n patternsBreakdownScene.setState({\n filteredPatterns: filteredPatternFrames,\n });\n }\n }\n\n /**\n * Fuzzy search callback\n * @param data\n */\n onSearchResult = (data: string[][]) => {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n // If we have a search string\n if (patternsBreakdownScene.state.patternFilter) {\n this.setFilteredPatterns(data[0]);\n } else if (patternsBreakdownScene.state.filteredPatterns && !patternsBreakdownScene.state.patternFilter) {\n // Wipe the parent filtered state\n this.setEmptySearch();\n }\n };\n\n /**\n * Wipes filtered patterns when search string is empty\n */\n private setEmptySearch() {\n const patternsBreakdownScene = sceneGraph.getAncestor(this, PatternsBreakdownScene);\n patternsBreakdownScene.setState({\n filteredPatterns: undefined,\n });\n }\n}\n\nconst styles = {\n field: css({\n label: 'field',\n marginBottom: 0,\n }),\n icon: css({\n cursor: 'pointer',\n }),\n};\n\nexport function PatternTextSearchComponent({ model }: SceneComponentProps) {\n const patternsBreakdownScene = sceneGraph.getAncestor(model, PatternsBreakdownScene);\n const { patternFilter } = patternsBreakdownScene.useState();\n return (\n \n \n \n );\n}\n","import { GrotError } from '../../../GrotError';\nimport { TextLink } from '@grafana/ui';\nimport React from 'react';\nimport { PATTERNS_MAX_AGE_HOURS } from './PatternsBreakdownScene';\n\nexport function PatternsNotDetected() {\n return (\n \n
\n

\n Sorry, we could not detect any patterns.\n

\n

\n Check back later or reach out to the team in the{' '}\n \n Grafana Labs community Slack channel\n \n

\n

Patterns let you detect similar log lines to include or exclude from your search.

\n
\n
\n );\n}\n\nexport function PatternsTooOld() {\n return (\n \n
\n

\n Patterns are only available for the most recent {PATTERNS_MAX_AGE_HOURS} hours of data.\n

\n

\n See the{' '}\n \n patterns docs\n {' '}\n for more info.\n

\n
\n
\n );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { DataFrame, dateTime, GrafanaTheme2, LoadingState } from '@grafana/data';\nimport {\n CustomVariable,\n SceneComponentProps,\n SceneDataState,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneVariableSet,\n} from '@grafana/scenes';\nimport { Text, useStyles2 } from '@grafana/ui';\nimport { StatusWrapper } from 'Components/ServiceScene/Breakdowns/StatusWrapper';\nimport { VAR_LABEL_GROUP_BY } from 'services/variables';\nimport { ServiceScene } from '../../ServiceScene';\nimport { IndexScene } from '../../../IndexScene/IndexScene';\nimport { PatternsFrameScene } from './PatternsFrameScene';\nimport { PatternsViewTextSearch } from './PatternsViewTextSearch';\nimport { PatternsNotDetected, PatternsTooOld } from './PatternsNotDetected';\nimport { areArraysEqual } from '../../../../services/comparison';\n\nexport interface PatternsBreakdownSceneState extends SceneObjectState {\n body?: SceneFlexLayout;\n value?: string;\n loading?: boolean;\n error?: boolean;\n blockingMessage?: string;\n // The dataframe built from the patterns that we get back from the loki Patterns API\n patternFrames?: PatternFrame[];\n\n // Subset of patternFrames, undefined if empty, empty array if search results returned nothing (no data)\n filteredPatterns?: PatternFrame[];\n patternFilter: string;\n}\n\nexport type PatternFrame = {\n dataFrame: DataFrame;\n pattern: string;\n sum: number;\n status?: 'include' | 'exclude';\n};\n\nexport const PATTERNS_MAX_AGE_HOURS = 3;\n\nexport class PatternsBreakdownScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({\n $variables:\n state.$variables ??\n new SceneVariableSet({\n variables: [new CustomVariable({ name: VAR_LABEL_GROUP_BY, defaultToAll: true, includeAll: true })],\n }),\n loading: true,\n patternFilter: '',\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n // parent render\n public static Component = ({ model }: SceneComponentProps) => {\n const { body, loading, blockingMessage, patternFrames, error } = model.useState();\n const { value: timeRange } = sceneGraph.getTimeRange(model).useState();\n const styles = useStyles2(getStyles);\n const timeRangeTooOld = dateTime().diff(timeRange.to, 'hours') >= PATTERNS_MAX_AGE_HOURS;\n\n return (\n
\n \n {!loading && error && (\n
\n \n

There are no pattern matches.

\n

Pattern matching has not been configured.

\n

Patterns let you detect similar log lines and add or exclude them from your search.

\n

To see them in action, add the following to your Loki configuration

\n

\n --pattern-ingester.enabled=true\n

\n
\n
\n )}\n\n {!error && !loading && patternFrames?.length === 0 && timeRangeTooOld && }\n {!error && !loading && patternFrames?.length === 0 && !timeRangeTooOld && }\n {!error && !loading && patternFrames && patternFrames.length > 0 && (\n
{body && }
\n )}\n
\n
\n );\n };\n\n private onActivate() {\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n this.setBody();\n\n // If the patterns exist already, update the dataframe\n if (serviceScene.state.$patternsData?.state) {\n this.onDataChange(serviceScene.state.$patternsData?.state);\n }\n\n // Subscribe to changes from pattern API call\n this._subs.add(serviceScene.state.$patternsData?.subscribeToState(this.onDataChange));\n }\n\n private onDataChange = (newState: SceneDataState, prevState?: SceneDataState) => {\n const newFrames = newState.data?.series;\n const prevFrames = prevState?.data?.series;\n\n if (newState.data?.state === LoadingState.Done) {\n this.setState({\n loading: false,\n error: false,\n });\n\n if (!areArraysEqual(newFrames, prevFrames)) {\n this.updatePatternFrames(newFrames);\n }\n } else if (newState.data?.state === LoadingState.Loading) {\n this.setState({\n loading: true,\n error: false,\n });\n } else if (newState.data?.state === LoadingState.Error) {\n this.setState({\n loading: false,\n error: true,\n });\n }\n };\n\n private setBody() {\n this.setState({\n body: new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneFlexItem({\n ySizing: 'content',\n body: new PatternsViewTextSearch(),\n }),\n new SceneFlexItem({\n body: new PatternsFrameScene(),\n }),\n ],\n }),\n });\n }\n\n private updatePatternFrames(dataFrames?: DataFrame[]) {\n if (!dataFrames) {\n return;\n }\n\n const patternFrames = this.dataFrameToPatternFrame(dataFrames);\n\n this.setState({\n patternFrames,\n });\n }\n\n private dataFrameToPatternFrame(dataFrame: DataFrame[]): PatternFrame[] {\n const serviceScene = sceneGraph.getAncestor(this, ServiceScene);\n const appliedPatterns = sceneGraph.getAncestor(serviceScene, IndexScene).state.patterns;\n\n return dataFrame.map((dataFrame) => {\n const existingPattern = appliedPatterns?.find((appliedPattern) => appliedPattern.pattern === dataFrame.name);\n\n const sum: number = dataFrame.meta?.custom?.sum;\n const patternFrame: PatternFrame = {\n dataFrame,\n pattern: dataFrame.name ?? '',\n sum,\n status: existingPattern?.type,\n };\n\n return patternFrame;\n });\n }\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n minHeight: '100%',\n flexDirection: 'column',\n }),\n content: css({\n flexGrow: 1,\n display: 'flex',\n paddingTop: theme.spacing(0),\n }),\n controls: css({\n flexGrow: 0,\n display: 'flex',\n alignItems: 'top',\n gap: theme.spacing(2),\n }),\n controlsRight: css({\n flexGrow: 0,\n display: 'flex',\n justifyContent: 'flex-end',\n }),\n controlsLeft: css({\n display: 'flex',\n justifyContent: 'flex-left',\n justifyItems: 'left',\n width: '100%',\n flexDirection: 'column',\n }),\n patternMissingText: css({\n padding: theme.spacing(2),\n }),\n };\n}\n","import { PageSlugs, ValueSlugs } from '../../services/routing';\nimport { LogsListScene } from './LogsListScene';\nimport { testIds } from '../../services/testIds';\nimport { LabelBreakdownScene } from './Breakdowns/LabelBreakdownScene';\nimport { FieldsBreakdownScene } from './Breakdowns/FieldsBreakdownScene';\nimport { PatternsBreakdownScene } from './Breakdowns/Patterns/PatternsBreakdownScene';\nimport { behaviors, SceneFlexItem, SceneFlexLayout, SceneObject } from '@grafana/scenes';\nimport { LogsVolumePanel } from './LogsVolumePanel';\nimport { DashboardCursorSync } from '@grafana/schema';\n\ninterface ValueBreakdownViewDefinition {\n displayName: string;\n value: ValueSlugs;\n testId: string;\n getScene: (value: string) => SceneObject;\n}\n\nexport enum TabNames {\n logs = 'Logs',\n labels = 'Labels',\n fields = 'Fields',\n patterns = 'Patterns',\n}\nexport interface BreakdownViewDefinition {\n displayName: TabNames;\n value: PageSlugs;\n testId: string;\n getScene: (changeFields: (f: number) => void) => SceneObject;\n}\n\nexport const breakdownViewsDefinitions: BreakdownViewDefinition[] = [\n {\n displayName: TabNames.logs,\n value: PageSlugs.logs,\n getScene: () => buildLogsListScene(),\n testId: testIds.exploreServiceDetails.tabLogs,\n },\n {\n displayName: TabNames.labels,\n value: PageSlugs.labels,\n getScene: () => buildLabelBreakdownActionScene(),\n testId: testIds.exploreServiceDetails.tabLabels,\n },\n {\n displayName: TabNames.fields,\n value: PageSlugs.fields,\n getScene: (f) => buildFieldsBreakdownActionScene(f),\n testId: testIds.exploreServiceDetails.tabFields,\n },\n {\n displayName: TabNames.patterns,\n value: PageSlugs.patterns,\n getScene: () => buildPatternsScene(),\n testId: testIds.exploreServiceDetails.tabPatterns,\n },\n];\nexport const valueBreakdownViews: ValueBreakdownViewDefinition[] = [\n {\n displayName: 'Label',\n value: ValueSlugs.label,\n getScene: (value: string) => buildLabelValuesBreakdownActionScene(value),\n testId: testIds.exploreServiceDetails.tabLabels,\n },\n {\n displayName: 'Field',\n value: ValueSlugs.field,\n getScene: (value: string) => buildFieldValuesBreakdownActionScene(value),\n testId: testIds.exploreServiceDetails.tabFields,\n },\n];\n\nfunction buildPatternsScene() {\n return new SceneFlexLayout({\n children: [\n new SceneFlexItem({\n body: new PatternsBreakdownScene({}),\n }),\n ],\n });\n}\n\nfunction buildFieldsBreakdownActionScene(changeFieldNumber: (n: number) => void) {\n return new SceneFlexLayout({\n $behaviors: [new behaviors.CursorSync({ key: 'sync', sync: DashboardCursorSync.Crosshair })],\n children: [\n new SceneFlexItem({\n body: new FieldsBreakdownScene({ changeFieldCount: changeFieldNumber }),\n }),\n ],\n });\n}\n\nfunction buildFieldValuesBreakdownActionScene(value: string) {\n return new SceneFlexLayout({\n $behaviors: [new behaviors.CursorSync({ key: 'sync', sync: DashboardCursorSync.Crosshair })],\n children: [\n new SceneFlexItem({\n body: new FieldsBreakdownScene({ value }),\n }),\n ],\n });\n}\n\nfunction buildLabelValuesBreakdownActionScene(value: string) {\n return new SceneFlexLayout({\n $behaviors: [new behaviors.CursorSync({ key: 'sync', sync: DashboardCursorSync.Crosshair })],\n children: [\n new SceneFlexItem({\n body: new LabelBreakdownScene({ value }),\n }),\n ],\n });\n}\n\nfunction buildLogsListScene() {\n return new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneFlexItem({\n body: new LogsVolumePanel({}),\n }),\n new SceneFlexItem({\n minHeight: '470px',\n height: 'calc(100vh - 500px)',\n body: new LogsListScene({}),\n }),\n ],\n });\n}\n\nfunction buildLabelBreakdownActionScene() {\n return new SceneFlexLayout({\n $behaviors: [new behaviors.CursorSync({ key: 'sync', sync: DashboardCursorSync.Crosshair })],\n children: [\n new SceneFlexItem({\n body: new LabelBreakdownScene({}),\n }),\n ],\n });\n}\n","import { css, cx } from '@emotion/css';\nimport { getValueFormat, GrafanaTheme2 } from '@grafana/data';\nimport { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { Box, Stack, Tab, TabsBar, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../services/analytics';\nimport { getDrillDownTabLink } from '../../services/navigate';\nimport { LINE_LIMIT } from '../../services/query';\nimport { getDrilldownSlug, getDrilldownValueSlug, PageSlugs, ValueSlugs } from '../../services/routing';\nimport { IndexScene } from '../IndexScene/IndexScene';\nimport { ShareButtonScene } from '../IndexScene/ShareButtonScene';\nimport { BreakdownViewDefinition, breakdownViewsDefinitions, TabNames } from './BreakdownViews';\nimport { ServiceScene, ServiceSceneCustomState } from './ServiceScene';\n\nexport interface ActionBarSceneState extends SceneObjectState {\n maxLines?: number;\n shareButtonScene?: ShareButtonScene;\n}\n\nexport class ActionBarScene extends SceneObjectBase {\n constructor(state: Partial) {\n super(state);\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onActivate() {\n const indexScene = sceneGraph.getAncestor(this, IndexScene);\n const dataSource = indexScene.state.ds;\n if (dataSource?.maxLines !== undefined) {\n this.setState({\n maxLines: dataSource.maxLines,\n });\n }\n\n if (!this.state.shareButtonScene) {\n this.setState({\n shareButtonScene: new ShareButtonScene({}),\n });\n }\n }\n public static Component = ({ model }: SceneComponentProps) => {\n const styles = useStyles2(getStyles);\n let currentBreakdownViewSlug = getDrilldownSlug();\n let allowNavToParent = false;\n\n if (!Object.values(PageSlugs).includes(currentBreakdownViewSlug)) {\n const drilldownValueSlug = getDrilldownValueSlug();\n allowNavToParent = true;\n if (drilldownValueSlug === ValueSlugs.field) {\n currentBreakdownViewSlug = PageSlugs.fields;\n }\n if (drilldownValueSlug === ValueSlugs.label) {\n currentBreakdownViewSlug = PageSlugs.labels;\n }\n }\n\n const serviceScene = sceneGraph.getAncestor(model, ServiceScene);\n const { loading, $data, logsCount, totalLogsCount, ...state } = serviceScene.useState();\n const { maxLines } = model.useState();\n\n const loadingStates = state.loadingStates;\n\n return (\n \n
\n \n {model.state.shareButtonScene && (\n \n )}\n \n
\n\n \n {breakdownViewsDefinitions.map((tab, index) => {\n return (\n LogsCount(className, totalLogsCount, logsCount, maxLines ?? LINE_LIMIT)\n : undefined\n }\n icon={loadingStates[tab.displayName] ? 'spinner' : undefined}\n href={getDrillDownTabLink(tab.value, serviceScene)}\n onChangeTab={() => {\n if ((tab.value && tab.value !== currentBreakdownViewSlug) || allowNavToParent) {\n reportAppInteraction(\n USER_EVENTS_PAGES.service_details,\n USER_EVENTS_ACTIONS.service_details.action_view_changed,\n {\n newActionView: tab.value,\n previousActionView: currentBreakdownViewSlug,\n }\n );\n }\n }}\n />\n );\n })}\n \n
\n );\n };\n}\nconst getCounter = (tab: BreakdownViewDefinition, state: ServiceSceneCustomState) => {\n switch (tab.value) {\n case 'fields':\n return state.fieldsCount;\n case 'patterns':\n return state.patternsCount;\n case 'labels':\n return state.labelsCount;\n default:\n return undefined;\n }\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n actions: css({\n display: 'flex',\n justifyContent: 'flex-end',\n\n [theme.breakpoints.up(theme.breakpoints.values.md)]: {\n position: 'absolute',\n right: 0,\n zIndex: 2,\n },\n }),\n };\n}\n\nfunction LogsCount(\n className: string | undefined,\n totalCount: number | undefined,\n logsCount: number | undefined,\n maxLines: number\n) {\n const styles = useStyles2(getLogsCountStyles);\n const valueFormatter = getValueFormat('short');\n\n // The instant query (totalCount) doesn't return good results for small result sets, if we're below the max number of lines, use the logs query result instead.\n if (totalCount === undefined && logsCount !== undefined && logsCount < maxLines) {\n const formattedCount = valueFormatter(logsCount, 0);\n return (\n \n {formattedCount.text}\n {formattedCount.suffix?.trim()}\n \n );\n } else if (totalCount !== undefined) {\n const formattedTotalCount = valueFormatter(totalCount, 0);\n return (\n \n {formattedTotalCount.text}\n {formattedTotalCount.suffix?.trim()}\n \n );\n }\n\n return ;\n}\n\nfunction getLogsCountStyles(theme: GrafanaTheme2) {\n return {\n emptyCountStyles: css({\n display: 'inline-block',\n fontSize: theme.typography.bodySmall.fontSize,\n minWidth: '1em',\n marginLeft: theme.spacing(1),\n padding: theme.spacing(0.25, 1),\n }),\n logsCountStyles: css({\n fontSize: theme.typography.bodySmall.fontSize,\n label: 'counter',\n marginLeft: theme.spacing(1),\n borderRadius: theme.spacing(3),\n backgroundColor: theme.colors.action.hover,\n padding: theme.spacing(0.25, 1),\n color: theme.colors.text.secondary,\n fontWeight: theme.typography.fontWeightMedium,\n }),\n };\n}\n","import { locationService } from '@grafana/runtime';\nimport { getLineFiltersVariable } from './variableGetters';\nimport { LineFilterCaseSensitive, LineFilterOp } from './filterTypes';\nimport { ServiceScene } from '../Components/ServiceScene/ServiceScene';\nimport { urlUtil } from '@grafana/data';\nimport { sceneGraph } from '@grafana/scenes';\nimport { IndexScene } from '../Components/IndexScene/IndexScene';\n\nfunction removeEscapeChar(value: string, caseSensitive: boolean) {\n const charsEscapedByEscapeRegExp = ['^', '$', '.', '*', '+', '?', '(', ')', '[', ']', '{', '}', '|'];\n if (!caseSensitive) {\n charsEscapedByEscapeRegExp.push('\\\\');\n }\n return value\n .split('')\n .filter((char, index, stringArray) => {\n // We need to differentiate between user entered escape chars, and escape chars added by lodash escapeRegExp to return the same query results in urls from before the line filter regex feature\n // Since there is no reverse of the escapeRegExp method provided by lodash we're essentially building our own \"unescapeRegExp\"\n const nextChar = stringArray[index + 1];\n const isNextCharRegex = charsEscapedByEscapeRegExp.includes(nextChar);\n return !(char === '\\\\' && isNextCharRegex);\n })\n .join('');\n}\n\n/**\n * Migrates old line filter to new variables\n */\nexport function migrateLineFilterV1(serviceScene: ServiceScene) {\n const search = urlUtil.getUrlSearchParams();\n\n const deprecatedLineFilterArray = search['var-lineFilter'];\n if (!Array.isArray(deprecatedLineFilterArray) || !deprecatedLineFilterArray.length) {\n return;\n }\n const deprecatedLineFilter = deprecatedLineFilterArray[0];\n if (typeof deprecatedLineFilter !== 'string' || !deprecatedLineFilter) {\n return;\n }\n\n const indexScene = sceneGraph.getAncestor(serviceScene, IndexScene);\n const globalLineFilterVars = getLineFiltersVariable(serviceScene);\n const caseSensitiveMatches = deprecatedLineFilter?.match(/\\|=.`(.+?)`/);\n\n if (caseSensitiveMatches && caseSensitiveMatches.length === 2) {\n indexScene.state.body?.state.lineFilterRenderer?.addActivationHandler(() => {\n globalLineFilterVars.setState({\n filters: [\n {\n key: LineFilterCaseSensitive.caseSensitive,\n operator: LineFilterOp.match,\n value: removeEscapeChar(caseSensitiveMatches[1], true),\n keyLabel: '0',\n },\n ],\n });\n });\n }\n\n const caseInsensitiveMatches = deprecatedLineFilter?.match(/`\\(\\?i\\)(.+)`/);\n if (caseInsensitiveMatches && caseInsensitiveMatches.length === 2) {\n indexScene.state.body?.state.lineFilterRenderer?.addActivationHandler(() => {\n globalLineFilterVars.updateFilters([\n {\n key: LineFilterCaseSensitive.caseInsensitive,\n operator: LineFilterOp.match,\n value: removeEscapeChar(caseInsensitiveMatches[1], false),\n keyLabel: '0',\n },\n ]);\n });\n }\n const location = locationService.getLocation();\n\n // Remove from url without refreshing\n delete search['var-lineFilter'];\n locationService.replace(urlUtil.renderUrl(location.pathname, search));\n}\n","import React from 'react';\n\nimport { LoadingState, PanelData } from '@grafana/data';\nimport {\n QueryRunnerState,\n SceneComponentProps,\n SceneDataProvider,\n SceneDataState,\n SceneFlexItem,\n SceneFlexLayout,\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectState,\n SceneQueryRunner,\n SceneVariableValueChangedEvent,\n VariableDependencyConfig,\n} from '@grafana/scenes';\nimport { LoadingPlaceholder } from '@grafana/ui';\nimport { getQueryRunner, getResourceQueryRunner } from 'services/panel';\nimport { buildDataQuery, buildResourceQuery } from 'services/query';\nimport {\n EMPTY_VARIABLE_VALUE,\n isAdHocFilterValueUserInput,\n LEVEL_VARIABLE_VALUE,\n LOG_STREAM_SELECTOR_EXPR,\n SERVICE_NAME,\n SERVICE_UI_LABEL,\n stripAdHocFilterUserInputPrefix,\n VAR_DATASOURCE,\n VAR_FIELDS,\n VAR_LABELS,\n VAR_LABELS_EXPR,\n VAR_LEVELS,\n VAR_PATTERNS,\n} from 'services/variables';\nimport { getMetadataService } from '../../services/metadata';\nimport { navigateToDrilldownPage, navigateToIndex, navigateToValueBreakdown } from '../../services/navigate';\nimport { areArraysEqual } from '../../services/comparison';\nimport { ActionBarScene } from './ActionBarScene';\nimport { breakdownViewsDefinitions, TabNames, valueBreakdownViews } from './BreakdownViews';\nimport {\n getDataSourceVariable,\n getFieldsAndMetadataVariable,\n getFieldsVariable,\n getLabelsVariable,\n getLevelsVariable,\n getLineFiltersVariable,\n getMetadataVariable,\n getPatternsVariable,\n} from '../../services/variableGetters';\nimport { logger } from '../../services/logger';\nimport { IndexScene, showLogsButtonSceneKey } from '../IndexScene/IndexScene';\nimport {\n getDrilldownSlug,\n getDrilldownValueSlug,\n getPrimaryLabelFromUrl,\n PageSlugs,\n ValueSlugs,\n} from '../../services/routing';\nimport { replaceSlash } from '../../services/extensions/links';\nimport { ShowLogsButtonScene } from '../IndexScene/ShowLogsButtonScene';\nimport { migrateLineFilterV1 } from '../../services/migrations';\nimport { VariableHide } from '@grafana/schema';\nimport { LEVELS_VARIABLE_SCENE_KEY, LevelsVariableScene } from '../IndexScene/LevelsVariableScene';\nimport { isOperatorInclusive } from '../../services/operatorHelpers';\n\nexport const LOGS_PANEL_QUERY_REFID = 'logsPanelQuery';\nexport const LOGS_COUNT_QUERY_REFID = 'logsCountQuery';\nconst PATTERNS_QUERY_REFID = 'patterns';\nconst DETECTED_LABELS_QUERY_REFID = 'detectedLabels';\nconst DETECTED_FIELDS_QUERY_REFID = 'detectedFields';\n\ntype MakeOptional = Pick, K> & Omit;\n\ntype ServiceSceneLoadingStates = {\n [name in TabNames]: boolean;\n};\n\nexport interface ServiceSceneCustomState {\n labelsCount?: number;\n patternsCount?: number;\n fieldsCount?: number;\n loading?: boolean;\n totalLogsCount?: number;\n logsCount?: number;\n}\n\nexport interface ServiceSceneState extends SceneObjectState, ServiceSceneCustomState {\n body: SceneFlexLayout | undefined;\n drillDownLabel?: string;\n $data: SceneDataProvider | undefined;\n $logsCount: SceneQueryRunner | undefined;\n $patternsData: SceneQueryRunner | undefined;\n $detectedLabelsData: SceneQueryRunner | undefined;\n $detectedFieldsData: SceneQueryRunner | undefined;\n loadingStates: ServiceSceneLoadingStates;\n}\n\nexport function getLogsPanelFrame(data: PanelData | undefined) {\n return data?.series.find((series) => series.refId === LOGS_PANEL_QUERY_REFID);\n}\n\nexport function getDetectedLabelsFrame(sceneRef: SceneObject) {\n const serviceScene = sceneGraph.getAncestor(sceneRef, ServiceScene);\n return serviceScene.state.$detectedLabelsData?.state.data?.series?.[0];\n}\n\nexport function getDetectedFieldsFrame(sceneRef: SceneObject) {\n const serviceScene = sceneGraph.getAncestor(sceneRef, ServiceScene);\n return getDetectedFieldsFrameFromQueryRunnerState(serviceScene.state.$detectedFieldsData?.state);\n}\n\nexport const getDetectedFieldsFrameFromQueryRunnerState = (state?: QueryRunnerState) => {\n // Only ever one frame in the response\n return state?.data?.series?.[0];\n};\n\nexport const getDetectedFieldsNamesFromQueryRunnerState = (state: QueryRunnerState) => {\n // The first field, DETECTED_FIELDS_NAME_FIELD, has the list of names of the detected fields\n return state.data?.series?.[0]?.fields?.[0];\n};\n\nexport const getDetectedFieldsParsersFromQueryRunnerState = (state: QueryRunnerState) => {\n // The third field, DETECTED_FIELDS_PARSER_NAME, has the list of parsers of the detected fields\n return state.data?.series?.[0]?.fields?.[2];\n};\n\nexport class ServiceScene extends SceneObjectBase {\n protected _variableDependency = new VariableDependencyConfig(this, {\n variableNames: [VAR_DATASOURCE, VAR_LABELS, VAR_FIELDS, VAR_PATTERNS, VAR_LEVELS],\n });\n\n public constructor(\n state: MakeOptional<\n ServiceSceneState,\n | 'body'\n | '$data'\n | '$patternsData'\n | '$detectedLabelsData'\n | '$detectedFieldsData'\n | 'loadingStates'\n | '$logsCount'\n >\n ) {\n super({\n loadingStates: {\n [TabNames.patterns]: false,\n [TabNames.labels]: false,\n [TabNames.fields]: false,\n [TabNames.logs]: false,\n },\n loading: true,\n body: state.body ?? buildGraphScene(),\n $data: getServiceSceneQueryRunner(),\n $patternsData: getPatternsQueryRunner(),\n $detectedLabelsData: getDetectedLabelsQueryRunner(),\n $detectedFieldsData: getDetectedFieldsQueryRunner(),\n $logsCount: getLogCountQueryRunner(),\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n private setSubscribeToLabelsVariable() {\n const variable = getLabelsVariable(this);\n if (variable.state.filters.length === 0) {\n this.redirectToStart();\n return;\n }\n this._subs.add(\n variable.subscribeToState((newState, prevState) => {\n if (newState.filters.length === 0) {\n this.redirectToStart();\n }\n\n // If we remove the service name filter, we should redirect to the start\n let { labelName, labelValue, breakdownLabel } = getPrimaryLabelFromUrl();\n\n // Before we dynamically pulled label filter keys into the URL, we had hardcoded \"service\" as the primary label slug, we want to keep URLs the same, so overwrite \"service_name\" with \"service\" if that's the primary label\n if (labelName === SERVICE_UI_LABEL) {\n labelName = SERVICE_NAME;\n }\n const indexScene = sceneGraph.getAncestor(this, IndexScene);\n const prevRouteMatch = indexScene.state.routeMatch;\n\n // The \"primary\" label used in the URL is no longer active, pick a new one\n if (\n !newState.filters.some(\n (f) => f.key === labelName && isOperatorInclusive(f.operator) && replaceSlash(f.value) === labelValue\n )\n ) {\n const newPrimaryLabel = newState.filters.find(\n (f) => isOperatorInclusive(f.operator) && f.value !== EMPTY_VARIABLE_VALUE\n );\n if (newPrimaryLabel) {\n const newPrimaryLabelValue = isAdHocFilterValueUserInput(newPrimaryLabel.value)\n ? replaceSlash(stripAdHocFilterUserInputPrefix(newPrimaryLabel.value))\n : replaceSlash(newPrimaryLabel.value);\n indexScene.setState({\n routeMatch: {\n ...prevRouteMatch,\n params: {\n ...prevRouteMatch?.params,\n labelName: newPrimaryLabel.key === SERVICE_NAME ? SERVICE_UI_LABEL : newPrimaryLabel.key,\n // If there are a bunch of values separated by pipe, like labels that come from explore, let's truncate the value so the slug doesn't get too long\n labelValue: newPrimaryLabelValue.split('|')[0],\n },\n url: prevRouteMatch?.url ?? '',\n path: prevRouteMatch?.path ?? '',\n isExact: prevRouteMatch?.isExact ?? true,\n },\n });\n\n this.resetTabCount();\n\n if (!breakdownLabel) {\n navigateToDrilldownPage(getDrilldownSlug(), this);\n } else {\n navigateToValueBreakdown(getDrilldownValueSlug(), breakdownLabel, this);\n }\n } else {\n this.redirectToStart();\n }\n } else if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.state.$patternsData?.runQueries();\n this.state.$detectedLabelsData?.runQueries();\n this.state.$detectedFieldsData?.runQueries();\n this.state.$logsCount?.runQueries();\n }\n })\n );\n }\n\n private redirectToStart() {\n // Clear ongoing queries\n this.setState({\n $data: undefined,\n $logsCount: undefined,\n body: undefined,\n $patternsData: undefined,\n $detectedLabelsData: undefined,\n $detectedFieldsData: undefined,\n patternsCount: undefined,\n labelsCount: undefined,\n fieldsCount: undefined,\n logsCount: undefined,\n totalLogsCount: undefined,\n });\n getMetadataService().setServiceSceneState(this.state);\n this._subs.unsubscribe();\n\n // Redirect to root with updated params, which will trigger history push back to index route, preventing empty page or empty service query bugs\n navigateToIndex();\n }\n\n private showVariables() {\n const levelsVar = sceneGraph.findByKeyAndType(this, LEVELS_VARIABLE_SCENE_KEY, LevelsVariableScene);\n levelsVar.setState({ visible: true });\n getFieldsAndMetadataVariable(this).setState({ hide: VariableHide.dontHide });\n }\n\n /**\n * After routing we need to pull any data set to the service scene by other routes from the metadata singleton,\n * as each route has a different instantiation of this scene\n * @private\n */\n private getMetadata() {\n const metadataService = getMetadataService();\n const state = metadataService.getServiceSceneState();\n\n if (state) {\n this.setState({\n ...state,\n });\n }\n }\n\n private onActivate() {\n // Hide show logs button\n const showLogsButton = sceneGraph.findByKeyAndType(this, showLogsButtonSceneKey, ShowLogsButtonScene);\n showLogsButton.setState({ hidden: true });\n this.showVariables();\n this.getMetadata();\n this.resetBodyAndData();\n\n this.setBreakdownView();\n\n // Run queries on activate\n this.runQueries();\n\n // Query Subscriptions\n this._subs.add(this.subscribeToPatternsQuery());\n this._subs.add(this.subscribeToDetectedLabelsQuery());\n\n // Fields tab will update its own count, and update count when a query fails\n this._subs.add(this.subscribeToDetectedFieldsQuery(getDrilldownSlug() !== PageSlugs.fields));\n this._subs.add(this.subscribeToLogsQuery());\n this._subs.add(this.subscribeToLogsCountQuery());\n\n // Variable subscriptions\n this.setSubscribeToLabelsVariable();\n this._subs.add(this.subscribeToFieldsVariable());\n this._subs.add(this.subscribeToMetadataVariable());\n this._subs.add(this.subscribeToLevelsVariableChangedEvent());\n this._subs.add(this.subscribeToLevelsVariableFiltersState());\n this._subs.add(this.subscribeToDataSourceVariable());\n this._subs.add(this.subscribeToPatternsVariable());\n this._subs.add(this.subscribeToLineFiltersVariable());\n\n // Update query runner on manual time range change\n this._subs.add(this.subscribeToTimeRange());\n\n // Migrations\n migrateLineFilterV1(this);\n }\n\n private subscribeToPatternsVariable() {\n return getPatternsVariable(this).subscribeToState((newState, prevState) => {\n if (newState.value !== prevState.value) {\n this.state.$detectedFieldsData?.runQueries();\n this.state.$logsCount?.runQueries();\n }\n });\n }\n\n private subscribeToLineFiltersVariable() {\n return getLineFiltersVariable(this).subscribeToEvent(SceneVariableValueChangedEvent, () => {\n this.state.$logsCount?.runQueries();\n this.state.$detectedFieldsData?.runQueries();\n });\n }\n\n private subscribeToDataSourceVariable() {\n return getDataSourceVariable(this).subscribeToState(() => {\n this.redirectToStart();\n });\n }\n\n private resetTabCount() {\n this.setState({\n fieldsCount: undefined,\n labelsCount: undefined,\n patternsCount: undefined,\n });\n\n getMetadataService().setServiceSceneState(this.state);\n }\n\n private subscribeToFieldsVariable() {\n const fieldsVar = getFieldsVariable(this);\n return fieldsVar.subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.state.$detectedFieldsData?.runQueries();\n this.state.$logsCount?.runQueries();\n }\n });\n }\n\n private subscribeToMetadataVariable() {\n const metadataVar = getMetadataVariable(this);\n return metadataVar.subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.state.$detectedFieldsData?.runQueries();\n this.state.$logsCount?.runQueries();\n }\n });\n }\n\n /**\n * Subscribe to SceneVariableValueChangedEvent and run logs count and detectedFields on update.\n * In the levels variable renderer we update the ad-hoc filters, but we don't always want to immediately execute queries.\n */\n private subscribeToLevelsVariableChangedEvent() {\n return getLevelsVariable(this).subscribeToEvent(SceneVariableValueChangedEvent, () => {\n this.state.$detectedFieldsData?.runQueries();\n });\n }\n\n /**\n * Subscribe to actual filter changes and update the logs count\n * @private\n */\n private subscribeToLevelsVariableFiltersState() {\n const levelsVariable = getLevelsVariable(this);\n return levelsVariable.subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.state.$logsCount?.runQueries();\n }\n });\n }\n\n private runQueries() {\n const slug = getDrilldownSlug();\n const parentSlug = getDrilldownValueSlug();\n\n // If we don't have a patterns count in the tabs, or we are activating the patterns scene, run the pattern query\n if (slug === PageSlugs.patterns || this.state.patternsCount === undefined) {\n this.state.$patternsData?.runQueries();\n }\n\n // If we don't have a detected labels count, or we are activating the labels scene, run the detected labels query\n if (slug === PageSlugs.labels || parentSlug === ValueSlugs.label || this.state.labelsCount === undefined) {\n this.state.$detectedLabelsData?.runQueries();\n }\n\n // If we don't have a detected fields count, or we are activating the fields scene, run the detected fields query\n if (slug === PageSlugs.fields || parentSlug === ValueSlugs.field || this.state.fieldsCount === undefined) {\n this.state.$detectedFieldsData?.runQueries();\n }\n if (this.state.logsCount === undefined) {\n this.state.$logsCount?.runQueries();\n }\n }\n\n private subscribeToPatternsQuery() {\n return this.state.$patternsData?.subscribeToState((newState) => {\n this.updateLoadingState(newState, TabNames.patterns);\n if (newState.data?.state === LoadingState.Done) {\n const patternsResponse = newState.data.series;\n if (patternsResponse?.length !== undefined) {\n // Save the count of patterns to state\n this.setState({\n patternsCount: patternsResponse.length,\n });\n getMetadataService().setPatternsCount(patternsResponse.length);\n }\n }\n });\n }\n\n private subscribeToDetectedLabelsQuery() {\n return this.state.$detectedLabelsData?.subscribeToState((newState) => {\n this.updateLoadingState(newState, TabNames.labels);\n if (newState.data?.state === LoadingState.Done) {\n const detectedLabelsResponse = newState.data;\n // Detected labels API call always returns a single frame, with a field for each label\n const detectedLabelsFields = detectedLabelsResponse.series[0].fields;\n if (detectedLabelsResponse.series.length !== undefined && detectedLabelsFields.length !== undefined) {\n const removeSpecialFields = detectedLabelsResponse.series[0].fields.filter(\n (f) => LEVEL_VARIABLE_VALUE !== f.name\n );\n\n this.setState({\n labelsCount: removeSpecialFields.length + 1, // Add one for detected_level\n });\n getMetadataService().setLabelsCount(detectedLabelsFields.length);\n }\n }\n });\n }\n\n private updateLoadingState(newState: SceneDataState, key: keyof ServiceSceneLoadingStates) {\n const loadingStates = this.state.loadingStates;\n loadingStates[key] = newState.data?.state === LoadingState.Loading;\n // set loading state to true if any of the queries are loading\n const loading = Object.values(loadingStates).some((v) => v);\n this.setState({ loading, loadingStates });\n }\n\n private subscribeToLogsQuery() {\n return this.state.$data?.subscribeToState((newState, prevState) => {\n this.updateLoadingState(newState, TabNames.logs);\n if (newState.data?.state === LoadingState.Done || newState.data?.state === LoadingState.Streaming) {\n const resultCount = newState.data.series[0]?.length ?? 0;\n if (resultCount !== this.state.logsCount) {\n this.setState({\n logsCount: resultCount,\n });\n }\n }\n });\n }\n\n private subscribeToLogsCountQuery() {\n return this.state.$logsCount?.subscribeToState((newState) => {\n if (newState.data?.state === LoadingState.Done) {\n const value: number | undefined = newState.data.series[0]?.fields?.[1]?.values?.[0];\n this.setState({\n totalLogsCount: value,\n });\n }\n });\n }\n\n private subscribeToDetectedFieldsQuery(updateFieldsCount: boolean) {\n return this.state.$detectedFieldsData?.subscribeToState((newState) => {\n this.updateLoadingState(newState, TabNames.fields);\n if (updateFieldsCount && newState.data?.state === LoadingState.Done) {\n const detectedFieldsResponse = newState.data;\n const detectedFieldsFields = detectedFieldsResponse.series[0];\n\n if (detectedFieldsFields !== undefined && detectedFieldsFields.length !== this.state.fieldsCount) {\n this.setState({\n fieldsCount: detectedFieldsFields.length,\n });\n getMetadataService().setFieldsCount(detectedFieldsFields.length);\n }\n }\n });\n }\n\n private subscribeToTimeRange() {\n return sceneGraph.getTimeRange(this).subscribeToState(() => {\n this.state.$patternsData?.runQueries();\n this.state.$detectedLabelsData?.runQueries();\n this.state.$detectedFieldsData?.runQueries();\n this.state.$logsCount?.runQueries();\n });\n }\n\n private resetBodyAndData() {\n let stateUpdate: Partial = {};\n\n if (!this.state.$data) {\n stateUpdate.$data = getServiceSceneQueryRunner();\n }\n\n if (!this.state.$patternsData) {\n stateUpdate.$patternsData = getPatternsQueryRunner();\n }\n\n if (!this.state.$detectedLabelsData) {\n stateUpdate.$detectedLabelsData = getDetectedLabelsQueryRunner();\n }\n\n if (!this.state.$detectedFieldsData) {\n stateUpdate.$detectedFieldsData = getDetectedFieldsQueryRunner();\n }\n\n if (!this.state.$logsCount) {\n stateUpdate.$logsCount = getLogCountQueryRunner();\n }\n\n if (!this.state.body) {\n stateUpdate.body = buildGraphScene();\n }\n\n if (Object.keys(stateUpdate).length) {\n this.setState(stateUpdate);\n }\n }\n\n public setBreakdownView() {\n const { body } = this.state;\n const breakdownView = getDrilldownSlug();\n const breakdownViewDef = breakdownViewsDefinitions.find((v) => v.value === breakdownView);\n\n if (!body) {\n const err = new Error('body is not defined in setBreakdownView!');\n logger.error(err, { msg: 'ServiceScene setBreakdownView error' });\n throw err;\n }\n\n if (breakdownViewDef) {\n body.setState({\n children: [\n ...body.state.children.slice(0, 1),\n breakdownViewDef.getScene((length) => {\n if (breakdownViewDef.value === 'fields') {\n this.setState({ fieldsCount: length });\n }\n }),\n ],\n });\n } else {\n const valueBreakdownView = getDrilldownValueSlug();\n const valueBreakdownViewDef = valueBreakdownViews.find((v) => v.value === valueBreakdownView);\n\n if (valueBreakdownViewDef && this.state.drillDownLabel) {\n body.setState({\n children: [...body.state.children.slice(0, 1), valueBreakdownViewDef.getScene(this.state.drillDownLabel)],\n });\n } else {\n logger.error(new Error('not setting breakdown view'), { msg: 'setBreakdownView error' });\n }\n }\n }\n\n static Component = ({ model }: SceneComponentProps) => {\n const { body } = model.useState();\n if (body) {\n return ;\n }\n\n return ;\n };\n}\n\nfunction buildGraphScene() {\n return new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneFlexItem({\n ySizing: 'content',\n body: new ActionBarScene({}),\n }),\n ],\n });\n}\n\nfunction getPatternsQueryRunner() {\n return getResourceQueryRunner([\n buildResourceQuery(`{${VAR_LABELS_EXPR}}`, 'patterns', { refId: PATTERNS_QUERY_REFID }),\n ]);\n}\n\nfunction getDetectedLabelsQueryRunner() {\n return getResourceQueryRunner([\n buildResourceQuery(`{${VAR_LABELS_EXPR}}`, 'detected_labels', { refId: DETECTED_LABELS_QUERY_REFID }),\n ]);\n}\n\nfunction getDetectedFieldsQueryRunner() {\n return getResourceQueryRunner([\n buildResourceQuery(LOG_STREAM_SELECTOR_EXPR, 'detected_fields', { refId: DETECTED_FIELDS_QUERY_REFID }),\n ]);\n}\n\nfunction getServiceSceneQueryRunner() {\n return getQueryRunner([buildDataQuery(LOG_STREAM_SELECTOR_EXPR, { refId: LOGS_PANEL_QUERY_REFID })]);\n}\n\nfunction getLogCountQueryRunner() {\n const queryRunner = getQueryRunner(\n [\n buildDataQuery(`sum(count_over_time(${LOG_STREAM_SELECTOR_EXPR}[$__auto]))`, {\n refId: LOGS_COUNT_QUERY_REFID,\n queryType: 'instant',\n }),\n ],\n { runQueriesMode: 'manual' } // for some reason when this query is set to auto, it doesn't run on time range update, looks like there is different behavior with data providers not in the special $data prop\n );\n\n if (queryRunner instanceof SceneQueryRunner) {\n return queryRunner;\n }\n const error = new Error('log count query provider is not query runner!');\n logger.error(error, { msg: 'getLogCountQueryRunner: invalid return type' });\n throw error;\n}\n","import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport React from 'react';\nimport { Icon, ToolbarButton, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { getFavoriteLabelValuesFromStorage } from '../../services/store';\nimport { addToFavorites, removeFromFavorites } from '../../services/favorites';\n\nexport interface FavoriteServiceHeaderActionSceneState extends SceneObjectState {\n labelValue: string;\n labelName: string;\n ds: string;\n hover?: boolean;\n}\n\nexport class FavoriteServiceHeaderActionScene extends SceneObjectBase {\n public static Component = ({ model }: SceneComponentProps) => {\n const { ds, labelValue, labelName, hover } = model.useState();\n const isFavorite = getFavoriteLabelValuesFromStorage(ds, labelName).includes(labelValue);\n const styles = useStyles2((theme) => getStyles(theme, isFavorite, hover));\n const tooltipCopy = isFavorite ? `Remove ${labelValue} from favorites` : `Add ${labelValue} to favorites`;\n\n return (\n \n {\n model.setHover(true);\n }}\n onMouseOut={() => {\n model.setHover(false);\n }}\n icon={}\n color={isFavorite ? 'rgb(235, 123, 24)' : '#ccc'}\n onClick={() => model.onClick(isFavorite)}\n name={'star'}\n aria-label={tooltipCopy}\n tooltip={tooltipCopy}\n />\n \n );\n };\n\n public setHover(hover: boolean) {\n this.setState({\n hover,\n });\n }\n\n public onClick(isFavorite: boolean) {\n if (isFavorite) {\n removeFromFavorites(this.state.labelName, this.state.labelValue, this);\n } else {\n addToFavorites(this.state.labelName, this.state.labelValue, this);\n }\n }\n}\n\nfunction getStyles(theme: GrafanaTheme2, isFavorite: boolean, hover = false) {\n return {\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignSelf: 'center',\n }),\n };\n}\n","import React from 'react';\n\nimport { SceneComponentProps, SceneObject, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { LinkButton, useStyles2 } from '@grafana/ui';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { getDrillDownIndexLink, pushUrlHandler } from '../../services/navigate';\nimport { getLabelsVariable } from '../../services/variableGetters';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { SERVICE_NAME, SERVICE_UI_LABEL } from '../../services/variables';\nimport { FilterOp } from '../../services/filterTypes';\nimport { testIds } from '../../services/testIds';\nimport { addToFavorites } from '../../services/favorites';\n\nexport interface SelectServiceButtonState extends SceneObjectState {\n labelValue: string;\n labelName: string;\n hidden?: boolean;\n}\n\nexport class SelectServiceButton extends SceneObjectBase {\n constructor(state: SelectServiceButtonState) {\n super(state);\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n onActivate() {\n const labelsVar = getLabelsVariable(this);\n this.setState({ hidden: labelsVar.state.filters.length > 0 });\n labelsVar.subscribeToState((newState) => {\n this.setState({ hidden: newState.filters.length > 0 });\n });\n }\n\n public getLink = () => {\n if (!this.state.labelValue) {\n return;\n }\n\n return getLabelDrilldownLink(this.state.labelName, this.state.labelValue, this);\n };\n\n public onClick = () => {\n selectLabel(this.state.labelName, this.state.labelValue, this);\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const styles = useStyles2(getStyles);\n const labels = getLabelsVariable(model);\n // Re-render links on label filter changes\n labels.useState();\n const { hidden } = model.useState();\n if (hidden) {\n return null;\n }\n const link = model.getLink();\n return (\n \n Show logs\n \n );\n };\n}\n\n/**\n * Select label tracking and add to favorites\n */\nfunction selectLabel(primaryLabelName: string, primaryLabelValue: string, sceneRef: SceneObject) {\n reportAppInteraction(USER_EVENTS_PAGES.service_selection, USER_EVENTS_ACTIONS.service_selection.service_selected, {\n value: primaryLabelValue,\n label: primaryLabelName,\n });\n\n addToFavorites(primaryLabelName, primaryLabelValue, sceneRef);\n}\n\n/**\n * Builds label drilldown link\n */\nexport function getLabelDrilldownLink(primaryLabelName: string, primaryLabelValue: string, sceneRef: SceneObject) {\n const variable = getLabelsVariable(sceneRef);\n\n const filteredFilters = variable.state.filters.filter(\n (f) => !(f.key === primaryLabelName && f.value === primaryLabelValue)\n );\n\n const filters = [\n ...filteredFilters,\n {\n key: primaryLabelName,\n operator: FilterOp.Equal,\n value: primaryLabelValue,\n },\n ];\n\n if (primaryLabelName === SERVICE_NAME) {\n primaryLabelName = SERVICE_UI_LABEL;\n }\n\n const clonedVar = variable.clone({ filters });\n\n // In this case, we don't have a ServiceScene created yet, so we call a special function to navigate there for the first time\n return getDrillDownIndexLink(primaryLabelName, primaryLabelValue, clonedVar.urlSync?.getUrlState());\n}\n\n/**\n * Navigates to drilldown\n */\nexport function goToLabelDrillDownLink(primaryLabelName: string, primaryLabelValue: string, sceneRef: SceneObject) {\n const link = getLabelDrilldownLink(primaryLabelName, primaryLabelValue, sceneRef);\n selectLabel(primaryLabelName, primaryLabelValue, sceneRef);\n pushUrlHandler(link);\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n button: css({\n alignSelf: 'center',\n }),\n };\n}\n","import React from 'react';\nimport { GrotError } from 'Components/GrotError';\nimport { TextLink, Text } from '@grafana/ui';\n\nexport const ConfigureVolumeError = () => {\n return (\n \n

Log volume has not been configured.

\n

\n \n Instructions to enable volume in the Loki config:\n \n

\n \n
\n          \n            limits_config:\n            
\n   volume_enabled: true\n
\n
\n
\n
\n );\n};\n","import React from 'react';\nimport { GrotError } from 'Components/GrotError';\n\nexport const NoServiceSearchResults = () => {\n return (\n \n

No service matched your search.

\n
\n );\n};\n","import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { Select, Stack, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { ServiceSelectionScene } from './ServiceSelectionScene';\nimport { ServiceSelectionTabsScene, TabOption } from './ServiceSelectionTabsScene';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport interface TabPopoverSceneState extends SceneObjectState {}\n\nexport class TabPopoverScene extends SceneObjectBase {\n public static Component = ({ model }: SceneComponentProps) => {\n const serviceSelectionScene = sceneGraph.getAncestor(model, ServiceSelectionScene);\n const serviceSelectionTabsScene = sceneGraph.getAncestor(model, ServiceSelectionTabsScene);\n const { tabOptions, showPopover } = serviceSelectionTabsScene.useState();\n const popoverStyles = useStyles2(getPopoverStyles);\n\n const tabOptionsWithIcon: TabOption[] = tabOptions.map((opt) => {\n return {\n ...opt,\n icon: opt.saved ? 'save' : undefined,\n label: `${opt.label}`,\n };\n });\n\n return (\n \n
\n \n menuShouldPortal={false}\n width={50}\n onBlur={() => {\n serviceSelectionTabsScene.toggleShowPopover();\n }}\n autoFocus={true}\n isOpen={showPopover}\n placeholder={'Search labels'}\n options={tabOptionsWithIcon}\n isSearchable={true}\n openMenuOnFocus={true}\n onChange={(option) => {\n // Add value to variable\n if (option.value) {\n // Hide the popover\n serviceSelectionTabsScene.toggleShowPopover();\n // Set new tab\n serviceSelectionScene.setSelectedTab(option.value);\n }\n }}\n />\n
\n
\n );\n };\n}\n\nconst getPopoverStyles = (theme: GrafanaTheme2) => ({\n card: {\n body: css({\n padding: theme.spacing(1),\n }),\n p: css({\n maxWidth: 300,\n }),\n },\n});\n","import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState, SceneQueryRunner } from '@grafana/scenes';\nimport React, { useRef } from 'react';\nimport { Icon, Popover, PopoverController, Tab, TabsBar, Tooltip, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2, LoadingState, SelectableValue } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { SERVICE_NAME, SERVICE_UI_LABEL } from '../../services/variables';\nimport { truncateText } from '../../services/text';\nimport { rest } from 'lodash';\nimport { ServiceSelectionScene } from './ServiceSelectionScene';\nimport { getSceneQueryRunner } from '../../services/panel';\nimport { buildResourceQuery } from '../../services/query';\nimport { TabPopoverScene } from './TabPopoverScene';\nimport { getDataSourceVariable, getServiceSelectionPrimaryLabel } from '../../services/variableGetters';\nimport { getFavoriteTabsFromStorage, removeTabFromLocalStorage } from '../../services/store';\n\nexport interface TabOption extends SelectableValue {\n label: string;\n value: string;\n active?: boolean;\n saved?: boolean;\n savedIndex?: number;\n}\n\nexport interface ServiceSelectionTabsSceneState extends SceneObjectState {\n tabOptions: TabOption[];\n showPopover: boolean;\n $labelsData: SceneQueryRunner;\n popover?: TabPopoverScene;\n}\n\ninterface LabelOptions {\n label: string;\n cardinality: number;\n}\n\nexport class ServiceSelectionTabsScene extends SceneObjectBase {\n constructor(state: Partial) {\n super({\n showPopover: false,\n $labelsData: getSceneQueryRunner({\n queries: [buildResourceQuery('', 'detected_labels')],\n runQueriesMode: 'manual',\n }),\n tabOptions: [\n {\n label: SERVICE_UI_LABEL,\n value: SERVICE_NAME,\n saved: true,\n },\n ],\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n // Scene vars\n const { tabOptions, showPopover, popover, $labelsData } = model.useState();\n const { data } = $labelsData.useState();\n const serviceSelectionScene = sceneGraph.getAncestor(model, ServiceSelectionScene);\n const primaryLabel = getServiceSelectionPrimaryLabel(model);\n // Re-render when active tab changes, which is stored in the primary label variable\n primaryLabel.useState();\n\n // Constants\n const styles = useStyles2(getTabsStyles);\n const popoverRef = useRef(null);\n const maxLabelLength = 15;\n\n return (\n \n {tabOptions\n .filter((tabLabel) => tabLabel.saved || tabLabel.active || tabLabel.value === SERVICE_NAME)\n .sort((a, b) => {\n // Service name goes first\n if (a.value === SERVICE_NAME || b.value === SERVICE_NAME) {\n return a.value === SERVICE_NAME ? -1 : 1;\n }\n\n // Then sort by the order added to local storage\n return (a.savedIndex ?? 0) - (b.savedIndex ?? 0);\n })\n .map((tabLabel) => {\n const tab = (\n {\n // Set the new active tab\n serviceSelectionScene.setSelectedTab(tabLabel.value);\n }}\n label={truncateText(tabLabel.label, maxLabelLength, true)}\n active={tabLabel.active}\n suffix={\n tabLabel.value !== SERVICE_NAME\n ? (props) => {\n return (\n <>\n \n {\n if (e.key === 'Enter') {\n model.removeSavedTab(tabLabel.value);\n }\n }}\n onClick={(e) => {\n // Don't bubble up to the tab component, we don't want to select the tab we're removing\n e.stopPropagation();\n model.removeSavedTab(tabLabel.value);\n }}\n name={'times'}\n className={cx(props.className)}\n />\n \n \n );\n }\n : undefined\n }\n />\n );\n\n if (tabLabel.label.length > maxLabelLength) {\n return (\n \n {tab}\n \n );\n } else {\n return tab;\n }\n })}\n {data?.state === LoadingState.Loading && }\n\n {/* Add more tabs tab */}\n {data?.state === LoadingState.Done && (\n \n \n \n )}\n\n {popover && (\n }>\n {(showPopper, hidePopper, popperProps) => {\n const blurFocusProps = {\n onBlur: hidePopper,\n onFocus: showPopper,\n };\n\n return (\n <>\n {popoverRef.current && (\n <>\n \n \n )}\n \n );\n }}\n \n )}\n \n );\n };\n\n removeSavedTab = (labelName: string) => {\n removeTabFromLocalStorage(getDataSourceVariable(this).getValue().toString(), labelName);\n\n const labels = this.getLabelsFromQueryRunnerState();\n if (labels) {\n this.populatePrimaryLabelsVariableOptions(labels);\n }\n\n // If the user is closing the active tab, select the default tab\n const serviceSelectionScene = sceneGraph.getAncestor(this, ServiceSelectionScene);\n if (serviceSelectionScene.getSelectedTab() === labelName) {\n serviceSelectionScene.selectDefaultLabelTab();\n }\n };\n\n toggleShowPopover = () => {\n this.setState({\n showPopover: !this.state.showPopover,\n });\n };\n\n getLabelsFromQueryRunnerState(state = this.state.$labelsData?.state): LabelOptions[] | undefined {\n return state.data?.series[0].fields.map((f) => {\n return {\n label: f.name,\n cardinality: f.values[0],\n };\n });\n }\n\n public populatePrimaryLabelsVariableOptions(labels: LabelOptions[]) {\n const serviceSelectionScene = sceneGraph.getAncestor(this, ServiceSelectionScene);\n const selectedTab = serviceSelectionScene.getSelectedTab();\n const savedTabs = getFavoriteTabsFromStorage(getDataSourceVariable(this).getValue().toString());\n\n const tabOptions: TabOption[] = labels\n .map((l) => {\n const savedIndex = savedTabs.indexOf(l.label);\n const option: TabOption = {\n label: l.label === SERVICE_NAME ? SERVICE_UI_LABEL : l.label,\n value: l.label,\n active: selectedTab === l.label,\n saved: savedIndex !== -1,\n savedIndex,\n };\n return option;\n })\n .sort((a, b) => {\n // Sort service first\n if (a.value === SERVICE_NAME || b.value === SERVICE_NAME) {\n return a.value === SERVICE_NAME ? -1 : 1;\n }\n\n // Then sort alphabetically\n return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;\n });\n this.setState({\n tabOptions,\n });\n }\n\n private runDetectedLabels() {\n this.state.$labelsData.runQueries();\n }\n\n private runDetectedLabelsSubs() {\n // Update labels/tabs on time range change\n this._subs.add(\n sceneGraph.getTimeRange(this).subscribeToState(() => {\n this.runDetectedLabels();\n })\n );\n\n // Update labels (tabs) when datasource is changed\n this._subs.add(\n getDataSourceVariable(this).subscribeToState(() => {\n this.runDetectedLabels();\n })\n );\n }\n\n private onActivate() {\n // Get labels\n this.runDetectedLabels();\n\n this.setState({\n popover: new TabPopoverScene({}),\n });\n\n this.runDetectedLabelsSubs();\n\n // Update labels (tabs) when datasource is changed\n this._subs.add(\n getDataSourceVariable(this).subscribeToState(() => {\n this.state.$labelsData.runQueries();\n })\n );\n\n this._subs.add(\n getServiceSelectionPrimaryLabel(this).subscribeToState(() => {\n const labels = this.getLabelsFromQueryRunnerState(this.state.$labelsData?.state);\n if (labels) {\n this.populatePrimaryLabelsVariableOptions(labels);\n }\n })\n );\n\n this._subs.add(\n this.state.$labelsData.subscribeToState((newState) => {\n if (newState.data?.state === LoadingState.Done) {\n const labels = this.getLabelsFromQueryRunnerState(newState);\n const serviceSelectionScene = sceneGraph.getAncestor(this, ServiceSelectionScene);\n\n if (labels) {\n this.populatePrimaryLabelsVariableOptions(labels);\n }\n\n const selectedTab = serviceSelectionScene.getSelectedTab();\n // If the tab is no longer available, either because the user changed the datasource, or time range, select the default tab\n if (!labels?.some((label) => label.label === selectedTab)) {\n serviceSelectionScene.selectDefaultLabelTab();\n }\n }\n })\n );\n }\n}\n\nconst getTabsStyles = (theme: GrafanaTheme2) => ({\n tabs: css({\n overflowY: 'hidden',\n }),\n addTab: css({\n label: 'add-label-tab',\n color: theme.colors.primary.text,\n '& button': {\n color: theme.colors.primary.text,\n },\n }),\n popover: css({\n borderRadius: theme.shape.radius.default,\n boxShadow: theme.shadows.z3,\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n }),\n});\n","import React from 'react';\nimport { GrotError } from 'Components/GrotError';\n\nexport const NoServiceVolume = (props: { labelName: string }) => {\n return (\n \n

\n No logs found in {props.labelName}.
\n Please adjust time range or select another label.\n

\n
\n );\n};\n","import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { Button, useStyles2 } from '@grafana/ui';\nimport { testIds } from '../../services/testIds';\nimport { addToFilters, FilterType } from '../ServiceScene/Breakdowns/AddToFiltersButton';\nimport { VAR_LABELS } from '../../services/variables';\nimport { getLabelsVariable, getValueFromAdHocVariableFilter } from '../../services/variableGetters';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../services/analytics';\nimport { css } from '@emotion/css';\nimport React from 'react';\nimport { FilterOp } from '../../services/filterTypes';\n\nexport interface AddLabelToFiltersHeaderActionSceneState extends SceneObjectState {\n name: string;\n value: string;\n included: boolean | null;\n}\n\nexport class AddLabelToFiltersHeaderActionScene extends SceneObjectBase {\n constructor(state: Omit) {\n super({\n ...state,\n included: null,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n onActivate() {\n this.setState({ ...this.isSelected() });\n this._subs.add(\n getLabelsVariable(this).subscribeToState(() => {\n const selected = this.isSelected();\n if (this.state.included !== selected.included) {\n this.setState({ ...selected });\n }\n })\n );\n }\n\n isSelected = () => {\n const variable = getLabelsVariable(this);\n\n // Check if the filter is already there\n const filterInSelectedFilters = variable.state.filters.find((f) => {\n const value = getValueFromAdHocVariableFilter(VAR_LABELS, f);\n return f.key === this.state.name && value.value === this.state.value;\n });\n\n if (!filterInSelectedFilters) {\n return { included: false };\n }\n\n // @todo support regex operator\n return {\n included: filterInSelectedFilters.operator === FilterOp.Equal,\n };\n };\n\n public static Component = ({ model }: SceneComponentProps) => {\n const { value, included } = model.useState();\n\n const styles = useStyles2(getStyles);\n return (\n \n (included === true ? model.onClick('clear') : model.onClick('include'))}\n data-testid={testIds.exploreServiceDetails.buttonFilterInclude}\n >\n {included ? 'Remove' : 'Include'}\n \n \n );\n };\n\n public getFilter() {\n return { name: this.state.name, value: this.state.value };\n }\n\n public onClick = (type: FilterType) => {\n const filter = this.getFilter();\n\n addToFilters(filter.name, filter.value, type, this, VAR_LABELS);\n\n const variable = getLabelsVariable(this);\n reportAppInteraction(USER_EVENTS_PAGES.service_selection, USER_EVENTS_ACTIONS.service_selection.add_to_filters, {\n filterType: 'index-filters',\n key: filter.name,\n action: type,\n filtersLength: variable?.state.filters.length || 0,\n });\n\n this.setState({ ...this.isSelected() });\n };\n}\n\nconst getStyles = () => {\n return {\n container: css({\n display: 'flex',\n justifyContent: 'center',\n }),\n includeButton: css({\n borderRadius: 0,\n }),\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignSelf: 'center',\n }),\n };\n};\n","import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { IconButton, Pagination, Select, useStyles2 } from '@grafana/ui';\nimport React, { useEffect } from 'react';\nimport { ServiceSelectionScene } from './ServiceSelectionScene';\nimport { setServiceSelectionPageCount } from '../../services/store';\n\nexport interface ServiceSelectionPaginationSceneState extends SceneObjectState {}\n\nexport class ServiceSelectionPaginationScene extends SceneObjectBase {\n public static PageCount = ({\n model,\n totalCount,\n }: SceneComponentProps & { totalCount: number }) => {\n const styles = useStyles2(getPageCountStyles);\n const serviceSelectionScene = sceneGraph.getAncestor(model, ServiceSelectionScene);\n const { countPerPage } = serviceSelectionScene.useState();\n const options = getCountOptionsFromTotal(totalCount);\n useEffect(() => {\n const lastOptionValue = options[options.length - 1]?.value ?? countPerPage.toString();\n if (countPerPage.toString() > lastOptionValue) {\n serviceSelectionScene.setState({ countPerPage: parseInt(lastOptionValue, 10) });\n }\n }, [countPerPage, options, serviceSelectionScene]);\n return (\n \n \n Showing{' '}\n {\n if (value.value) {\n const countPerPage = parseInt(value.value, 10);\n serviceSelectionScene.setState({ countPerPage, currentPage: 1 });\n serviceSelectionScene.updateBody();\n setServiceSelectionPageCount(countPerPage);\n }\n }}\n options={options}\n value={countPerPage.toString()}\n />{' '}\n of {totalCount}{' '}\n \n \n \n );\n };\n public static Component = ({\n model,\n totalCount,\n }: SceneComponentProps & { totalCount: number }) => {\n const serviceSelectionScene = sceneGraph.getAncestor(model, ServiceSelectionScene);\n const { countPerPage, currentPage } = serviceSelectionScene.useState();\n const getStyles = (theme: GrafanaTheme2) => ({\n pagination: css({\n float: 'none',\n }),\n paginationWrap: css({\n [theme.breakpoints.up('lg')]: {\n display: 'none',\n },\n [theme.breakpoints.down('lg')]: {\n display: 'flex',\n justifyContent: 'flex-end',\n flex: '1 0 auto',\n },\n }),\n paginationWrapMd: css({\n [theme.breakpoints.down('lg')]: {\n display: 'none',\n },\n [theme.breakpoints.up('lg')]: {\n display: 'flex',\n justifyContent: 'flex-end',\n flex: '1 0 auto',\n },\n }),\n });\n\n const styles = useStyles2(getStyles);\n\n if (totalCount > countPerPage) {\n return (\n <>\n \n {\n serviceSelectionScene.setState({ currentPage: toPage });\n serviceSelectionScene.updateBody();\n }}\n />\n \n \n {\n serviceSelectionScene.setState({ currentPage: toPage });\n serviceSelectionScene.updateBody();\n }}\n />\n \n \n );\n }\n\n return null;\n };\n}\n\nfunction getPageCountStyles(theme: GrafanaTheme2) {\n return {\n icon: css({\n color: theme.colors.text.disabled,\n marginLeft: theme.spacing.x1,\n }),\n searchPageCountWrap: css({\n display: 'flex',\n alignItems: 'center',\n }),\n select: css({\n maxWidth: '65px',\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n }),\n searchFieldPlaceholderText: css({\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.text.disabled,\n alignItems: 'center',\n display: 'flex',\n flex: '1 0 auto',\n textWrapMode: 'nowrap',\n }),\n };\n}\n\nexport function getCountOptionsFromTotal(totalCount: number) {\n const delta = 20;\n const end = 60;\n const roundedTotalCount = Math.ceil(totalCount / delta) * delta;\n\n const options: Array> = [];\n for (let count = delta; count <= end && count <= roundedTotalCount; count += delta) {\n let label = count.toString();\n if (count < delta) {\n label = count.toString();\n } else if (count > totalCount) {\n label = totalCount.toString();\n }\n options.push({\n value: count.toString(),\n label,\n });\n }\n\n return options;\n}\n","import { css } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport React from 'react';\nimport {\n AdHocVariableFilter,\n DashboardCursorSync,\n DataFrame,\n dateTime,\n GrafanaTheme2,\n LoadingState,\n TimeRange,\n} from '@grafana/data';\nimport {\n AdHocFiltersVariable,\n behaviors,\n DataSourceVariable,\n PanelBuilders,\n SceneComponentProps,\n SceneCSSGridItem,\n SceneCSSGridLayout,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneObjectUrlSyncConfig,\n SceneObjectUrlValues,\n SceneQueryRunner,\n SceneVariableSet,\n VizPanel,\n} from '@grafana/scenes';\nimport {\n DrawStyle,\n Field,\n LegendDisplayMode,\n PanelContext,\n SeriesVisibilityChangeMode,\n StackingMode,\n useStyles2,\n} from '@grafana/ui';\nimport { addTabToLocalStorage, getFavoriteLabelValuesFromStorage, getServiceSelectionPageCount } from 'services/store';\nimport {\n EXPLORATION_DS,\n LEVEL_VARIABLE_VALUE,\n SERVICE_NAME,\n SERVICE_UI_LABEL,\n VAR_AGGREGATED_METRICS,\n VAR_LABELS_REPLICA,\n VAR_LABELS_REPLICA_EXPR,\n VAR_PRIMARY_LABEL,\n VAR_PRIMARY_LABEL_EXPR,\n VAR_PRIMARY_LABEL_SEARCH,\n} from 'services/variables';\nimport { goToLabelDrillDownLink, SelectServiceButton } from './SelectServiceButton';\nimport {\n buildDataQuery,\n buildVolumeQuery,\n renderLogQLLabelFilters,\n unwrapWildcardSearch,\n wrapWildcardSearch,\n} from 'services/query';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';\nimport { getQueryRunner, getSceneQueryRunner, setLevelColorOverrides } from 'services/panel';\nimport { ConfigureVolumeError } from './ConfigureVolumeError';\nimport { NoServiceSearchResults } from './NoServiceSearchResults';\nimport { getLevelLabelsFromSeries, toggleLevelVisibility } from 'services/levels';\nimport { ServiceFieldSelector } from '../ServiceScene/Breakdowns/FieldSelector';\nimport { CustomConstantVariable } from '../../services/CustomConstantVariable';\nimport { areArraysEqual } from '../../services/comparison';\nimport {\n clearServiceSelectionSearchVariable,\n getAggregatedMetricsVariable,\n getDataSourceVariable,\n getLabelsVariable,\n getLabelsVariableReplica,\n getServiceSelectionPrimaryLabel,\n getServiceSelectionSearchVariable,\n setServiceSelectionPrimaryLabelKey,\n} from '../../services/variableGetters';\nimport { config, locationService } from '@grafana/runtime';\nimport { VariableHide } from '@grafana/schema';\nimport { ToolbarScene } from '../IndexScene/ToolbarScene';\nimport { IndexScene, showLogsButtonSceneKey } from '../IndexScene/IndexScene';\nimport { ServiceSelectionTabsScene } from './ServiceSelectionTabsScene';\nimport { FavoriteServiceHeaderActionScene } from './FavoriteServiceHeaderActionScene';\nimport { pushUrlHandler } from '../../services/navigate';\nimport { NoServiceVolume } from './NoServiceVolume';\nimport { getQueryRunnerFromChildren } from '../../services/scenes';\nimport { AddLabelToFiltersHeaderActionScene } from './AddLabelToFiltersHeaderActionScene';\nimport { ShowLogsButtonScene } from '../IndexScene/ShowLogsButtonScene';\nimport { ServiceSelectionPaginationScene } from './ServiceSelectionPaginationScene';\n\nconst aggregatedMetricsEnabled: boolean | undefined = config.featureToggles.exploreLogsAggregatedMetrics;\n// Don't export AGGREGATED_SERVICE_NAME, we want to rename things so the rest of the application is agnostic to how we got the services\nconst AGGREGATED_SERVICE_NAME = '__aggregated_metric__';\n\n//@todo make start date user configurable, currently hardcoded for experimental cloud release\nexport const AGGREGATED_METRIC_START_DATE = dateTime('2024-08-30', 'YYYY-MM-DD');\n\ninterface ServiceSelectionSceneState extends SceneObjectState {\n // The body of the component\n body: SceneCSSGridLayout;\n // Show logs of a certain level for a given service\n serviceLevel: Map;\n // Logs volume API response as dataframe with SceneQueryRunner\n $data: SceneQueryRunner;\n tabs?: ServiceSelectionTabsScene;\n // Pagination options\n countPerPage: number;\n currentPage: number;\n paginationScene?: ServiceSelectionPaginationScene;\n\n showPopover: boolean;\n tabOptions: Array<{\n label: string;\n value: string;\n }>;\n}\n\nfunction renderPrimaryLabelFilters(filters: AdHocVariableFilter[]): string {\n if (filters.length) {\n const filter = filters[0];\n return `${filter.key}${filter.operator}\\`${filter.value}\\``;\n }\n\n return '';\n}\n\nconst primaryLabelUrlKey = 'var-primary_label';\nconst datasourceUrlKey = 'var-ds';\n\nexport class ServiceSelectionScene extends SceneObjectBase {\n protected _urlSync = new SceneObjectUrlSyncConfig(this, {\n keys: [primaryLabelUrlKey],\n });\n\n constructor(state: Partial) {\n super({\n body: new SceneCSSGridLayout({ children: [] }),\n $variables: new SceneVariableSet({\n variables: [\n // Service search variable\n new CustomConstantVariable({\n name: VAR_PRIMARY_LABEL_SEARCH,\n label: 'Service',\n hide: VariableHide.hideVariable,\n skipUrlSync: true,\n value: '.+',\n }),\n // variable that stores if aggregated metrics are supported for the query\n new CustomConstantVariable({\n name: VAR_AGGREGATED_METRICS,\n label: '',\n hide: VariableHide.hideLabel,\n value: SERVICE_NAME,\n skipUrlSync: true,\n options: [\n {\n value: SERVICE_NAME,\n label: SERVICE_NAME,\n },\n {\n value: AGGREGATED_SERVICE_NAME,\n label: AGGREGATED_SERVICE_NAME,\n },\n ],\n }),\n // The active tab expression, hidden variable\n new AdHocFiltersVariable({\n name: VAR_PRIMARY_LABEL,\n hide: VariableHide.hideLabel,\n expressionBuilder: (filters) => {\n return renderPrimaryLabelFilters(filters);\n },\n filters: [\n {\n key: getSelectedTabFromUrl().key ?? SERVICE_NAME,\n value: '.+',\n operator: '=~',\n },\n ],\n }),\n new AdHocFiltersVariable({\n name: VAR_LABELS_REPLICA,\n datasource: EXPLORATION_DS,\n layout: 'vertical',\n filters: [],\n expressionBuilder: renderLogQLLabelFilters,\n hide: VariableHide.hideVariable,\n key: 'adhoc_service_filter_replica',\n skipUrlSync: true,\n }),\n ],\n }),\n $data: getSceneQueryRunner({\n queries: [],\n runQueriesMode: 'manual',\n }),\n serviceLevel: new Map(),\n // pagination\n countPerPage: getServiceSelectionPageCount() ?? 20,\n currentPage: 1,\n\n showPopover: false,\n tabOptions: [\n {\n label: SERVICE_UI_LABEL,\n value: SERVICE_NAME,\n },\n ],\n ...state,\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n public static Component = ({ model }: SceneComponentProps) => {\n const styles = useStyles2(getStyles);\n const { body, $data, tabs, paginationScene } = model.useState();\n const { data } = $data.useState();\n const selectedTab = model.getSelectedTab();\n\n const serviceStringVariable = getServiceSelectionSearchVariable(model);\n const { label, value: searchValue } = serviceStringVariable.useState();\n const hasSearch = searchValue && searchValue !== '.+';\n\n const { labelsByVolume, labelsToQuery } = model.getLabels(data?.series);\n const isLogVolumeLoading =\n data?.state === LoadingState.Loading || data?.state === LoadingState.Streaming || data === undefined;\n const volumeApiError = $data.state.data?.state === LoadingState.Error;\n\n const onSearchChange = (serviceName?: string) => {\n model.onSearchServicesChange(serviceName);\n };\n\n const filterLabel = model.formatPrimaryLabelForUI();\n let customValue = serviceStringVariable.getValue().toString();\n if (customValue === '.+') {\n customValue = '';\n }\n const customLabel = unwrapWildcardSearch(customValue);\n\n return (\n
\n
\n {tabs && }\n \n
\n onSearchChange(serviceName)}\n selectOption={(value: string) => {\n goToLabelDrillDownLink(selectedTab, value, model);\n }}\n label={filterLabel}\n options={\n labelsToQuery?.map((serviceName) => ({\n value: serviceName,\n label: serviceName,\n })) ?? []\n }\n />\n {!isLogVolumeLoading && (\n \n {paginationScene && (\n \n )}\n {paginationScene && (\n \n )}\n \n )}\n
\n
\n {/** If we don't have any servicesByVolume, volume endpoint is probably not enabled */}\n {!isLogVolumeLoading && volumeApiError && }\n {!isLogVolumeLoading && !volumeApiError && hasSearch && !labelsByVolume?.length && }\n {!isLogVolumeLoading && !volumeApiError && !hasSearch && !labelsByVolume?.length && (\n \n )}\n {!(!isLogVolumeLoading && volumeApiError) && (\n
\n \n
\n {paginationScene && (\n \n )}\n
\n
\n )}\n
\n
\n );\n };\n\n // We could also run model.setState in component, but it is recommended to implement the state-modifying methods in the scene object\n onSearchServicesChange = debounce((primaryLabelSearch?: string) => {\n // Set search variable\n const searchVar = getServiceSelectionSearchVariable(this);\n\n const newSearchString = primaryLabelSearch ? wrapWildcardSearch(primaryLabelSearch) : '.+';\n if (newSearchString !== searchVar.state.value) {\n searchVar.setState({\n value: primaryLabelSearch ? wrapWildcardSearch(primaryLabelSearch) : '.+',\n label: primaryLabelSearch ?? '',\n });\n }\n\n const primaryLabelVar = getServiceSelectionPrimaryLabel(this);\n const filter = primaryLabelVar.state.filters[0];\n\n // Update primary label with search string\n if (wrapWildcardSearch(searchVar.state.value.toString()) !== filter.value) {\n primaryLabelVar.setState({\n filters: [\n {\n ...filter,\n value: wrapWildcardSearch(searchVar.state.value.toString()),\n },\n ],\n });\n }\n\n this.setState({\n currentPage: 1,\n });\n\n reportAppInteraction(\n USER_EVENTS_PAGES.service_selection,\n USER_EVENTS_ACTIONS.service_selection.search_services_changed,\n {\n searchQuery: primaryLabelSearch,\n }\n );\n }, 500);\n\n /**\n * Set changes from the URL to the state of the primary label variable\n */\n getUrlState() {\n const { key } = getSelectedTabFromUrl();\n const primaryLabelVar = getServiceSelectionPrimaryLabel(this);\n const filter = primaryLabelVar.state.filters[0];\n\n if (filter.key && filter.key !== key) {\n getServiceSelectionPrimaryLabel(this).setState({\n filters: [\n {\n ...filter,\n key: key ?? filter.key,\n },\n ],\n });\n }\n\n return {};\n }\n\n /**\n * Unused, but required\n * @param values\n */\n updateFromUrl(values: SceneObjectUrlValues) {}\n\n addDatasourceChangeToBrowserHistory(newDs: string) {\n const location = locationService.getLocation();\n const search = new URLSearchParams(location.search);\n const dsUrl = search.get(datasourceUrlKey);\n if (dsUrl && newDs !== dsUrl) {\n const currentUrl = location.pathname + location.search;\n search.set(datasourceUrlKey, newDs);\n const newUrl = location.pathname + '?' + search.toString();\n if (currentUrl !== newUrl) {\n pushUrlHandler(newUrl);\n }\n }\n }\n\n /**\n * Attempting to add any change to the primary label variable (i.e. the selected tab) as a browser history event\n * @param newKey\n * @param replace\n */\n addLabelChangeToBrowserHistory(newKey: string, replace = false) {\n const { key: primaryLabelRaw, search, location } = getSelectedTabFromUrl();\n if (primaryLabelRaw) {\n const primaryLabelSplit = primaryLabelRaw?.split('|');\n const keyInUrl = primaryLabelSplit?.[0];\n\n if (keyInUrl !== newKey) {\n primaryLabelSplit[0] = newKey;\n search.set(primaryLabelUrlKey, primaryLabelSplit.join('|'));\n const currentUrl = location.pathname + location.search;\n const newUrl = location.pathname + '?' + search.toString();\n if (currentUrl !== newUrl) {\n if (replace) {\n locationService.replace(newUrl);\n } else {\n pushUrlHandler(newUrl);\n }\n }\n }\n }\n }\n\n getSelectedTab() {\n return getServiceSelectionPrimaryLabel(this).state.filters[0]?.key;\n }\n\n selectDefaultLabelTab() {\n // Need to update the history before the state with replace instead of push, or we'll get invalid services saved to url state after changing datasource\n this.addLabelChangeToBrowserHistory(SERVICE_NAME, true);\n this.setSelectedTab(SERVICE_NAME);\n }\n\n setSelectedTab(labelName: string) {\n addTabToLocalStorage(getDataSourceVariable(this).getValue().toString(), labelName);\n\n // clear active search\n clearServiceSelectionSearchVariable(this);\n\n // Update the primary label variable\n setServiceSelectionPrimaryLabelKey(labelName, this);\n }\n\n // Creates a layout with timeseries panel\n buildServiceLayout(\n primaryLabelName: string,\n primaryLabelValue: string,\n timeRange: TimeRange,\n serviceLabelVar: CustomConstantVariable,\n primaryLabelVar: AdHocFiltersVariable,\n datasourceVar: DataSourceVariable\n ) {\n let splitDuration;\n if (timeRange.to.diff(timeRange.from, 'hours') >= 4 && timeRange.to.diff(timeRange.from, 'hours') <= 26) {\n splitDuration = '2h';\n }\n const headerActions = [];\n\n if (this.isAggregatedMetricsActive()) {\n headerActions.push(new SelectServiceButton({ labelValue: primaryLabelValue, labelName: primaryLabelName }));\n } else {\n headerActions.push(\n new AddLabelToFiltersHeaderActionScene({\n name: primaryLabelName,\n value: primaryLabelValue,\n })\n );\n headerActions.push(new SelectServiceButton({ labelValue: primaryLabelValue, labelName: primaryLabelName }));\n }\n const panel = PanelBuilders.timeseries()\n // If service was previously selected, we show it in the title\n .setTitle(primaryLabelValue)\n .setData(\n getQueryRunner(\n [\n buildDataQuery(this.getMetricExpression(primaryLabelValue, serviceLabelVar, primaryLabelVar), {\n legendFormat: `{{${LEVEL_VARIABLE_VALUE}}}`,\n splitDuration,\n refId: `ts-${primaryLabelValue}`,\n step: serviceLabelVar.state.value === AGGREGATED_SERVICE_NAME ? '10s' : undefined,\n }),\n ],\n { runQueriesMode: 'manual' }\n )\n )\n .setCustomFieldConfig('stacking', { mode: StackingMode.Normal })\n .setCustomFieldConfig('fillOpacity', 100)\n .setCustomFieldConfig('lineWidth', 0)\n .setCustomFieldConfig('pointSize', 0)\n .setCustomFieldConfig('drawStyle', DrawStyle.Bars)\n .setUnit('short')\n .setOverrides(setLevelColorOverrides)\n .setOption('legend', {\n showLegend: true,\n calcs: ['sum'],\n placement: 'right',\n displayMode: LegendDisplayMode.Table,\n })\n .setHeaderActions([\n new FavoriteServiceHeaderActionScene({\n ds: datasourceVar.getValue()?.toString() ?? '',\n labelName: primaryLabelName,\n labelValue: primaryLabelValue,\n }),\n ...headerActions,\n ])\n .build();\n\n panel.setState({\n extendPanelContext: (_, context) =>\n this.extendTimeSeriesLegendBus(primaryLabelName, primaryLabelValue, context, panel),\n });\n\n const cssGridItem = new SceneCSSGridItem({\n $behaviors: [new behaviors.CursorSync({ key: 'serviceCrosshairSync', sync: DashboardCursorSync.Crosshair })],\n body: panel,\n });\n\n cssGridItem.addActivationHandler(() => {\n const runner = getQueryRunnerFromChildren(cssGridItem)[0];\n // If the query runner has already ran, the scene must be cached, don't re-run as the volume query will be triggered which will execute another panel query\n if (runner.state.data?.state !== LoadingState.Done) {\n this.runPanelQuery(cssGridItem);\n }\n });\n\n return cssGridItem;\n }\n\n isAggregatedMetricsActive() {\n const toolbar = this.getQueryOptionsToolbar();\n return !toolbar?.state.options.aggregatedMetrics.disabled && toolbar?.state.options.aggregatedMetrics.active;\n }\n\n getLevelFilterForService = (service: string) => {\n let serviceLevels = this.state.serviceLevel.get(service) || [];\n if (serviceLevels.length === 0) {\n return '';\n }\n const filters = serviceLevels.map((level) => {\n if (level === 'logs') {\n level = '';\n }\n return `${LEVEL_VARIABLE_VALUE}=\\`${level}\\``;\n });\n return ` | ${filters.join(' or ')} `;\n };\n\n // Creates a layout with logs panel\n buildServiceLogsLayout = (labelName: string, labelValue: string) => {\n const levelFilter = this.getLevelFilterForService(labelValue);\n const cssGridItem = new SceneCSSGridItem({\n $behaviors: [new behaviors.CursorSync({ sync: DashboardCursorSync.Off })],\n body: PanelBuilders.logs()\n // Hover header set to true removes unused header padding, displaying more logs\n .setHoverHeader(true)\n .setData(\n getQueryRunner(\n [\n buildDataQuery(this.getLogExpression(labelName, labelValue, levelFilter), {\n maxLines: 100,\n refId: `logs-${labelValue}`,\n }),\n ],\n {\n runQueriesMode: 'manual',\n }\n )\n )\n .setTitle(labelValue)\n .setOption('showTime', true)\n .setOption('enableLogDetails', false)\n .build(),\n });\n\n cssGridItem.addActivationHandler(() => {\n const runner = getQueryRunnerFromChildren(cssGridItem)[0];\n // If the query runner has already ran, the scene must be cached, don't re-run as the volume query will be triggered which will execute another panel query\n if (runner.state.data?.state !== LoadingState.Done) {\n this.runPanelQuery(cssGridItem);\n }\n });\n\n return cssGridItem;\n };\n\n formatPrimaryLabelForUI() {\n const selectedTab = this.getSelectedTab();\n return selectedTab === SERVICE_NAME ? SERVICE_UI_LABEL : selectedTab;\n }\n\n private setVolumeQueryRunner() {\n this.setState({\n $data: getSceneQueryRunner({\n queries: [\n buildVolumeQuery(`{${VAR_PRIMARY_LABEL_EXPR}, ${VAR_LABELS_REPLICA_EXPR}}`, 'volume', this.getSelectedTab()),\n ],\n runQueriesMode: 'manual',\n }),\n });\n\n // Need to re-init any subscriptions since we changed the query runner\n this.subscribeToVolume();\n }\n\n private doVariablesNeedSync() {\n const labelsVarPrimary = getLabelsVariable(this);\n const labelsVarReplica = getLabelsVariableReplica(this);\n\n const activeTab = this.getSelectedTab();\n const filteredFilters = labelsVarPrimary.state.filters.filter((f) => f.key !== activeTab);\n\n return { filters: filteredFilters, needsSync: !areArraysEqual(filteredFilters, labelsVarReplica.state.filters) };\n }\n\n private syncVariables() {\n const labelsVarReplica = getLabelsVariableReplica(this);\n\n const { filters, needsSync } = this.doVariablesNeedSync();\n if (needsSync) {\n labelsVarReplica.setState({ filters });\n }\n }\n\n private onActivate() {\n this.fixRequiredUrlParams();\n\n // Sync initial state from primary labels to local replica\n this.syncVariables();\n\n // Clear existing volume data on activate or we'll show stale cached data, potentially from a different datasource\n this.setVolumeQueryRunner();\n\n // Subscribe to primary labels for further updates\n this.subscribeToPrimaryLabelsVariable();\n\n // Subscribe to variables replica\n this.subscribeToLabelFilterChanges();\n\n // Subscribe to tab changes (primary label)\n this.subscribeToActiveTabVariable(getServiceSelectionPrimaryLabel(this));\n\n if (this.state.$data.state.data?.state !== LoadingState.Done) {\n this.runVolumeOnActivate();\n }\n\n // Update labels on time range change\n this.subscribeToTimeRange();\n\n // Update labels on datasource change\n this.subscribeToDatasource();\n\n this.subscribeToAggregatedMetricToggle();\n\n this.subscribeToAggregatedMetricVariable();\n }\n\n private runVolumeOnActivate() {\n if (this.isTimeRangeTooEarlyForAggMetrics()) {\n this.onUnsupportedAggregatedMetricTimeRange();\n if (this.state.$data.state.data?.state !== LoadingState.Done) {\n this.runVolumeQuery();\n }\n } else {\n this.onSupportedAggregatedMetricTimeRange();\n if (this.state.$data.state.data?.state !== LoadingState.Done) {\n this.runVolumeQuery();\n }\n }\n }\n\n private subscribeToAggregatedMetricToggle() {\n this._subs.add(\n this.getQueryOptionsToolbar()?.subscribeToState((newState, prevState) => {\n if (newState.options.aggregatedMetrics.userOverride !== prevState.options.aggregatedMetrics.userOverride) {\n this.runVolumeQuery(true);\n }\n })\n );\n }\n\n private subscribeToDatasource() {\n this._subs.add(\n getDataSourceVariable(this).subscribeToState((newState) => {\n this.addDatasourceChangeToBrowserHistory(newState.value.toString());\n this.runVolumeQuery();\n })\n );\n }\n\n private subscribeToActiveTabVariable(primaryLabelVar: AdHocFiltersVariable) {\n this._subs.add(\n primaryLabelVar.subscribeToState((newState, prevState) => {\n if (newState.filterExpression !== prevState.filterExpression) {\n const newKey = newState.filters[0].key;\n this.addLabelChangeToBrowserHistory(newKey);\n // Need to tear down volume query runner to select other labels, as we need the selected tab to parse the volume response\n const { needsSync } = this.doVariablesNeedSync();\n\n if (needsSync) {\n this.syncVariables();\n } else {\n this.runVolumeQuery(true);\n }\n }\n })\n );\n }\n\n /**\n * agg metrics need parser and unwrap, have to tear down and rebuild panels when the variable changes\n * @private\n */\n private subscribeToAggregatedMetricVariable() {\n this._subs.add(\n getAggregatedMetricsVariable(this).subscribeToState((newState, prevState) => {\n if (newState.value !== prevState.value) {\n // Clear the body panels\n this.setState({\n body: new SceneCSSGridLayout({ children: [] }),\n });\n // And re-init with the new query\n this.updateBody(true);\n }\n })\n );\n }\n\n private subscribeToPrimaryLabelsVariable() {\n const labelsVarPrimary = getLabelsVariable(this);\n this._subs.add(\n labelsVarPrimary.subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.syncVariables();\n }\n })\n );\n }\n\n private subscribeToLabelFilterChanges() {\n const labelsVar = getLabelsVariableReplica(this);\n this._subs.add(\n labelsVar.subscribeToState((newState, prevState) => {\n if (!areArraysEqual(newState.filters, prevState.filters)) {\n this.runVolumeQuery(true);\n }\n })\n );\n }\n\n private subscribeToVolume() {\n this._subs.add(\n this.state.$data.subscribeToState((newState, prevState) => {\n // update body if the data is done loading, and the dataframes have changed\n if (\n newState.data?.state === LoadingState.Done &&\n !areArraysEqual(prevState?.data?.series, newState?.data?.series)\n ) {\n this.updateBody(true);\n }\n })\n );\n }\n\n private subscribeToTimeRange() {\n this._subs.add(\n sceneGraph.getTimeRange(this).subscribeToState(() => {\n if (this.isTimeRangeTooEarlyForAggMetrics()) {\n this.onUnsupportedAggregatedMetricTimeRange();\n } else {\n this.onSupportedAggregatedMetricTimeRange();\n }\n this.runVolumeQuery();\n })\n );\n }\n\n /**\n * If the user copies a partial URL we want to prevent throwing runtime errors or running invalid queries, so we set the default tab which will trigger updates to the primary_label\n * @private\n */\n private fixRequiredUrlParams() {\n // If the selected tab is not in the URL, set the default\n const { key } = getSelectedTabFromUrl();\n if (!key) {\n this.selectDefaultLabelTab();\n }\n }\n\n private isTimeRangeTooEarlyForAggMetrics(): boolean {\n const timeRange = sceneGraph.getTimeRange(this);\n return timeRange.state.value.from.isBefore(dateTime(AGGREGATED_METRIC_START_DATE));\n }\n\n private onUnsupportedAggregatedMetricTimeRange() {\n const toolbar = this.getQueryOptionsToolbar();\n toolbar?.setState({\n options: {\n aggregatedMetrics: {\n ...toolbar?.state.options.aggregatedMetrics,\n disabled: true,\n },\n },\n });\n }\n\n private getQueryOptionsToolbar() {\n const indexScene = sceneGraph.getAncestor(this, IndexScene);\n return indexScene.state.controls.find((control) => control instanceof ToolbarScene) as ToolbarScene | undefined;\n }\n\n private onSupportedAggregatedMetricTimeRange() {\n const toolbar = this.getQueryOptionsToolbar();\n toolbar?.setState({\n options: {\n aggregatedMetrics: {\n ...toolbar?.state.options.aggregatedMetrics,\n disabled: false,\n },\n },\n });\n }\n\n /**\n * Executes the Volume API call\n * @param resetQueryRunner - optional param which will replace the query runner state with a new instantiation\n * @private\n */\n private runVolumeQuery(resetQueryRunner = false) {\n if (resetQueryRunner) {\n this.setVolumeQueryRunner();\n }\n\n this.updateAggregatedMetricVariable();\n this.state.$data.runQueries();\n }\n\n private updateAggregatedMetricVariable() {\n const serviceLabelVar = getAggregatedMetricsVariable(this);\n const labelsVar = getLabelsVariable(this);\n if ((!this.isTimeRangeTooEarlyForAggMetrics() || !aggregatedMetricsEnabled) && this.isAggregatedMetricsActive()) {\n serviceLabelVar.changeValueTo(AGGREGATED_SERVICE_NAME);\n\n // Hide combobox and reset filters if aggregated metrics is enabled\n labelsVar.setState({\n hide: VariableHide.hideVariable,\n filters: [],\n });\n\n // Hide the show logs button\n const showLogsButton = sceneGraph.findByKeyAndType(this, showLogsButtonSceneKey, ShowLogsButtonScene);\n showLogsButton.setState({ hidden: true });\n } else {\n serviceLabelVar.changeValueTo(SERVICE_NAME);\n // Show combobox if not aggregated metrics\n labelsVar.setState({\n hide: VariableHide.dontHide,\n });\n serviceLabelVar.changeValueTo(SERVICE_NAME);\n\n // Show the show logs button\n const showLogsButton = sceneGraph.findByKeyAndType(this, showLogsButtonSceneKey, ShowLogsButtonScene);\n showLogsButton.setState({ hidden: false });\n }\n }\n\n private updateTabs() {\n if (!this.state.tabs) {\n const tabs = new ServiceSelectionTabsScene({});\n this.setState({\n tabs,\n });\n }\n }\n\n private getGridItems(): SceneCSSGridItem[] {\n return this.state.body.state.children as SceneCSSGridItem[];\n }\n\n private getVizPanel(child: SceneCSSGridItem) {\n return child.state.body instanceof VizPanel ? child.state.body : undefined;\n }\n\n /**\n * Runs logs/volume panel queries if lazy loaded grid item is active\n * @param child\n * @private\n */\n private runPanelQuery(child: SceneCSSGridItem) {\n if (child.isActive) {\n const queryRunners = getQueryRunnerFromChildren(child);\n if (queryRunners.length === 1) {\n const queryRunner = queryRunners[0];\n const query = queryRunner.state.queries[0];\n\n // If the scene was cached, the time range will still be the same as what was executed in the query\n const requestTimeRange = queryRunner.state.data?.timeRange;\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n const fromDiff = requestTimeRange\n ? Math.abs(sceneTimeRange.state.value.from.diff(requestTimeRange?.from, 's'))\n : Infinity;\n const toDiff = requestTimeRange\n ? Math.abs(sceneTimeRange.state.value.to.diff(requestTimeRange?.to, 's'))\n : Infinity;\n\n const interpolated = sceneGraph.interpolate(this, query.expr);\n // If we haven't already run this exact same query, run it\n if (queryRunner.state.key !== interpolated || fromDiff > 0 || toDiff > 0) {\n queryRunner.setState({\n key: interpolated,\n });\n queryRunner.runQueries();\n }\n }\n }\n }\n\n public updateBody(runQueries = false) {\n const { labelsToQuery } = this.getLabels(this.state.$data.state.data?.series);\n const selectedTab = this.getSelectedTab();\n this.updateTabs();\n\n if (!this.state.paginationScene) {\n this.setState({\n paginationScene: new ServiceSelectionPaginationScene({}),\n });\n }\n\n // If no services are to be queried, clear the body\n if (!labelsToQuery || labelsToQuery.length === 0) {\n this.state.body.setState({ children: [] });\n } else {\n // If we have services to query, build the layout with the services. Children is an array of layouts for each service (1 row with 2 columns - timeseries and logs panel)\n const newChildren: SceneCSSGridItem[] = [];\n const existingChildren = this.getGridItems();\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const aggregatedMetricsVariable = getAggregatedMetricsVariable(this);\n const primaryLabelVar = getServiceSelectionPrimaryLabel(this);\n const datasourceVariable = getDataSourceVariable(this);\n\n const start = (this.state.currentPage - 1) * this.state.countPerPage;\n const end = start + this.state.countPerPage;\n\n for (const primaryLabelValue of labelsToQuery.slice(start, end)) {\n const existing = existingChildren.filter((child) => {\n const vizPanel = this.getVizPanel(child);\n return vizPanel?.state.title === primaryLabelValue;\n });\n\n if (existing.length === 2) {\n // If we already have grid items for this service, move them over to the new array of children, this will preserve their queryRunners, preventing duplicate queries from getting run\n newChildren.push(existing[0], existing[1]);\n\n if (existing[0].isActive && runQueries) {\n this.runPanelQuery(existing[0]);\n }\n\n if (existing[1].isActive && runQueries) {\n this.runPanelQuery(existing[1]);\n }\n } else {\n const newChildTs = this.buildServiceLayout(\n selectedTab,\n primaryLabelValue,\n timeRange,\n aggregatedMetricsVariable,\n primaryLabelVar,\n datasourceVariable\n );\n const newChildLogs = this.buildServiceLogsLayout(selectedTab, primaryLabelValue);\n // for each service, we create a layout with timeseries and logs panel\n newChildren.push(newChildTs, newChildLogs);\n }\n }\n\n this.state.body.setState({\n children: newChildren,\n isLazy: true,\n templateColumns: 'repeat(auto-fit, minmax(350px, 1fr) minmax(300px, calc(70vw - 100px)))',\n autoRows: '200px',\n md: {\n templateColumns: '1fr',\n rowGap: 1,\n columnGap: 1,\n },\n });\n }\n }\n\n /**\n * Redraws service logs after toggling level visibility.\n */\n private updateServiceLogs(labelName: string, labelValue: string) {\n if (!this.state.body) {\n this.updateBody();\n return;\n }\n const { labelsToQuery } = this.getLabels(this.state.$data.state.data?.series);\n const serviceIndex = labelsToQuery?.indexOf(labelValue);\n if (serviceIndex === undefined || serviceIndex < 0) {\n return;\n }\n let newChildren = [...this.getGridItems()];\n newChildren.splice(serviceIndex * 2 + 1, 1, this.buildServiceLogsLayout(labelName, labelValue));\n this.state.body.setState({ children: newChildren });\n }\n\n private getLogExpression(labelName: string, labelValue: string, levelFilter: string) {\n return `{${labelName}=\\`${labelValue}\\` , ${VAR_LABELS_REPLICA_EXPR} }${levelFilter}`;\n }\n\n private getMetricExpression(\n labelValue: string,\n serviceLabelVar: CustomConstantVariable,\n primaryLabelVar: AdHocFiltersVariable\n ) {\n const filter = primaryLabelVar.state.filters[0];\n if (serviceLabelVar.state.value === AGGREGATED_SERVICE_NAME) {\n if (filter.key === SERVICE_NAME) {\n return `sum by (${LEVEL_VARIABLE_VALUE}) (sum_over_time({${AGGREGATED_SERVICE_NAME}=\\`${labelValue}\\` } | logfmt | unwrap count [$__auto]))`;\n } else {\n return `sum by (${LEVEL_VARIABLE_VALUE}) (sum_over_time({${AGGREGATED_SERVICE_NAME}=~\\`.+\\` } | logfmt | ${filter.key}=\\`${labelValue}\\` | unwrap count [$__auto]))`;\n }\n }\n return `sum by (${LEVEL_VARIABLE_VALUE}) (count_over_time({ ${filter.key}=\\`${labelValue}\\`, ${VAR_LABELS_REPLICA_EXPR} } [$__auto]))`;\n }\n\n private extendTimeSeriesLegendBus = (\n labelName: string,\n labelValue: string,\n context: PanelContext,\n panel: VizPanel\n ) => {\n const originalOnToggleSeriesVisibility = context.onToggleSeriesVisibility;\n\n context.onToggleSeriesVisibility = (level: string, mode: SeriesVisibilityChangeMode) => {\n originalOnToggleSeriesVisibility?.(level, mode);\n\n const allLevels = getLevelLabelsFromSeries(panel.state.$data?.state.data?.series ?? []);\n const levels = toggleLevelVisibility(level, this.state.serviceLevel.get(labelValue), mode, allLevels);\n this.state.serviceLevel.set(labelValue, levels);\n\n this.updateServiceLogs(labelName, labelValue);\n };\n };\n\n private getLabels(series?: DataFrame[]) {\n const labelsByVolume: string[] = series?.[0]?.fields[0].values ?? [];\n const dsString = getDataSourceVariable(this).getValue()?.toString();\n const searchString = getServiceSelectionSearchVariable(this).getValue();\n const selectedTab = this.getSelectedTab();\n const labelsToQuery = createListOfLabelsToQuery(labelsByVolume, dsString, String(searchString), selectedTab);\n return { labelsByVolume, labelsToQuery: labelsToQuery };\n }\n}\n\n// Create a list of services to query:\n// 1. Filters provided services by searchString\n// 2. Gets favoriteServicesToQuery from localStorage and filters them by searchString\n// 3. Orders them correctly\nfunction createListOfLabelsToQuery(services: string[], ds: string, searchString: string, labelName: string) {\n if (!services?.length) {\n return [];\n }\n\n if (searchString === '.+') {\n searchString = '';\n }\n\n const favoriteServicesToQuery = getFavoriteLabelValuesFromStorage(ds, labelName).filter(\n (service) => service.toLowerCase().includes(searchString.toLowerCase()) && services.includes(service)\n );\n\n // Deduplicate\n return Array.from(new Set([...favoriteServicesToQuery, ...services]));\n}\n\nfunction getSelectedTabFromUrl() {\n const location = locationService.getLocation();\n const search = new URLSearchParams(location.search);\n const primaryLabelRaw = search.get(primaryLabelUrlKey);\n const primaryLabelSplit = primaryLabelRaw?.split('|');\n const key = primaryLabelSplit?.[0];\n return { key, search, location };\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n position: 'relative',\n }),\n headingWrapper: css({\n marginTop: theme.spacing(1),\n }),\n loadingText: css({\n margin: 0,\n }),\n header: css({\n position: 'absolute',\n right: 0,\n top: '4px',\n zIndex: 2,\n }),\n bodyWrapper: css({\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n }),\n body: css({\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n }),\n searchPaginationWrap: css({\n label: 'search-pagination-wrap',\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n flex: '1 0 auto',\n [theme.breakpoints.down('md')]: {\n marginTop: theme.spacing(1),\n width: '100%',\n },\n }),\n searchWrapper: css({\n label: 'search-wrapper',\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n [theme.breakpoints.down('md')]: {\n flexDirection: 'column',\n alignItems: 'flex-start',\n },\n }),\n searchField: css({\n marginTop: theme.spacing(1),\n position: 'relative',\n }),\n };\n}\n","import React from 'react';\nimport { RadioButtonGroup } from '@grafana/ui';\nimport { LogsVisualizationType } from 'services/store';\n\n/**\n * The options shared between logs and table panels\n * @param props\n * @constructor\n */\nexport function LogsPanelHeaderActions(props: {\n vizType: LogsVisualizationType;\n onChange: (type: LogsVisualizationType) => void;\n}) {\n return (\n \n );\n}\n","import { Observable, of } from 'rxjs';\nimport {\n MultiValueVariable,\n MultiValueVariableState,\n MultiOrSingleValueSelect,\n SceneComponentProps,\n VariableGetOptionsArgs,\n VariableValueOption,\n VariableValueSingle,\n} from '@grafana/scenes';\n\nexport interface CustomConstantVariableState extends MultiValueVariableState {\n value: VariableValueSingle;\n isMulti?: false;\n}\n\nexport class CustomConstantVariable extends MultiValueVariable {\n public constructor(initialState: Partial) {\n super({\n type: 'custom',\n value: '',\n text: '',\n options: [],\n name: '',\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable {\n return of(this.state.options);\n }\n public static Component = ({ model }: SceneComponentProps) => {\n return MultiOrSingleValueSelect({ model });\n };\n}\n","import { AdHocFilterWithLabels, sceneUtils } from '@grafana/scenes';\nimport { AdHocVariableFilter } from '@grafana/data';\nimport { FilterOp, FilterOpType, LabelFilterOp, NumericFilterOp } from './filterTypes';\nimport { Dictionary, groupBy, trim } from 'lodash';\nimport { EMPTY_VARIABLE_VALUE, isAdHocFilterValueUserInput, stripAdHocFilterUserInputPrefix } from './variables';\nimport { getValueFromFieldsFilter } from './variableGetters';\nimport { isOperatorExclusive, isOperatorInclusive, isOperatorNumeric, isOperatorRegex } from './operatorHelpers';\nimport { narrowFilterOperator } from './narrowing';\nimport { getExpressionBuilderDebug } from './store';\n\ntype Key = string;\ntype Value = string;\ntype CombinedFiltersValues = { operator: LabelFilterOp | NumericFilterOp; values: Value[] };\ntype CombinedFiltersValuesByKey = Record;\ntype CombinedOperatorFilters = Record;\ntype OperatorFilters = Record;\n\ninterface Options {\n /**\n * Sets debug output\n */\n debug?: boolean;\n\n /**\n * Separator between filters with different keys or operators\n */\n filterSeparator?: string;\n\n /**\n * Prefix of the logQL expression\n */\n prefix?: string;\n\n /**\n * Sets if match filters join values together in a regex filter\n * i.e. multiple filters with operators: '=' | '!=' => '=~' | '!~'\n */\n joinMatchFilters: boolean;\n\n /**\n * Sets if the values are JSON encoded\n */\n decodeFilters: boolean;\n\n /**\n * Keys to ignore\n */\n ignoreKeys?: string[];\n\n filterType: 'indexed' | 'field';\n}\n\nexport class ExpressionBuilder {\n private filters: AdHocFilterWithLabels[];\n private options: Options;\n private positiveFilterValueSeparator = 'or';\n private negativeFilterValueSeparator = '|';\n\n constructor(\n filters: AdHocFilterWithLabels[],\n options: Options = { joinMatchFilters: true, decodeFilters: false, filterType: 'field' }\n ) {\n this.filters = filters;\n this.options = options;\n if (!this.options.debug) {\n this.options.debug = getExpressionBuilderDebug();\n }\n }\n\n /**\n * Joins filters with same keys similar operators\n * e.g. {level=\"info\"}, {level=\"warn\"} => {level=~\"warn|info\"}\n */\n public getJoinedLabelsFilters(): AdHocFilterWithLabels[] {\n let { equalsFilters, notEqualsFilters, regexEqualFilters, regexNotEqualFilters } = this.getCombinedLabelFilters();\n const adHocFilters: AdHocFilterWithLabels[] = [];\n const filters = [equalsFilters, notEqualsFilters, regexEqualFilters, regexNotEqualFilters].filter(\n (filter) => filter\n );\n filters.forEach((operatorFilters) => {\n const joinedValues = this.joinCombinedFiltersValues(operatorFilters, '|');\n\n for (const key in operatorFilters) {\n const filter = operatorFilters[key];\n const operator = filter.operator;\n adHocFilters.push({ key, operator, value: joinedValues[key] });\n }\n });\n\n return adHocFilters;\n }\n\n /**\n * Returns logQL expression for AdHocFilterWithLabels[]\n * Merges multiple include matches into regex\n */\n protected getExpr(): string {\n let {\n equalsFilters,\n notEqualsFilters,\n regexEqualFilters,\n regexNotEqualFilters,\n ltFilters,\n lteFilters,\n gtFilters,\n gteFilters,\n } = this.getCombinedLabelFilters();\n\n if (this.options.debug) {\n console.info('combined filters after merge', {\n equalsFilters,\n notEqualsFilters,\n regexEqualFilters,\n regexNotEqualFilters,\n ltFilters,\n lteFilters,\n gtFilters,\n gteFilters,\n });\n }\n\n const filtersString = this.buildLabelsLogQLFromFilters({\n equalsFilters,\n notEqualsFilters,\n regexEqualFilters,\n regexNotEqualFilters,\n ltFilters,\n lteFilters,\n gtFilters,\n gteFilters,\n });\n\n if (filtersString) {\n // Append prefix if defined\n return (this.options.prefix ?? '') + filtersString;\n }\n\n return '';\n }\n\n public getLabelsExpr(options?: Partial): string {\n const defaultOptions: Options = { joinMatchFilters: true, decodeFilters: false, filterType: 'indexed' };\n this.options = { ...defaultOptions, ...options };\n return this.getExpr();\n }\n\n /**\n * Returns merged filters separated by pipe\n */\n public getMetadataExpr(options?: Partial): string {\n const defaultOptions: Options = {\n filterSeparator: ' |',\n prefix: '| ',\n joinMatchFilters: false,\n decodeFilters: false,\n filterType: 'field',\n };\n this.options = { ...defaultOptions, ...options };\n return this.getExpr();\n }\n\n /**\n * Same as metadata, but only include operators supported\n */\n public getLevelsExpr(options?: Partial): string {\n const defaultOptions: Options = {\n filterSeparator: ' |',\n prefix: '| ',\n joinMatchFilters: false,\n decodeFilters: false,\n filterType: 'field',\n };\n\n this.options = { ...defaultOptions, ...options };\n return this.getExpr();\n }\n\n /**\n * Returns merged filters separated by pipe\n * JSON encodes value\n */\n public getFieldsExpr(options?: Partial): string {\n const defaultOptions: Options = {\n filterSeparator: ' |',\n prefix: '| ',\n joinMatchFilters: false,\n decodeFilters: true,\n filterType: 'field',\n };\n this.options = { ...defaultOptions, ...options };\n return this.getExpr();\n }\n\n /**\n * Transforms joined field value objects into logQL strings\n */\n private buildLabelsLogQLFromFilters({\n equalsFilters,\n notEqualsFilters,\n regexEqualFilters,\n regexNotEqualFilters,\n ltFilters,\n lteFilters,\n gtFilters,\n gteFilters,\n }: {\n equalsFilters: CombinedFiltersValuesByKey | undefined;\n notEqualsFilters: CombinedFiltersValuesByKey | undefined;\n regexEqualFilters: CombinedFiltersValuesByKey | undefined;\n regexNotEqualFilters: CombinedFiltersValuesByKey | undefined;\n ltFilters: CombinedFiltersValuesByKey | undefined;\n lteFilters: CombinedFiltersValuesByKey | undefined;\n gtFilters: CombinedFiltersValuesByKey | undefined;\n gteFilters: CombinedFiltersValuesByKey | undefined;\n }) {\n let equalFiltersStrings: CombinedOperatorFilters | OperatorFilters;\n let notEqualsFiltersStrings: CombinedOperatorFilters | OperatorFilters;\n let regexEqualFiltersStrings: CombinedOperatorFilters | OperatorFilters;\n let regexNotEqualFiltersStrings: CombinedOperatorFilters | OperatorFilters;\n let ltFiltersStrings: OperatorFilters;\n let lteFiltersStrings: OperatorFilters;\n let gtFiltersStrings: OperatorFilters;\n let gteFiltersStrings: OperatorFilters;\n\n // Build the LogQL filters\n const allFilters: string[] = [];\n\n if (this.options.joinMatchFilters) {\n // Join values arrays for all keys with \"|\" char\n equalFiltersStrings = this.joinCombinedFiltersValues(equalsFilters, '|');\n notEqualsFiltersStrings = this.joinCombinedFiltersValues(notEqualsFilters, '|');\n regexEqualFiltersStrings = this.joinCombinedFiltersValues(regexEqualFilters, '|');\n regexNotEqualFiltersStrings = this.joinCombinedFiltersValues(regexNotEqualFilters, '|');\n\n allFilters.push(...this.buildJoinedFilters(equalFiltersStrings, LabelFilterOp.Equal));\n allFilters.push(...this.buildJoinedFilters(notEqualsFiltersStrings, LabelFilterOp.NotEqual));\n allFilters.push(...this.buildJoinedFilters(regexEqualFiltersStrings, LabelFilterOp.RegexEqual));\n allFilters.push(...this.buildJoinedFilters(regexNotEqualFiltersStrings, LabelFilterOp.RegexNotEqual));\n } else {\n // Do not join filters\n equalFiltersStrings = this.getFilterValues(equalsFilters);\n notEqualsFiltersStrings = this.getFilterValues(notEqualsFilters);\n regexEqualFiltersStrings = this.getFilterValues(regexEqualFilters);\n regexNotEqualFiltersStrings = this.getFilterValues(regexNotEqualFilters);\n\n allFilters.push(...this.buildFilter(equalFiltersStrings, LabelFilterOp.Equal));\n allFilters.push(...this.buildFilter(notEqualsFiltersStrings, LabelFilterOp.NotEqual));\n allFilters.push(...this.buildFilter(regexEqualFiltersStrings, LabelFilterOp.RegexEqual));\n allFilters.push(...this.buildFilter(regexNotEqualFiltersStrings, LabelFilterOp.RegexNotEqual));\n }\n\n // //Numeric fields are never joined\n ltFiltersStrings = this.getFilterValues(ltFilters);\n lteFiltersStrings = this.getFilterValues(lteFilters);\n gtFiltersStrings = this.getFilterValues(gtFilters);\n gteFiltersStrings = this.getFilterValues(gteFilters);\n\n allFilters.push(...this.buildFilter(ltFiltersStrings, NumericFilterOp.lt));\n allFilters.push(...this.buildFilter(lteFiltersStrings, NumericFilterOp.lte));\n allFilters.push(...this.buildFilter(gtFiltersStrings, NumericFilterOp.gt));\n allFilters.push(...this.buildFilter(gteFiltersStrings, NumericFilterOp.gte));\n\n if (this.options.debug) {\n console.info('combined filters after stringify', {\n equalFiltersStrings,\n notEqualsFiltersStrings,\n regexEqualFiltersStrings,\n regexNotEqualFiltersStrings,\n ltFiltersStrings,\n lteFiltersStrings,\n gtFiltersStrings,\n gteFiltersStrings,\n allFilters,\n });\n }\n\n // Create the final output string by joining filters with filterSeparator char\n const allFiltersString = trim(this.combineValues(allFilters, `${this.options.filterSeparator ?? ','} `));\n\n if (this.options.debug) {\n console.info('DEBUG labels expr', { allFiltersString });\n }\n\n return allFiltersString;\n }\n\n /**\n * Group filter values by key\n */\n private getCombinedLabelFilters() {\n // Group filters by operator and key\n const {\n [LabelFilterOp.Equal]: equal,\n [LabelFilterOp.NotEqual]: notEqual,\n [LabelFilterOp.RegexEqual]: regexEqual,\n [LabelFilterOp.RegexNotEqual]: regexNotEqual,\n [NumericFilterOp.lt]: lt,\n [NumericFilterOp.lte]: lte,\n [NumericFilterOp.gt]: gt,\n [NumericFilterOp.gte]: gte,\n } = this.groupFiltersByKey(this.filters);\n\n let equalsFilters: CombinedFiltersValuesByKey | undefined;\n let notEqualsFilters: CombinedFiltersValuesByKey | undefined;\n let regexEqualFilters: CombinedFiltersValuesByKey | undefined;\n let regexNotEqualFilters: CombinedFiltersValuesByKey | undefined;\n\n let ltFilters: CombinedFiltersValuesByKey | undefined;\n let lteFilters: CombinedFiltersValuesByKey | undefined;\n let gtFilters: CombinedFiltersValuesByKey | undefined;\n let gteFilters: CombinedFiltersValuesByKey | undefined;\n\n // Escape values and combine filters by key and operator, multiple non-regex operations are returned under a different operator\n if (this.options.joinMatchFilters) {\n equalsFilters = this.combineFiltersValues(equal, LabelFilterOp.RegexEqual);\n notEqualsFilters = this.combineFiltersValues(notEqual, LabelFilterOp.RegexNotEqual);\n regexEqualFilters = this.combineFiltersValues(regexEqual);\n regexNotEqualFilters = this.combineFiltersValues(regexNotEqual);\n } else {\n equalsFilters = this.combineFiltersValues(equal);\n notEqualsFilters = this.combineFiltersValues(notEqual);\n regexEqualFilters = this.combineFiltersValues(regexEqual);\n regexNotEqualFilters = this.combineFiltersValues(regexNotEqual);\n }\n\n // Numeric filters are never combined\n ltFilters = this.combineFiltersValues(lt);\n lteFilters = this.combineFiltersValues(lte);\n gtFilters = this.combineFiltersValues(gt);\n gteFilters = this.combineFiltersValues(gte);\n\n if (this.options.debug) {\n console.info('combined filters', {\n equalsFilters,\n notEqualsFilters,\n regexEqualFilters,\n regexNotEqualFilters,\n });\n }\n\n if (this.options.joinMatchFilters) {\n // If we changed the operation, merge the values and remove the stale operator from the object\n if (equalsFilters) {\n regexEqualFilters = this.mergeFilters(LabelFilterOp.RegexEqual, equalsFilters, regexEqualFilters);\n equalsFilters = this.removeStaleOperators(equalsFilters, LabelFilterOp.Equal);\n }\n if (notEqualsFilters) {\n regexNotEqualFilters = this.mergeFilters(LabelFilterOp.RegexNotEqual, notEqualsFilters, regexNotEqualFilters);\n notEqualsFilters = this.removeStaleOperators(notEqualsFilters, LabelFilterOp.NotEqual);\n }\n }\n\n return {\n equalsFilters,\n notEqualsFilters,\n regexEqualFilters,\n regexNotEqualFilters,\n ltFilters,\n lteFilters,\n gtFilters,\n gteFilters,\n };\n }\n\n /**\n * Transforms values grouped by key to logQL filter strings\n */\n private buildFilter(filters: OperatorFilters, operator: LabelFilterOp | NumericFilterOp): string[] {\n const filterStrings: string[] = [];\n\n for (const key in filters) {\n const filtersWithSameOperatorsAndKeys: string[] = [];\n const values = filters[key];\n if (isOperatorNumeric(operator)) {\n values.forEach((value) =>\n filtersWithSameOperatorsAndKeys.push(this.buildFilterString(key, operator, value, ''))\n );\n } else {\n values.forEach((value) => filtersWithSameOperatorsAndKeys.push(this.buildFilterString(key, operator, value)));\n }\n\n if (isOperatorInclusive(operator)) {\n filterStrings.push(filtersWithSameOperatorsAndKeys.join(` ${this.positiveFilterValueSeparator} `));\n } else {\n filterStrings.push(filtersWithSameOperatorsAndKeys.join(` ${this.negativeFilterValueSeparator} `));\n }\n }\n\n return filterStrings;\n }\n\n /**\n * Transforms escaped & concatenated values into strings grouped by key to logQL filter strings\n */\n private buildJoinedFilters(equalFiltersStrings: CombinedOperatorFilters, operator: LabelFilterOp) {\n const filterStrings = [];\n for (const key in equalFiltersStrings) {\n filterStrings.push(this.buildFilterString(key, operator, equalFiltersStrings[key]));\n }\n return filterStrings;\n }\n\n /**\n * Cleans up CombinedFiltersValuesByKey if the operator was transformed\n */\n private removeStaleOperators(filters: CombinedFiltersValuesByKey, expectedOperator: LabelFilterOp) {\n const result: CombinedFiltersValuesByKey = {};\n Object.keys(filters).forEach((key) => {\n if (filters[key].operator === expectedOperator) {\n result[key] = filters[key];\n }\n });\n return result;\n }\n\n /**\n * Merges filters grouped by key from one operator group to another\n */\n private mergeFilters(\n operatorTo: LabelFilterOp,\n filtersFrom: CombinedFiltersValuesByKey,\n filtersTo: CombinedFiltersValuesByKey | undefined\n ) {\n const convertedEqualsFilters = Object.keys(filtersFrom)\n .filter((key) => filtersFrom[key].operator === operatorTo)\n .map((key) => ({ values: filtersFrom[key].values, key }));\n\n convertedEqualsFilters.forEach((valuesToMove) => {\n if (filtersTo === undefined) {\n filtersTo = { [valuesToMove.key]: { values: [], operator: operatorTo } };\n }\n if (filtersTo[valuesToMove.key] === undefined) {\n filtersTo[valuesToMove.key] = { values: [], operator: operatorTo };\n }\n filtersTo[valuesToMove.key].values.push(\n ...this.mergeCombinedFiltersValues(filtersFrom[valuesToMove.key], operatorTo)\n );\n });\n return filtersTo;\n }\n\n /**\n * Merges values for a single filter key\n */\n private mergeCombinedFiltersValues(filtersFrom: CombinedFiltersValues, operatorTo: LabelFilterOp) {\n const values: string[] = [];\n if (filtersFrom.operator === operatorTo && filtersFrom.values?.length) {\n values.push(...filtersFrom.values);\n }\n return values;\n }\n\n /**\n * Iterates through all keys in an operator group and combines values with separator\n */\n private joinCombinedFiltersValues(\n filters: CombinedFiltersValuesByKey | undefined,\n separator: string\n ): CombinedOperatorFilters {\n const filterCombinedValues: CombinedOperatorFilters = {};\n for (const key in filters) {\n if (!filters[key].values.length) {\n continue;\n }\n\n filterCombinedValues[key] = this.combineValues(filters[key].values, separator);\n }\n\n return filterCombinedValues;\n }\n\n /**\n * Iterates through key groups and transforms filter values to key => values object\n */\n private getFilterValues(filters: CombinedFiltersValuesByKey | undefined): OperatorFilters {\n const filterValues: OperatorFilters = {};\n for (const key in filters) {\n if (!filters[key].values.length) {\n continue;\n }\n\n filterValues[key] = filters[key].values;\n }\n\n return filterValues;\n }\n\n /**\n * Combines an array of values by separator\n * Completely unnecessary wrapper of join\n */\n private combineValues(values: string[], separator: string) {\n return values.join(`${separator}`);\n }\n\n /**\n * Combines and escapes values with the same operator, note assumes every filter has the same operator\n * If multipleValuesOperator is set, multiple values will be combined into a single filter to use that operator in the output\n * @param filtersByKey\n * @param multipleValuesOperator\n * @private\n */\n private combineFiltersValues(\n filtersByKey: Dictionary,\n multipleValuesOperator?: LabelFilterOp\n ): CombinedFiltersValuesByKey | undefined {\n let updatedOperatorAndEscapedValues: CombinedFiltersValuesByKey = {};\n\n for (const key in filtersByKey) {\n if (!filtersByKey[key].length) {\n continue;\n }\n\n const currentOperator = narrowFilterOperator(filtersByKey[key][0].operator);\n const updatedOperator = multipleValuesOperator ?? currentOperator;\n const firstFilter = filtersByKey[key][0];\n\n updatedOperatorAndEscapedValues[key] = { values: [], operator: updatedOperator };\n\n // Only one value for this key\n if (filtersByKey[key].length === 1) {\n const filterString = this.escapeFieldValue(\n firstFilter.operator,\n firstFilter.value,\n firstFilter.valueLabels ?? []\n );\n updatedOperatorAndEscapedValues[key] = { operator: currentOperator, values: [filterString] };\n\n if (this.options.debug) {\n console.info('single value filter', { filter: firstFilter, filterString });\n }\n } else {\n const values = this.escapeFieldValues(key, filtersByKey, updatedOperator);\n if (updatedOperatorAndEscapedValues[key].operator === undefined) {\n updatedOperatorAndEscapedValues[key] = { operator: updatedOperator, values };\n } else {\n updatedOperatorAndEscapedValues[key].values?.push(...values);\n }\n }\n }\n\n return updatedOperatorAndEscapedValues;\n }\n\n /**\n * Iterates through all keys in a merged operator group and escapes the values\n */\n private escapeFieldValues(\n key: string,\n filtersByKey: Dictionary,\n updatedOperator: LabelFilterOp | NumericFilterOp\n ) {\n // Convert single operator to regex\n return filtersByKey[key].map((filter) =>\n this.escapeFieldValue(updatedOperator, filter.value, filter.valueLabels ?? [])\n );\n }\n\n /**\n * Escape field values:\n * If value is encoded, decode it\n * If value is empty, don't escape double quotes\n * If value is custom user input, strip prefix and don't escape special regex chars\n */\n private escapeFieldValue(operator: LabelFilterOp | string, value: string, valueLabels: string[]): string {\n const isUserInput = isAdHocFilterValueUserInput(value);\n\n // decode value\n if (this.options.decodeFilters) {\n const fieldObject = getValueFromFieldsFilter({ value, valueLabels });\n value = fieldObject.value;\n }\n\n if (value === EMPTY_VARIABLE_VALUE) {\n if (this.options.debug) {\n console.info('empty variable value, do not escape');\n }\n // Don't encode empty value\n return value;\n }\n\n if (isUserInput) {\n if (this.options.debug) {\n console.info('ESCAPE: user input - exact selector', {\n operator,\n value,\n result: sceneUtils.escapeLabelValueInExactSelector(stripAdHocFilterUserInputPrefix(value)),\n });\n }\n return sceneUtils.escapeLabelValueInExactSelector(stripAdHocFilterUserInputPrefix(value));\n }\n if (isOperatorRegex(operator)) {\n if (this.options.debug) {\n console.info('ESCAPE: regex selector', { operator, value });\n }\n return sceneUtils.escapeLabelValueInRegexSelector(value);\n }\n\n if (this.options.debug) {\n console.info('ESCAPE: exact selector', { operator, value });\n }\n\n return sceneUtils.escapeLabelValueInExactSelector(value);\n }\n\n /**\n * Builds logQL filter string.\n * Expects pre-escaped content\n * @private\n */\n private buildFilterString(key: string, operator: LabelFilterOp | string, rawValue: string, quoteChar = '\"') {\n if (rawValue === EMPTY_VARIABLE_VALUE) {\n return `${key}${operator}${rawValue}`;\n }\n\n const filterString = `${key}${operator}${quoteChar}${rawValue}${quoteChar}`;\n if (this.options.debug) {\n console.info('buildDoubleQuotedFilter', { filter: { key, operator, value: rawValue }, filterString });\n }\n\n return filterString;\n }\n\n /**\n * Groups all filters by operator and key\n */\n private groupFiltersByKey(filters: AdHocVariableFilter[]): Record> {\n let filteredFilters: AdHocVariableFilter[] = filters.filter(\n (f) => !this.options.ignoreKeys?.includes(f.key) || isOperatorRegex(f.operator)\n );\n\n // We need at least one inclusive filter\n if (this.options.filterType === 'indexed') {\n if (filteredFilters.length < 1) {\n filteredFilters = filters;\n }\n }\n\n const positiveMatch = filteredFilters.filter(\n (filter) => isOperatorInclusive(filter.operator) && !isOperatorRegex(filter.operator)\n );\n const positiveRegex = filteredFilters.filter(\n (filter) => isOperatorInclusive(filter.operator) && isOperatorRegex(filter.operator)\n );\n const negativeMatch = filteredFilters.filter(\n (filter) => isOperatorExclusive(filter.operator) && !isOperatorRegex(filter.operator)\n );\n const negativeRegex = filteredFilters.filter(\n (filter) => isOperatorExclusive(filter.operator) && isOperatorRegex(filter.operator)\n );\n const gt = filteredFilters.filter((filter) => filter.operator === FilterOp.gt);\n const gte = filteredFilters.filter((filter) => filter.operator === FilterOp.gte);\n const lt = filteredFilters.filter((filter) => filter.operator === FilterOp.lt);\n const lte = filteredFilters.filter((filter) => filter.operator === FilterOp.lte);\n\n // Field ops\n const positiveMatchGroup = groupBy(positiveMatch, (filter) => filter.key);\n const positiveRegexGroup = groupBy(positiveRegex, (filter) => filter.key);\n const negativeMatchGroup = groupBy(negativeMatch, (filter) => filter.key);\n const negativeRegexGroup = groupBy(negativeRegex, (filter) => filter.key);\n\n // Duration ops\n const gtGroup = groupBy(gt, (filter) => filter.key);\n const gteGroup = groupBy(gte, (filter) => filter.key);\n const ltGroup = groupBy(lt, (filter) => filter.key);\n const lteGroup = groupBy(lte, (filter) => filter.key);\n\n return {\n [FilterOp.Equal]: positiveMatchGroup,\n [FilterOp.RegexEqual]: positiveRegexGroup,\n [FilterOp.NotEqual]: negativeMatchGroup,\n [FilterOp.RegexNotEqual]: negativeRegexGroup,\n [FilterOp.gt]: gtGroup,\n [FilterOp.gte]: gteGroup,\n [FilterOp.lt]: ltGroup,\n [FilterOp.lte]: lteGroup,\n };\n }\n}\n","import { reportInteraction } from '@grafana/runtime';\nimport pluginJson from '../plugin.json';\n\n// Helper function to create a unique interaction name for analytics\nconst createInteractionName = (page: UserEventPagesType, action: string) => {\n return `${pluginJson.id.replace(/-/g, '_')}_${page}_${action}`;\n};\n\n// Runs reportInteraction with a standardized interaction name\nexport const reportAppInteraction = (\n page: UserEventPagesType,\n action: UserEventActionType,\n properties?: Record\n) => {\n reportInteraction(createInteractionName(page, action), properties);\n};\n\nexport const USER_EVENTS_PAGES = {\n service_selection: 'service_selection',\n service_details: 'service_details',\n all: 'all',\n} as const;\n\ntype UserEventPagesType = keyof typeof USER_EVENTS_PAGES;\ntype UserEventActionType =\n | keyof (typeof USER_EVENTS_ACTIONS)['service_selection']\n | keyof (typeof USER_EVENTS_ACTIONS)['service_details']\n | keyof (typeof USER_EVENTS_ACTIONS)['all'];\n\nexport const USER_EVENTS_ACTIONS = {\n [USER_EVENTS_PAGES.service_selection]: {\n // Searching for service using search input. Props: searchQueryLength, containsLevel\n search_services_changed: 'search_services_changed',\n // Selecting service. Props: service\n service_selected: 'service_selected',\n // Toggling aggregated metrics on/off\n aggregated_metrics_toggled: 'aggregated_metrics_toggled',\n add_to_filters: 'add_to_filters',\n },\n [USER_EVENTS_PAGES.service_details]: {\n open_in_explore_clicked: 'open_in_explore_clicked',\n // Selecting action view tab (logs/labels/fields/patterns). Props: newActionView, previousActionView\n action_view_changed: 'action_view_changed',\n // Clicking on \"Include\" button in time series panels. Used in multiple views. The view type is passed as a parameter. Props: filterType, key, isFilterDuplicate, filtersLength\n add_to_filters_in_breakdown_clicked: 'add_to_filters_in_breakdown_clicked',\n // Clicking on \"Select\" button button in time series panels. Used in multiple views.The view type is passed as a parameter. Props: field, previousField, view\n select_field_in_breakdown_clicked: 'select_field_in_breakdown_clicked',\n // Clicking on one of the levels in the Logs Volume panel\n level_in_logs_volume_clicked: 'level_in_logs_volume_clicked',\n label_in_panel_summary_clicked: 'label_in_panel_summary_clicked',\n // Changing layout type (e.g. single/grid/rows). Used in multiple views. The view type is passed as a parameter. Props: layout, view\n layout_type_changed: 'layout_type_changed',\n // Changing search string in logs. Props: searchQuery\n search_string_in_logs_changed: 'search_string_in_logs_changed',\n search_string_in_variables_changed: 'search_string_in_variables_changed',\n // Removing a pattern (e.g. include/exclude) from the list. Props: includePatternsLength, excludePatternsLength, type\n pattern_removed: 'pattern_removed',\n // Selecting a pattern (e.g. include/exclude) from the list. Props: includePatternsLength, excludePatternsLength, type\n pattern_selected: 'pattern_selected',\n // Clicking on a pattern field in the pattern name.\n pattern_field_clicked: 'pattern_field_clicked',\n // Toggling between logs/table view\n logs_visualization_toggle: 'logs_visualization_toggle',\n // Filter (include, exclude) from log details\n logs_detail_filter_applied: 'logs_detail_filter_applied',\n // Popover menu filter\n logs_popover_line_filter: 'logs_popover_line_filter',\n // Toggle displayed fields\n logs_toggle_displayed_field: 'logs_toggle_displayed_field',\n // Clear all displayed fields\n logs_clear_displayed_fields: 'logs_clear_displayed_fields',\n // Value breakdown sort change\n value_breakdown_sort_change: 'value_breakdown_sort_change',\n // Wasm not supported\n wasm_not_supported: 'wasm_not_supported',\n change_viz_type: 'change_viz_type',\n },\n [USER_EVENTS_PAGES.all]: {\n interval_too_long: 'interval_too_long',\n open_in_explore_menu_clicked: 'open_in_explore_menu_clicked',\n },\n} as const;\n","import _ from 'lodash';\n\n/**\n * Order doesn't matter, converts to sets, deep compare via lodash isEqual\n * @param arr1\n * @param arr2\n */\n\nexport const areArraysEqual = (arr1: any[] | undefined, arr2: any[] | undefined) => {\n // If one array is undefined, and the other is empty, they will cast to the same set.\n if (typeof arr1 !== typeof arr2) {\n return false;\n }\n const set1 = new Set(arr1);\n const set2 = new Set(arr2);\n\n // Save us from running the isEqual check if the set sizes are different\n if (set1.size !== set2.size) {\n return false;\n }\n\n return _.isEqual(set1, set2);\n};\n\nexport const areArraysStrictlyEqual = (arr1: any[] | undefined, arr2: any[] | undefined) => {\n // If one array is undefined, and the other is empty, they will cast to the same set.\n if (typeof arr1 !== typeof arr2) {\n return false;\n }\n return _.isEqual(arr1, arr2);\n};\n","import { MetricExpr, parser, Selector } from '@grafana/lezer-logql';\nimport { LokiQuery } from './lokiQuery';\nimport { getNodesFromQuery } from './logqlMatchers';\nimport { SceneDataQueryRequest } from './datasourceTypes';\n\nexport function isQueryWithNode(query: string, nodeType: number): boolean {\n let isQueryWithNode = false;\n const tree = parser.parse(query);\n tree.iterate({\n enter: ({ type }): false | void => {\n if (type.id === nodeType) {\n isQueryWithNode = true;\n return false;\n }\n },\n });\n return isQueryWithNode;\n}\n\nexport function isLogsQuery(query: string): boolean {\n // As a safeguard we are checking for a length of 2, because at least the query should be `{}`\n return query.trim().length > 2 && !isQueryWithNode(query, MetricExpr);\n}\n\nexport function isLogsRequest(request: SceneDataQueryRequest) {\n return request.targets.find((query) => isLogsQuery(query.expr)) !== undefined;\n}\n\nexport function isInstantQuery(request: SceneDataQueryRequest) {\n return request.targets.find((query) => query.queryType === 'instant');\n}\n\nexport function requestSupportsSharding(request: SceneDataQueryRequest) {\n if (isLogsRequest(request)) {\n return false;\n }\n if (isInstantQuery(request)) {\n return false;\n }\n for (let i = 0; i < request.targets.length; i++) {\n if (request.targets[i].expr?.includes('avg_over_time')) {\n return false;\n }\n }\n return true;\n}\n\nconst SHARDING_PLACEHOLDER = '__stream_shard_number__';\nexport const addShardingPlaceholderSelector = (query: string) => {\n return query.replace('}', `, __stream_shard__=~\"${SHARDING_PLACEHOLDER}\"}`);\n};\n\nexport const interpolateShardingSelector = (queries: LokiQuery[], shards?: number[]) => {\n if (shards === undefined || shards.length === 0) {\n return queries.map((query) => ({\n ...query,\n expr: query.expr.replace(`, __stream_shard__=~\"${SHARDING_PLACEHOLDER}\"}`, '}'),\n }));\n }\n\n let shardValue = shards.join('|');\n\n // -1 means empty shard value\n if (shardValue === '-1' || shards.length === 1) {\n shardValue = shardValue === '-1' ? '' : shardValue;\n return queries.map((query) => ({\n ...query,\n expr: query.expr.replace(`, __stream_shard__=~\"${SHARDING_PLACEHOLDER}\"}`, `, __stream_shard__=\"${shardValue}\"}`),\n }));\n }\n\n return queries.map((query) => ({\n ...query,\n expr: query.expr.replace(new RegExp(`${SHARDING_PLACEHOLDER}`, 'g'), shardValue),\n }));\n};\n\nexport const getSelectorForShardValues = (query: string) => {\n const selector = getNodesFromQuery(query, [Selector]);\n if (selector.length > 0) {\n return query\n .substring(selector[0].from, selector[0].to)\n .replace(`, __stream_shard__=~\"${SHARDING_PLACEHOLDER}\"}`, '}');\n }\n return '';\n};\n","import {\n closestIdx,\n DataFrame,\n DataFrameType,\n DataQueryResponse,\n DataQueryResponseData,\n Field,\n FieldType,\n QueryResultMetaStat,\n} from '@grafana/data';\nimport { logger } from './logger';\n\nexport function combineResponses(currentResult: DataQueryResponse | null, newResult: DataQueryResponse) {\n if (!currentResult) {\n return cloneQueryResponse(newResult);\n }\n\n newResult.data.forEach((newFrame) => {\n const currentFrame = currentResult.data.find((frame) => shouldCombine(frame, newFrame));\n if (!currentFrame) {\n currentResult.data.push(cloneDataFrame(newFrame));\n return;\n }\n mergeFrames(currentFrame, newFrame);\n });\n\n const mergedErrors = [...(currentResult.errors ?? []), ...(newResult.errors ?? [])];\n\n // we make sure to have `.errors` as undefined, instead of empty-array\n // when no errors.\n\n if (mergedErrors.length > 0) {\n currentResult.errors = mergedErrors;\n }\n\n // the `.error` attribute is obsolete now,\n // but we have to maintain it, otherwise\n // some grafana parts do not behave well.\n // we just choose the old error, if it exists,\n // otherwise the new error, if it exists.\n const mergedError = currentResult.error ?? newResult.error;\n if (mergedError != null) {\n currentResult.error = mergedError;\n }\n\n const mergedTraceIds = [...(currentResult.traceIds ?? []), ...(newResult.traceIds ?? [])];\n if (mergedTraceIds.length > 0) {\n currentResult.traceIds = mergedTraceIds;\n }\n\n return currentResult;\n}\n\n/**\n * Given two data frames, merge their values. Overlapping values will be added together.\n */\nexport function mergeFrames(dest: DataFrame, source: DataFrame) {\n const destTimeField = dest.fields.find((field) => field.type === FieldType.time);\n const destIdField = dest.fields.find((field) => field.type === FieldType.string && field.name === 'id');\n const sourceTimeField = source.fields.find((field) => field.type === FieldType.time);\n const sourceIdField = source.fields.find((field) => field.type === FieldType.string && field.name === 'id');\n\n if (!destTimeField || !sourceTimeField) {\n logger.error(new Error(`Time fields not found in the data frames`));\n return;\n }\n\n const sourceTimeValues = sourceTimeField?.values.slice(0) ?? [];\n const totalFields = Math.max(dest.fields.length, source.fields.length);\n\n for (let i = 0; i < sourceTimeValues.length; i++) {\n const destIdx = resolveIdx(destTimeField, sourceTimeField, i);\n\n const entryExistsInDest = compareEntries(destTimeField, destIdField, destIdx, sourceTimeField, sourceIdField, i);\n\n for (let f = 0; f < totalFields; f++) {\n // For now, skip undefined fields that exist in the new frame\n if (!dest.fields[f]) {\n continue;\n }\n // Index is not reliable when frames have disordered fields, or an extra/missing field, so we find them by name.\n // If the field has no name, we fallback to the old index version.\n const sourceField = findSourceField(dest.fields[f], source.fields, f);\n if (!sourceField) {\n continue;\n }\n // Same value, accumulate\n if (entryExistsInDest) {\n if (dest.fields[f].type === FieldType.time) {\n // Time already exists, skip\n continue;\n } else if (dest.fields[f].type === FieldType.number) {\n // Number, add\n dest.fields[f].values[destIdx] = (dest.fields[f].values[destIdx] ?? 0) + sourceField.values[i];\n } else if (dest.fields[f].type === FieldType.other) {\n // Possibly labels, combine\n if (typeof sourceField.values[i] === 'object') {\n dest.fields[f].values[destIdx] = {\n ...dest.fields[f].values[destIdx],\n ...sourceField.values[i],\n };\n } else if (sourceField.values[i] != null) {\n dest.fields[f].values[destIdx] = sourceField.values[i];\n }\n } else {\n // Replace value\n dest.fields[f].values[destIdx] = sourceField.values[i];\n }\n } else if (sourceField.values[i] !== undefined) {\n // Insert in the `destIdx` position\n dest.fields[f].values.splice(destIdx, 0, sourceField.values[i]);\n if (sourceField.nanos) {\n dest.fields[f].nanos = dest.fields[f].nanos ?? new Array(dest.fields[f].values.length - 1).fill(0);\n dest.fields[f].nanos?.splice(destIdx, 0, sourceField.nanos[i]);\n }\n }\n }\n }\n\n dest.length = dest.fields[0].values.length;\n\n dest.meta = {\n ...dest.meta,\n stats: getCombinedMetadataStats(dest.meta?.stats ?? [], source.meta?.stats ?? []),\n };\n}\n\nfunction resolveIdx(destField: Field, sourceField: Field, index: number) {\n const idx = closestIdx(sourceField.values[index], destField.values);\n if (idx < 0) {\n return 0;\n }\n if (sourceField.values[index] === destField.values[idx] && sourceField.nanos != null && destField.nanos != null) {\n return sourceField.nanos[index] > destField.nanos[idx] ? idx + 1 : idx;\n }\n if (sourceField.values[index] > destField.values[idx]) {\n return idx + 1;\n }\n return idx;\n}\n\nfunction compareEntries(\n destTimeField: Field,\n destIdField: Field | undefined,\n destIndex: number,\n sourceTimeField: Field,\n sourceIdField: Field | undefined,\n sourceIndex: number\n) {\n const sameTimestamp = compareNsTimestamps(destTimeField, destIndex, sourceTimeField, sourceIndex);\n if (!sameTimestamp) {\n return false;\n }\n if (destIdField == null || sourceIdField == null) {\n return true;\n }\n // Log frames, check indexes\n return (\n destIdField.values[destIndex] !== undefined && destIdField.values[destIndex] === sourceIdField.values[sourceIndex]\n );\n}\n\nfunction compareNsTimestamps(destField: Field, destIndex: number, sourceField: Field, sourceIndex: number) {\n if (destField.nanos && sourceField.nanos) {\n return (\n destField.values[destIndex] !== undefined &&\n destField.values[destIndex] === sourceField.values[sourceIndex] &&\n destField.nanos[destIndex] !== undefined &&\n destField.nanos[destIndex] === sourceField.nanos[sourceIndex]\n );\n }\n return destField.values[destIndex] !== undefined && destField.values[destIndex] === sourceField.values[sourceIndex];\n}\n\nfunction findSourceField(referenceField: Field, sourceFields: Field[], index: number) {\n const candidates = sourceFields.filter((f) => f.name === referenceField.name);\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n return sourceFields[index];\n}\n\nconst TOTAL_BYTES_STAT = 'Summary: total bytes processed';\n// This is specific for Loki\nfunction getCombinedMetadataStats(\n destStats: QueryResultMetaStat[],\n sourceStats: QueryResultMetaStat[]\n): QueryResultMetaStat[] {\n // in the current approach, we only handle a single stat\n const destStat = destStats.find((s) => s.displayName === TOTAL_BYTES_STAT);\n const sourceStat = sourceStats.find((s) => s.displayName === TOTAL_BYTES_STAT);\n\n if (sourceStat != null && destStat != null) {\n return [{ value: sourceStat.value + destStat.value, displayName: TOTAL_BYTES_STAT, unit: destStat.unit }];\n }\n\n // maybe one of them exist\n const eitherStat = sourceStat ?? destStat;\n if (eitherStat != null) {\n return [eitherStat];\n }\n\n return [];\n}\n\n/**\n * Deep clones a DataQueryResponse\n */\nexport function cloneQueryResponse(response: DataQueryResponse): DataQueryResponse {\n const newResponse = {\n ...response,\n data: response.data.map(cloneDataFrame),\n };\n return newResponse;\n}\n\nfunction cloneDataFrame(frame: DataQueryResponseData): DataQueryResponseData {\n return {\n ...frame,\n fields: frame.fields.map((field: Field) => ({\n ...field,\n values: field.values,\n })),\n };\n}\n\nfunction shouldCombine(frame1: DataFrame, frame2: DataFrame): boolean {\n if (frame1.refId !== frame2.refId) {\n return false;\n }\n if (frame1.name != null && frame2.name != null && frame1.name !== frame2.name) {\n return false;\n }\n\n const frameType1 = frame1.meta?.type;\n const frameType2 = frame2.meta?.type;\n\n if (frameType1 !== frameType2) {\n // we do not join things that have a different type\n return false;\n }\n\n // metric range query data\n if (frameType1 === DataFrameType.TimeSeriesMulti) {\n return compareLabels(frame1, frame2);\n }\n\n // logs query data\n // logs use a special attribute in the dataframe's \"custom\" section\n // because we do not have a good \"frametype\" value for them yet.\n const customType1 = frame1.meta?.custom?.frameType;\n const customType2 = frame2.meta?.custom?.frameType;\n // Legacy frames have this custom type\n if (customType1 === 'LabeledTimeValues' && customType2 === 'LabeledTimeValues') {\n return true;\n } else if (customType1 === customType2) {\n // Data plane frames don't\n return true;\n }\n\n // should never reach here\n return false;\n}\n\nfunction compareLabels(frame1: DataFrame, frame2: DataFrame) {\n const field1 = frame1.fields.find((f) => f.type === FieldType.number);\n const field2 = frame2.fields.find((f) => f.type === FieldType.number);\n if (field1 === undefined || field2 === undefined) {\n // should never happen\n return false;\n }\n // undefined == null\n if (frame1.name == null) {\n frame1.name = JSON.stringify(field1.labels);\n }\n if (frame2.name == null) {\n frame2.name = JSON.stringify(field2.labels);\n }\n return frame1.name === frame2.name;\n}\n","import pluginJson from '../plugin.json';\nimport { Observable, Subscriber, Subscription } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { DataQueryRequest, DataQueryResponse, LoadingState, QueryResultMetaStat } from '@grafana/data';\nimport { addShardingPlaceholderSelector, getSelectorForShardValues, interpolateShardingSelector } from './logql';\nimport { combineResponses } from './combineResponses';\nimport { LokiDatasource, LokiQuery } from './lokiQuery';\nimport { logger } from './logger';\nimport { isValidQuery } from './logqlMatchers';\n\n/**\n * Query splitting by stream shards.\n * Query splitting was introduced in Loki to optimize querying for long intervals and high volume of data,\n * dividing a big request into smaller sub-requests, combining and displaying the results as they arrive.\n *\n * This approach, inspired by the time-based query splitting, takes advantage of the __stream_shard__\n * internal label, representing how data is spread into different sources that can be queried individually.\n *\n * The main entry point of this module is runShardSplitQuery(), which prepares the query for execution and\n * passes it to splitQueriesByStreamShard() to begin the querying loop.\n *\n * splitQueriesByStreamShard() has the following structure:\n * - Creates and returns an Observable to which the UI will subscribe\n * - Requests the __stream_shard__ values of the selected service:\n * . If there are no shard values, it falls back to the standard querying approach of the data source in runNonSplitRequest()\n * . If there are shards:\n * - It sorts them by value, descending. Higher shard numbers correspond with the least volume.\n * - It defines an initial group size, roughly Math.sqrt(amountOfShards).\n * - It begins the querying loop with runNextRequest().\n * - runNextRequest() will create a group of groupSize shards from the nth shard (cycle), and has the following internal structure:\n * . groupShardRequests() returns an array of shards from cycle to cycle + groupSize.\n * . interpolateShardingSelector() will update the stream selector with the shard numbers in the current group.\n * . After query execution:\n * - If the response is successful:\n * . It will add new data to the response with combineResponses()\n * . Using the data and meta data of the response, updateGroupSizeFromResponse() will increase or decrease the group size.\n * . nextRequest() will use the current cycle and group size to determine the next request or complete execution with done().\n * - If the response is unsuccessful:\n * . If the response is not a query error, and the group size bigger than 1, it will decrease the group size.\n * . If the group size is already 1, it will retry the request up to 4 times.\n * . If there are retry attempts, it will retry the current cycle, or else stop querying.\n * - Once all request groups have been executed, it will be done().\n */\n\nexport function runShardSplitQuery(datasource: LokiDatasource, request: DataQueryRequest) {\n const queries = datasource\n .interpolateVariablesInQueries(request.targets, request.scopedVars)\n .filter((query) => query.expr)\n .map((target) => ({\n ...target,\n expr: addShardingPlaceholderSelector(target.expr),\n }));\n\n return splitQueriesByStreamShard(datasource, request, queries);\n}\n\nfunction splitQueriesByStreamShard(\n datasource: LokiDatasource,\n request: DataQueryRequest,\n splittingTargets: LokiQuery[]\n) {\n let shouldStop = false;\n let mergedResponse: DataQueryResponse = { data: [], state: LoadingState.Streaming, key: uuidv4() };\n let subquerySubscription: Subscription | null = null;\n let retriesMap = new Map();\n let retryTimer: ReturnType | null = null;\n\n const runNextRequest = (\n subscriber: Subscriber,\n cycle: number,\n shards: number[],\n groupSize: number\n ) => {\n let nextGroupSize = groupSize;\n let retrying = false;\n\n if (subquerySubscription != null) {\n subquerySubscription.unsubscribe();\n subquerySubscription = null;\n }\n\n const done = () => {\n mergedResponse.state = shouldStop ? LoadingState.Error : LoadingState.Done;\n subscriber.next(mergedResponse);\n subscriber.complete();\n };\n\n if (shouldStop) {\n done();\n return;\n }\n\n const nextRequest = () => {\n const nextCycle = Math.min(cycle + groupSize, shards.length);\n if (cycle < shards.length && nextCycle <= shards.length) {\n runNextRequest(subscriber, nextCycle, shards, nextGroupSize);\n return;\n }\n done();\n };\n\n const retry = (errorResponse?: DataQueryResponse) => {\n try {\n if (errorResponse && !isRetriableError(errorResponse)) {\n return false;\n }\n } catch (e) {\n logger.error(e, {\n msg: 'sharding retry error',\n error: errorResponse?.error?.message ?? '',\n errors: errorResponse?.errors?.map((e) => e.message).join(' | ') ?? '',\n traces: errorResponse?.traceIds?.join('|') ?? '',\n });\n shouldStop = true;\n return false;\n }\n\n if (groupSize > 1) {\n groupSize = Math.floor(Math.sqrt(groupSize));\n debug(`Possible time out, new group size ${groupSize}`);\n retrying = true;\n runNextRequest(subscriber, cycle, shards, groupSize);\n return true;\n }\n\n const retries = retriesMap.get(cycle) ?? 0;\n if (retries > 3) {\n shouldStop = true;\n return false;\n }\n\n retriesMap.set(cycle, retries + 1);\n\n retryTimer = setTimeout(() => {\n logger.info(`Retrying ${cycle} (${retries + 1})`);\n runNextRequest(subscriber, cycle, shards, groupSize);\n retryTimer = null;\n }, 1500 * Math.pow(2, retries)); // Exponential backoff\n\n retrying = true;\n\n return true;\n };\n\n const shardsToQuery = groupShardRequests(shards, cycle, groupSize);\n debug(`Querying ${shardsToQuery.join(', ')}`);\n const subRequest = { ...request, targets: interpolateShardingSelector(splittingTargets, shardsToQuery) };\n // Request may not have a request id\n if (request.requestId) {\n subRequest.requestId = `${request.requestId}_shard_${cycle}_${groupSize}`;\n }\n\n // @ts-expect-error\n subquerySubscription = datasource.runQuery(subRequest).subscribe({\n next: (partialResponse: DataQueryResponse) => {\n if ((partialResponse.errors ?? []).length > 0 || partialResponse.error != null) {\n if (retry(partialResponse)) {\n return;\n }\n }\n nextGroupSize = constrainGroupSize(\n cycle + groupSize,\n updateGroupSizeFromResponse(partialResponse, groupSize),\n shards.length\n );\n if (nextGroupSize !== groupSize) {\n debug(`New group size ${nextGroupSize}`);\n }\n mergedResponse = combineResponses(mergedResponse, partialResponse);\n },\n complete: () => {\n if (retrying) {\n return;\n }\n // Prevent flashing \"no data\"\n if (mergedResponse.data.length) {\n subscriber.next(mergedResponse);\n }\n nextRequest();\n },\n error: (error: unknown) => {\n logger.error(error, { msg: 'failed to shard' });\n subscriber.next(mergedResponse);\n if (retry()) {\n return;\n }\n nextRequest();\n },\n });\n };\n\n const runNonSplitRequest = (subscriber: Subscriber) => {\n subquerySubscription = datasource.query(request).subscribe({\n next: (partialResponse: DataQueryResponse) => {\n mergedResponse = partialResponse;\n },\n complete: () => {\n subscriber.next(mergedResponse);\n },\n error: (error: unknown) => {\n logger.error(error, { msg: 'runNonSplitRequest subscription error' });\n subscriber.error(mergedResponse);\n },\n });\n };\n\n const response = new Observable((subscriber) => {\n const selector = getSelectorForShardValues(splittingTargets[0].expr);\n\n if (!isValidQuery(selector)) {\n debug(`Skipping invalid selector: ${selector}`);\n subscriber.complete();\n return;\n }\n\n datasource.languageProvider\n .fetchLabelValues('__stream_shard__', {\n timeRange: request.range,\n streamSelector: selector ? selector : undefined,\n })\n .then((values: string[]) => {\n const shards = values.map((value) => parseInt(value, 10));\n if (!shards || !shards.length) {\n logger.warn(`Shard splitting not supported. Issuing a regular query.`);\n runNonSplitRequest(subscriber);\n } else {\n shards.sort((a, b) => b - a);\n debug(`Querying ${shards.join(', ')} shards`);\n runNextRequest(subscriber, 0, shards, getInitialGroupSize(shards));\n }\n })\n .catch((e: unknown) => {\n logger.error(e, { msg: 'failed to fetch label values for __stream_shard__' });\n runNonSplitRequest(subscriber);\n });\n return () => {\n shouldStop = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n }\n if (subquerySubscription != null) {\n subquerySubscription.unsubscribe();\n subquerySubscription = null;\n }\n };\n });\n\n return response;\n}\n\nfunction updateGroupSizeFromResponse(response: DataQueryResponse, currentSize: number) {\n if (!response.data.length) {\n // Empty response, increase group size\n return currentSize + 1;\n }\n\n const metaExecutionTime: QueryResultMetaStat | undefined = response.data[0].meta?.stats?.find(\n (stat: QueryResultMetaStat) => stat.displayName === 'Summary: exec time'\n );\n\n if (metaExecutionTime) {\n const executionTime = Math.round(metaExecutionTime.value);\n debug(`${metaExecutionTime.value}`);\n // Positive scenarios\n if (executionTime <= 1) {\n return Math.floor(currentSize * 1.5);\n } else if (executionTime < 6) {\n return Math.ceil(currentSize * 1.1);\n }\n\n // Negative scenarios\n if (currentSize === 1) {\n return currentSize;\n } else if (executionTime < 20) {\n return Math.ceil(currentSize * 0.9);\n } else {\n return Math.floor(currentSize / 2);\n }\n }\n\n return currentSize;\n}\n\n/**\n * Prevents the group size for ever being more than maxFactor% of the pending shards.\n */\nfunction constrainGroupSize(cycle: number, groupSize: number, shards: number) {\n const maxFactor = 0.7;\n return Math.min(groupSize, Math.max(Math.floor((shards - cycle) * maxFactor), 1));\n}\n\nfunction groupShardRequests(shards: number[], start: number, groupSize: number) {\n if (start === shards.length) {\n return [-1];\n }\n return shards.slice(start, start + groupSize);\n}\n\nfunction getInitialGroupSize(shards: number[]) {\n return Math.floor(Math.sqrt(shards.length));\n}\n\nfunction isRetriableError(errorResponse: DataQueryResponse) {\n const message = errorResponse.errors\n ? (errorResponse.errors[0].message ?? '').toLowerCase()\n : errorResponse.error?.message ?? '';\n if (message.includes('timeout')) {\n return true;\n } else if (message.includes('parse error')) {\n // If the error is a parse error, we want to signal to stop querying.\n throw new Error(message);\n }\n return false;\n}\n\n// Enable to output debugging logs\nconst DEBUG_ENABLED = Boolean(localStorage.getItem(`${pluginJson.id}.sharding_debug_enabled`));\nfunction debug(message: string) {\n if (!DEBUG_ENABLED) {\n return;\n }\n console.log(message);\n}\n","import {\n createDataFrame,\n DataFrame,\n DataQueryRequest,\n DataQueryResponse,\n Field,\n FieldType,\n LoadingState,\n TestDataSourceResponse,\n} from '@grafana/data';\nimport { config, DataSourceWithBackend, getDataSourceSrv } from '@grafana/runtime';\nimport { RuntimeDataSource, sceneUtils } from '@grafana/scenes';\nimport { DataQuery } from '@grafana/schema';\nimport { Observable, Subscriber } from 'rxjs';\nimport { getDataSource } from './scenes';\nimport { DetectedFieldsResponse, DetectedLabelsResponse } from './fields';\nimport { FIELDS_TO_REMOVE, LABELS_TO_REMOVE, sortLabelsByCardinality } from './filters';\nimport { SERVICE_NAME } from './variables';\nimport { runShardSplitQuery } from './shardQuerySplitting';\nimport { requestSupportsSharding } from './logql';\nimport { LokiDatasource, LokiQuery } from './lokiQuery';\nimport { SceneDataQueryRequest, SceneDataQueryResourceRequest, VolumeRequestProps } from './datasourceTypes';\nimport { logger } from './logger';\nimport { PLUGIN_ID } from './plugin';\nimport { sanitizeStreamSelector } from './query';\n\nexport const WRAPPED_LOKI_DS_UID = 'wrapped-loki-ds-uid';\n\ntype TimeStampOfVolumeEval = number;\ntype VolumeCount = string;\ntype VolumeValue = [TimeStampOfVolumeEval, VolumeCount];\ntype VolumeResult = {\n metric: {\n service_name?: string;\n __aggregated_metric__?: string;\n [index: string]: string | undefined;\n };\n value: VolumeValue;\n};\n\ntype IndexVolumeResponse = {\n data: {\n result: VolumeResult[];\n };\n};\n\ntype LabelsResponse = {\n status: string;\n data: string[];\n};\n\ntype SampleTimeStamp = number;\ntype SampleCount = number;\ntype PatternSample = [SampleTimeStamp, SampleCount];\n\nexport interface LokiPattern {\n pattern: string;\n samples: PatternSample[];\n}\n\ntype PatternsResponse = {\n data: LokiPattern[];\n};\n\nexport const DETECTED_FIELDS_NAME_FIELD = 'name';\n\nexport const DETECTED_FIELDS_CARDINALITY_NAME = 'cardinality';\n\nexport const DETECTED_FIELDS_PARSER_NAME = 'parser';\n\nexport const DETECTED_FIELDS_TYPE_NAME = 'type';\n\nexport class WrappedLokiDatasource extends RuntimeDataSource {\n constructor(pluginId: string, uid: string) {\n super(pluginId, uid);\n }\n\n query(request: SceneDataQueryRequest): Promise | Observable {\n return new Observable((subscriber) => {\n if (!request.scopedVars?.__sceneObject) {\n throw new Error('Scene object not found in request');\n }\n\n getDataSourceSrv()\n .get(getDataSource(request.scopedVars.__sceneObject.valueOf()))\n .then(async (ds) => {\n if (!(ds instanceof DataSourceWithBackend) || !('interpolateString' in ds) || !('getTimeRangeParams' in ds)) {\n throw new Error('Invalid datasource!');\n }\n\n // Cast to LokiDatasource after validation\n const lokiDs = ds as LokiDatasource;\n\n // override the target datasource to Loki\n request.targets = request.targets?.map((target) => {\n target.datasource = lokiDs;\n return target;\n });\n\n const targetsSet = new Set();\n request.targets.forEach((target) => {\n targetsSet.add(target.resource ?? '');\n });\n\n if (targetsSet.size !== 1) {\n throw new Error('A request cannot contain queries to multiple endpoints');\n }\n\n const requestType = request.targets[0].resource;\n\n switch (requestType) {\n case 'volume': {\n await this.getVolume(request, lokiDs, subscriber);\n break;\n }\n case 'patterns': {\n await this.getPatterns(request, lokiDs, subscriber);\n break;\n }\n case 'detected_labels': {\n await this.getDetectedLabels(request, lokiDs, subscriber);\n break;\n }\n case 'detected_fields': {\n await this.getDetectedFields(request, lokiDs, subscriber);\n break;\n }\n case 'labels': {\n await this.getLabels(request, lokiDs, subscriber);\n break;\n }\n default: {\n this.getData(request, lokiDs, subscriber);\n break;\n }\n }\n });\n });\n }\n\n private getData(request: SceneDataQueryRequest, ds: LokiDatasource, subscriber: Subscriber) {\n const shardingEnabled = config.featureToggles.exploreLogsShardSplitting;\n\n const updatedRequest = {\n ...request,\n targets: ds.interpolateVariablesInQueries(request.targets, request.scopedVars).map((target) => ({\n ...target,\n resource: undefined,\n expr: sanitizeStreamSelector(target.expr),\n })),\n };\n\n // Query the datasource and return either observable or promise\n const dsResponse =\n requestSupportsSharding(updatedRequest) === false || !shardingEnabled\n ? ds.query(updatedRequest)\n : runShardSplitQuery(ds, updatedRequest);\n dsResponse.subscribe(subscriber);\n\n return subscriber;\n }\n\n private async getPatterns(\n request: DataQueryRequest,\n ds: LokiDatasource,\n subscriber: Subscriber\n ) {\n const targets = request.targets.filter((target) => {\n return target.resource === 'patterns';\n });\n\n if (targets.length !== 1) {\n throw new Error('Patterns query can only have a single target!');\n }\n const { interpolatedTarget, expression } = this.interpolate(ds, targets, request);\n subscriber.next({ data: [], state: LoadingState.Loading });\n\n try {\n const dsResponse = ds.getResource(\n 'patterns',\n {\n query: expression,\n start: request.range.from.utc().toISOString(),\n end: request.range.to.utc().toISOString(),\n step: request.interval,\n },\n {\n requestId: request.requestId ?? 'patterns',\n headers: {\n 'X-Query-Tags': `Source=${PLUGIN_ID}`,\n },\n }\n );\n const response: PatternsResponse = await dsResponse;\n const lokiPatterns = response?.data;\n\n let maxValue = -Infinity;\n let minValue = 0;\n\n const frames: DataFrame[] =\n lokiPatterns?.map((pattern: LokiPattern) => {\n const timeValues: number[] = [];\n const countValues: number[] = [];\n let sum = 0;\n pattern.samples.forEach(([time, count]) => {\n timeValues.push(time * 1000);\n countValues.push(count);\n if (count > maxValue) {\n maxValue = count;\n }\n if (count < minValue) {\n minValue = count;\n }\n if (count > maxValue) {\n maxValue = count;\n }\n if (count < minValue) {\n minValue = count;\n }\n sum += count;\n });\n return createDataFrame({\n refId: interpolatedTarget.refId,\n name: pattern.pattern,\n fields: [\n {\n name: 'time',\n type: FieldType.time,\n values: timeValues,\n config: {},\n },\n {\n name: pattern.pattern,\n type: FieldType.number,\n values: countValues,\n config: {},\n },\n ],\n meta: {\n preferredVisualisationType: 'graph',\n custom: {\n sum,\n },\n },\n });\n }) ?? [];\n\n frames.sort((a, b) => (b.meta?.custom?.sum as number) - (a.meta?.custom?.sum as number));\n subscriber.next({ data: frames, state: LoadingState.Done });\n } catch (e) {\n subscriber.next({ data: [], state: LoadingState.Error });\n }\n\n return subscriber;\n }\n\n private interpolate(\n ds: LokiDatasource,\n targets: Array,\n request: DataQueryRequest\n ) {\n const targetsInterpolated = ds.interpolateVariablesInQueries(targets, request.scopedVars);\n if (!targetsInterpolated.length) {\n throw new Error('Datasource failed to interpolate query!');\n }\n const interpolatedTarget = targetsInterpolated[0];\n const expression = sanitizeStreamSelector(interpolatedTarget.expr);\n return { interpolatedTarget, expression };\n }\n\n private async getDetectedLabels(\n request: DataQueryRequest,\n ds: LokiDatasource,\n subscriber: Subscriber\n ) {\n const targets = request.targets.filter((target) => {\n return target.resource === 'detected_labels';\n });\n\n if (targets.length !== 1) {\n throw new Error('Detected labels query can only have a single target!');\n }\n\n let { interpolatedTarget, expression } = this.interpolate(ds, targets, request);\n\n // Detected_labels is a bit different then other queries that interpolate the labels variable, it can be empty, but if it is empty it must be completely empty or we'll get the \"queries require at least one regexp or equality\" error from Loki\n if (expression === `{}`) {\n expression = '';\n }\n\n subscriber.next({ data: [], state: LoadingState.Loading });\n\n try {\n const response = await ds.getResource(\n 'detected_labels',\n {\n query: expression,\n start: request.range.from.utc().toISOString(),\n end: request.range.to.utc().toISOString(),\n },\n {\n requestId: request.requestId ?? 'detected_labels',\n headers: {\n 'X-Query-Tags': `Source=${PLUGIN_ID}`,\n },\n }\n );\n\n const labels = response.detectedLabels\n ?.filter((label) => !LABELS_TO_REMOVE.includes(label.label))\n ?.sort((a, b) => sortLabelsByCardinality(a, b));\n\n const detectedLabelFields: Array> = labels?.map((label) => {\n return {\n name: label.label,\n values: [label.cardinality],\n };\n });\n\n const dataFrame = createDataFrame({\n refId: interpolatedTarget.refId,\n fields: detectedLabelFields ?? [],\n });\n\n subscriber.next({ data: [dataFrame], state: LoadingState.Done });\n } catch (e) {\n subscriber.next({ data: [], state: LoadingState.Error });\n }\n\n return subscriber;\n }\n\n private async getDetectedFields(\n request: DataQueryRequest,\n ds: LokiDatasource,\n subscriber: Subscriber\n ) {\n const targets = request.targets.filter((target) => {\n return target.resource === 'detected_fields';\n });\n\n if (targets.length !== 1) {\n throw new Error('Detected fields query can only have a single target!');\n }\n\n subscriber.next({ data: [], state: LoadingState.Loading });\n\n const { interpolatedTarget, expression } = this.interpolate(ds, targets, request);\n\n try {\n const response = await ds.getResource(\n 'detected_fields',\n {\n query: expression,\n start: request.range.from.utc().toISOString(),\n end: request.range.to.utc().toISOString(),\n },\n {\n requestId: request.requestId ?? 'detected_fields',\n headers: {\n 'X-Query-Tags': `Source=${PLUGIN_ID}`,\n },\n }\n );\n\n const nameField: Field = { name: DETECTED_FIELDS_NAME_FIELD, type: FieldType.string, values: [], config: {} };\n const cardinalityField: Field = {\n name: DETECTED_FIELDS_CARDINALITY_NAME,\n type: FieldType.number,\n values: [],\n config: {},\n };\n const parserField: Field = { name: DETECTED_FIELDS_PARSER_NAME, type: FieldType.string, values: [], config: {} };\n const typeField: Field = { name: DETECTED_FIELDS_TYPE_NAME, type: FieldType.string, values: [], config: {} };\n\n response.fields?.forEach((field) => {\n if (!FIELDS_TO_REMOVE.includes(field.label)) {\n nameField.values.push(field.label);\n cardinalityField.values.push(field.cardinality);\n parserField.values.push(field.parsers?.length ? field.parsers.join(', ') : 'structuredMetadata');\n typeField.values.push(field.type);\n }\n });\n\n const dataFrame = createDataFrame({\n refId: interpolatedTarget.refId,\n fields: [nameField, cardinalityField, parserField, typeField],\n });\n\n subscriber.next({ data: [dataFrame], state: LoadingState.Done });\n } catch (e) {\n logger.error(e, { msg: 'Detected fields error' });\n subscriber.next({ data: [], state: LoadingState.Error });\n }\n\n return subscriber;\n }\n\n //@todo doesn't work with multiple queries\n private async getVolume(\n request: DataQueryRequest,\n ds: LokiDatasource,\n subscriber: Subscriber\n ) {\n if (request.targets.length !== 1) {\n throw new Error('Volume query can only have a single target!');\n }\n\n const target = request.targets[0];\n const primaryLabel = target.primaryLabel;\n if (!primaryLabel) {\n throw new Error('Primary label is required for volume queries!');\n }\n\n const targetsInterpolated = ds.interpolateVariablesInQueries([target], request.scopedVars);\n const expression = sanitizeStreamSelector(targetsInterpolated[0].expr.replace('.*.*', '.+'));\n\n subscriber.next({ data: [], state: LoadingState.Loading });\n\n try {\n const volumeResponse: IndexVolumeResponse = await ds.getResource(\n 'index/volume',\n {\n query: expression,\n start: request.range.from.utc().toISOString(),\n end: request.range.to.utc().toISOString(),\n limit: 5000,\n },\n {\n requestId: request.requestId ?? 'volume',\n headers: {\n 'X-Query-Tags': `Source=${PLUGIN_ID}`,\n },\n }\n );\n volumeResponse?.data.result.sort((lhs: VolumeResult, rhs: VolumeResult) => {\n const lVolumeCount: VolumeCount = lhs.value[1];\n const rVolumeCount: VolumeCount = rhs.value[1];\n return Number(rVolumeCount) - Number(lVolumeCount);\n });\n\n // Scenes will only emit dataframes from the SceneQueryRunner, so for now we need to convert the API response to a dataframe\n const df = createDataFrame({\n fields: [\n {\n // @todo rename\n name: SERVICE_NAME,\n values: volumeResponse?.data.result?.map((r) => {\n return r.metric[primaryLabel];\n }),\n },\n { name: 'volume', values: volumeResponse?.data.result?.map((r) => Number(r.value[1])) },\n ],\n });\n\n subscriber.next({ data: [df] });\n } catch (e) {\n logger.error(e);\n subscriber.next({ data: [], state: LoadingState.Error });\n }\n\n subscriber.complete();\n\n return subscriber;\n }\n\n private async getLabels(\n request: DataQueryRequest,\n ds: LokiDatasource,\n subscriber: Subscriber\n ) {\n if (request.targets.length !== 1) {\n throw new Error('Volume query can only have a single target!');\n }\n\n try {\n const labelsResponse: LabelsResponse = await ds.getResource(\n 'labels',\n {\n start: request.range.from.utc().toISOString(),\n end: request.range.to.utc().toISOString(),\n },\n {\n requestId: request.requestId ?? 'labels',\n headers: {\n 'X-Query-Tags': `Source=${PLUGIN_ID}`,\n },\n }\n );\n\n // Scenes will only emit dataframes from the SceneQueryRunner, so for now we need to convert the API response to a dataframe\n const df = createDataFrame({\n fields: [{ name: 'labels', values: labelsResponse?.data }],\n });\n subscriber.next({ data: [df], state: LoadingState.Done });\n } catch (e) {\n subscriber.next({ data: [], state: LoadingState.Error });\n }\n\n subscriber.complete();\n\n return subscriber;\n }\n\n testDatasource(): Promise {\n return Promise.resolve({ status: 'success', message: 'Data source is working', title: 'Success' });\n }\n}\n\nfunction init() {\n sceneUtils.registerRuntimeDataSource({\n dataSource: new WrappedLokiDatasource('wrapped-loki-ds', WRAPPED_LOKI_DS_UID),\n });\n}\n\nexport default init;\n","import {\n DETECTED_FIELD_AND_METADATA_VALUES_EXPR,\n DETECTED_LEVELS_VALUES_EXPR,\n JSON_FORMAT_EXPR,\n LEVEL_VARIABLE_VALUE,\n LOGS_FORMAT_EXPR,\n MIXED_FORMAT_EXPR,\n VAR_FIELDS_AND_METADATA,\n VAR_FIELDS_EXPR,\n VAR_LABELS_EXPR,\n VAR_LEVELS,\n VAR_LINE_FILTERS_EXPR,\n VAR_METADATA_EXPR,\n VAR_PATTERNS_EXPR,\n} from './variables';\nimport { SceneObject } from '@grafana/scenes';\nimport { getParserFromFieldsFilters } from './fields';\nimport { getFieldsVariable } from './variableGetters';\nimport { UIVariableFilterType } from '../Components/ServiceScene/Breakdowns/AddToFiltersButton';\nimport { logger } from './logger';\n\n/**\n * Crafts count over time query that excludes empty values for stream selector name\n * Will only add parsers if there are filters that require them.\n * @param sceneRef\n * @param streamSelectorName - the name of the stream selector we are aggregating by\n * @param excludeEmpty - if true, the query will exclude empty values for the given streamSelectorName\n */\nexport function getTimeSeriesExpr(sceneRef: SceneObject, streamSelectorName: string, excludeEmpty = true): string {\n const fieldsVariable = getFieldsVariable(sceneRef);\n\n let metadataExpressionToAdd = '';\n if (excludeEmpty) {\n // `LEVEL_VARIABLE_VALUE` is a special case where we don't want to add this to the stream selector\n if (streamSelectorName === LEVEL_VARIABLE_VALUE) {\n metadataExpressionToAdd = `| ${LEVEL_VARIABLE_VALUE} != \"\"`;\n }\n }\n\n const fieldFilters = fieldsVariable.state.filters;\n const parser = getParserFromFieldsFilters(fieldsVariable);\n\n // if we have fields, we also need to add parsers\n if (fieldFilters.length) {\n if (parser === 'mixed') {\n return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_METADATA_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_LINE_FILTERS_EXPR} ${MIXED_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;\n }\n if (parser === 'json') {\n return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_METADATA_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_LINE_FILTERS_EXPR} ${JSON_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;\n }\n if (parser === 'logfmt') {\n return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_METADATA_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_LINE_FILTERS_EXPR} ${LOGS_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;\n }\n }\n return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_METADATA_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_LINE_FILTERS_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;\n}\n\n/**\n * Get expressions for UI variables\n * @param variableType\n */\nexport function getFieldsTagValuesExpression(variableType: UIVariableFilterType) {\n switch (variableType) {\n case VAR_LEVELS:\n return DETECTED_LEVELS_VALUES_EXPR;\n case VAR_FIELDS_AND_METADATA:\n return DETECTED_FIELD_AND_METADATA_VALUES_EXPR;\n default:\n const error = new Error(`Unknown variable type: ${variableType}`);\n logger.error(error, {\n variableType,\n msg: `getFieldsTagValuesExpression: Unknown variable type: ${variableType}`,\n });\n throw error;\n }\n}\n","import { sceneGraph, SceneObject } from '@grafana/scenes';\nimport { IndexScene } from '../Components/IndexScene/IndexScene';\nimport { FavoriteServiceHeaderActionScene } from '../Components/ServiceSelectionScene/FavoriteServiceHeaderActionScene';\nimport { ServiceSelectionScene } from '../Components/ServiceSelectionScene/ServiceSelectionScene';\nimport { getDataSourceVariable } from './variableGetters';\nimport { addToFavoriteLabelValueInStorage, removeFromFavoritesInStorage } from './store';\n\nexport function rerenderFavorites(sceneRef: SceneObject) {\n // Find all FavoriteServiceHeaderActionScene and re-render\n const indexScene = sceneGraph.getAncestor(sceneRef, IndexScene);\n const favoriteServiceHeaderActionScene = sceneGraph.findAllObjects(\n indexScene,\n (o) => o instanceof FavoriteServiceHeaderActionScene\n );\n favoriteServiceHeaderActionScene.forEach((s) => s.forceRender());\n\n // Find the ServiceFieldSelector's parent (currently service selection scene) and force re-render so dropdown has correct order\n // @todo move ServiceFieldSelector to new scene\n const serviceSelectionScene = sceneGraph.findDescendents(indexScene, ServiceSelectionScene);\n serviceSelectionScene.forEach((s) => s.forceRender());\n}\n\nexport function addToFavorites(labelName: string, labelValue: string, sceneRef: SceneObject) {\n const ds = getDataSourceVariable(sceneRef).getValue();\n addToFavoriteLabelValueInStorage(ds, labelName, labelValue);\n rerenderFavorites(sceneRef);\n}\n\nexport function removeFromFavorites(labelName: string, labelValue: string, sceneRef: SceneObject) {\n const ds = getDataSourceVariable(sceneRef).getValue();\n removeFromFavoritesInStorage(ds, labelName, labelValue);\n rerenderFavorites(sceneRef);\n}\n","import { DataFrame, Field, ReducerID } from '@grafana/data';\nimport { DrawStyle, StackingMode } from '@grafana/ui';\nimport {\n AdHocFiltersVariable,\n PanelBuilders,\n SceneCSSGridItem,\n SceneDataTransformer,\n SceneObject,\n} from '@grafana/scenes';\nimport { AddToFiltersButton, InterpolatedFilterType } from 'Components/ServiceScene/Breakdowns/AddToFiltersButton';\nimport {\n DetectedFieldType,\n LEVEL_VARIABLE_VALUE,\n LogsQueryOptions,\n ParserType,\n VAR_FIELDS,\n VAR_LABELS,\n VAR_LEVELS,\n VAR_METADATA,\n} from './variables';\nimport { setLevelColorOverrides } from './panel';\nimport { map, Observable } from 'rxjs';\nimport { SortBy, SortByScene } from '../Components/ServiceScene/Breakdowns/SortByScene';\nimport { getDetectedFieldsFrame } from '../Components/ServiceScene/ServiceScene';\nimport { getLogsStreamSelector, getValueFromFieldsFilter } from './variableGetters';\nimport { logger } from './logger';\nimport { PanelMenu } from '../Components/Panels/PanelMenu';\nimport { getLabelTypeFromFrame } from './lokiQuery';\nimport { LabelType } from './fieldsTypes';\n\nexport type DetectedLabel = {\n label: string;\n cardinality: number;\n};\n\nexport type DetectedLabelsResponse = {\n detectedLabels: DetectedLabel[];\n};\n\nexport type DetectedField = {\n label: string;\n cardinality: number;\n type: string;\n parsers: string[] | null;\n};\n\nexport type DetectedFieldsResponse = {\n fields: DetectedField[];\n};\n\nconst getReducerId = (sortBy: SortBy) => {\n if (sortBy) {\n const values: string[] = Object.values(ReducerID);\n if (values.includes(sortBy)) {\n return sortBy;\n }\n }\n return undefined;\n};\n\n/**\n * Extracts the ExtractedFieldsType from the string returned on the detected_fields api parser field value\n * @param parserString\n */\nexport function extractParserFromString(parserString?: string): ParserType {\n switch (parserString) {\n case 'json':\n return 'json';\n case 'logfmt':\n return 'logfmt';\n case '': // Structured metadata is empty\n return 'structuredMetadata';\n case 'structuredMetadata': // Structured metadata is empty\n return 'structuredMetadata';\n default: // if we get a parser with multiple\n return 'mixed';\n }\n}\n\nexport function extractFieldTypeFromString(fieldString?: string): DetectedFieldType {\n switch (fieldString) {\n case 'int':\n case 'float':\n case 'duration':\n case 'boolean':\n case 'bytes':\n return fieldString;\n default:\n return 'string';\n }\n}\n\nexport function extractParserFromArray(parsers?: string[]): ParserType {\n const parsersSet = new Set(parsers?.map((v) => v.toString()) ?? []);\n\n // Structured metadata doesn't change the parser we use, so remove it\n parsersSet.delete('structuredMetadata');\n\n // get unique values\n const parsersArray = Array.from(parsersSet);\n\n if (parsersArray.length === 1) {\n return extractParserFromString(parsersArray[0]);\n }\n\n // If the set size is zero, we only had structured metadata detected as a parser\n if (parsersSet.size === 0) {\n return 'structuredMetadata';\n }\n\n // Otherwise if there was more then one value, return mixed parser\n return 'mixed';\n}\n\nexport function getParserForField(fieldName: string, sceneRef: SceneObject): ParserType | undefined {\n const detectedFieldsFrame = getDetectedFieldsFrame(sceneRef);\n const parserField: Field | undefined = detectedFieldsFrame?.fields[2];\n const namesField: Field | undefined = detectedFieldsFrame?.fields[0];\n\n const index = namesField?.values.indexOf(fieldName);\n const parser =\n index !== undefined && index !== -1 ? extractParserFromString(parserField?.values?.[index] ?? '') : undefined;\n\n if (parser === undefined) {\n logger.warn('missing parser, using mixed format for', { fieldName });\n return 'mixed';\n }\n return parser;\n}\n\nexport function getFilterBreakdownValueScene(\n getTitle: (df: DataFrame) => string,\n style: DrawStyle,\n variableName: typeof VAR_FIELDS | typeof VAR_LABELS | typeof VAR_METADATA,\n sortByScene: SortByScene,\n labelKey?: string\n) {\n return (frame: DataFrame, frameIndex: number) => {\n const reducerID = getReducerId(sortByScene.state.sortBy);\n const panel = PanelBuilders.timeseries()\n .setOption('legend', { showLegend: false })\n .setCustomFieldConfig('fillOpacity', 9)\n .setTitle(getTitle(frame))\n .setShowMenuAlways(true)\n .setData(\n new SceneDataTransformer({\n transformations: [() => selectFrameTransformation(frame)],\n })\n )\n .setOverrides(setLevelColorOverrides)\n .setMenu(new PanelMenu({ investigationOptions: { frame, fieldName: getTitle(frame), labelName: labelKey } }))\n .setHeaderActions([\n new AddToFiltersButton({ frame, variableName, hideExclude: labelKey === LEVEL_VARIABLE_VALUE }),\n ]);\n\n if (style === DrawStyle.Bars) {\n panel\n .setCustomFieldConfig('stacking', { mode: StackingMode.Normal })\n .setCustomFieldConfig('fillOpacity', 100)\n .setCustomFieldConfig('lineWidth', 0)\n .setCustomFieldConfig('pointSize', 0)\n .setOverrides(setLevelColorOverrides)\n .setCustomFieldConfig('drawStyle', DrawStyle.Bars);\n }\n\n if (reducerID) {\n panel.setOption('legend', {\n showLegend: true,\n calcs: [reducerID],\n });\n // These will only have a single series, no need to show the title twice\n panel.setDisplayName(' ');\n }\n\n return new SceneCSSGridItem({\n body: panel.build(),\n });\n };\n}\n\nexport function selectFrameTransformation(frame: DataFrame) {\n return (source: Observable) => {\n return source.pipe(\n map(() => {\n return [frame];\n })\n );\n };\n}\n\n/**\n * Returns the variable to use when adding filters in a panel.\n * @param frame\n * @param key\n * @param sceneRef\n */\nexport function getVariableForLabel(\n frame: DataFrame | undefined,\n key: string,\n sceneRef: SceneObject\n): InterpolatedFilterType {\n const labelType = frame ? getLabelTypeFromFrame(key, frame) : LabelType.Parsed;\n\n if (labelType) {\n // Use the labelType from the dataframe\n return getFilterTypeFromLabelType(labelType, key);\n }\n\n // If the dataframe doesn't have labelTypes, check if the detected_fields response returned a parser.\n const parserForThisField = getParserForField(key, sceneRef);\n if (parserForThisField === 'structuredMetadata') {\n return VAR_METADATA;\n }\n\n logger.warn('unable to determine label variable, falling back to parsed field', {\n key,\n parserForThisField: parserForThisField ?? '',\n });\n\n return VAR_FIELDS;\n}\n\nexport function getFilterTypeFromLabelType(type: LabelType, key: string): InterpolatedFilterType {\n switch (type) {\n case LabelType.Indexed: {\n return VAR_LABELS;\n }\n case LabelType.Parsed: {\n return VAR_FIELDS;\n }\n case LabelType.StructuredMetadata: {\n // Structured metadata is either a special level variable, or a field variable\n if (key === LEVEL_VARIABLE_VALUE) {\n return VAR_LEVELS;\n }\n return VAR_METADATA;\n }\n default: {\n const err = new Error(`Invalid label type for ${key}`);\n logger.error(err, { type, msg: `Invalid label type for ${key}` });\n throw err;\n }\n }\n}\n\nexport function getParserFromFieldsFilters(fields: AdHocFiltersVariable): ParserType {\n const parsers = fields.state.filters.map((filter) => {\n return getValueFromFieldsFilter(filter).parser;\n });\n\n return extractParserFromArray(parsers);\n}\n\nexport function isAvgField(fieldType: DetectedFieldType | undefined) {\n return fieldType === 'duration' || fieldType === 'bytes' || fieldType === 'float';\n}\n\nexport function buildFieldsQuery(optionValue: string, options: LogsQueryOptions) {\n if (options.fieldType && ['bytes', 'duration'].includes(options.fieldType)) {\n return (\n `avg_over_time(${getLogsStreamSelector(options)} | unwrap ` +\n options.fieldType +\n `(${optionValue}) | __error__=\"\" [$__auto]) by ()`\n );\n } else if (options.fieldType && options.fieldType === 'float') {\n return (\n `avg_over_time(${getLogsStreamSelector(options)} | unwrap ` + optionValue + ` | __error__=\"\" [$__auto]) by ()`\n );\n } else {\n return `sum by (${optionValue}) (count_over_time(${getLogsStreamSelector(options)} [$__auto]))`;\n }\n}\n\n/**\n * Returns the DetectedFieldType if available for a specific label\n * @param optionValue\n * @param detectedFieldsFrame\n */\nexport function getDetectedFieldType(optionValue: string, detectedFieldsFrame?: DataFrame) {\n const namesField: Field | undefined = detectedFieldsFrame?.fields[0];\n const typesField: Field | undefined = detectedFieldsFrame?.fields[3];\n const index = namesField?.values.indexOf(optionValue);\n return index !== undefined && index !== -1 ? extractFieldTypeFromString(typesField?.values?.[index]) : undefined;\n}\n\nexport function buildFieldsQueryString(\n optionValue: string,\n fieldsVariable: AdHocFiltersVariable,\n detectedFieldsFrame?: DataFrame\n) {\n const parserField: Field | undefined = detectedFieldsFrame?.fields[2];\n const namesField: Field | undefined = detectedFieldsFrame?.fields[0];\n const typesField: Field | undefined = detectedFieldsFrame?.fields[3];\n const index = namesField?.values.indexOf(optionValue);\n\n const parserForThisField =\n index !== undefined && index !== -1 ? extractParserFromString(parserField?.values?.[index]) : 'mixed';\n\n const optionType =\n index !== undefined && index !== -1 ? extractFieldTypeFromString(typesField?.values?.[index]) : undefined;\n\n // Get the parser from the json payload of each filter\n const parsers = fieldsVariable.state.filters.map((filter) => {\n const index = namesField?.values.indexOf(filter.key);\n const parserFromFilterValue = getValueFromFieldsFilter(filter);\n if (parserFromFilterValue.parser) {\n return parserFromFilterValue.parser;\n }\n\n // Then fallback to check the latest response\n const parser =\n index !== undefined && index !== -1\n ? extractParserFromString(parserField?.values?.[index] ?? 'mixed')\n : undefined;\n return parser ?? 'mixed';\n });\n\n const parser = extractParserFromArray([...parsers, parserForThisField]);\n\n let fieldExpressionToAdd = '';\n let structuredMetadataToAdd = '';\n\n if (parserForThisField === 'structuredMetadata') {\n structuredMetadataToAdd = `| ${optionValue}!=\"\"`;\n // Structured metadata\n } else {\n fieldExpressionToAdd = `| ${optionValue}!=\"\"`;\n }\n\n // is option structured metadata\n const options: LogsQueryOptions = {\n structuredMetadataToAdd,\n fieldExpressionToAdd,\n parser: parser,\n fieldType: optionType,\n };\n\n return buildFieldsQuery(optionValue, options);\n}\n\n// copied from /grafana/grafana/public/app/plugins/datasource/loki/datasource.ts:1204\nexport function lokiRegularEscape(value: T) {\n if (typeof value === 'string') {\n return value.replace(/'/g, \"\\\\\\\\'\");\n }\n return value;\n}\n","import { DetectedLabel } from './fields';\nimport {\n ALL_VARIABLE_VALUE,\n isAdHocFilterValueUserInput,\n LEVEL_VARIABLE_VALUE,\n stripAdHocFilterUserInputPrefix,\n} from './variables';\nimport { VariableValueOption } from '@grafana/scenes';\n\n// We want to show labels with cardinality 1 at the end of the list because they are less useful\n// And then we want to sort by cardinality - from lowest to highest\nexport function sortLabelsByCardinality(a: DetectedLabel, b: DetectedLabel) {\n if (a.cardinality === 1) {\n return 1;\n }\n if (b.cardinality === 1) {\n return -1;\n }\n return a.cardinality - b.cardinality;\n}\n\n// Creates label options by taking all labels and if LEVEL_VARIABLE_VALUE is not in the list, it is added at the beginning.\n// It also adds 'All' option at the beginning\nexport function getLabelOptions(labels: string[]) {\n const options = [...labels];\n if (!labels.includes(LEVEL_VARIABLE_VALUE)) {\n options.unshift(LEVEL_VARIABLE_VALUE);\n }\n\n const labelOptions: VariableValueOption[] = options.map((label) => ({\n label,\n value: String(label),\n }));\n\n return [{ label: 'All', value: ALL_VARIABLE_VALUE }, ...labelOptions];\n}\nexport const LEVEL_INDEX_NAME = 'level';\nexport const FIELDS_TO_REMOVE = ['level_extracted', LEVEL_VARIABLE_VALUE, LEVEL_INDEX_NAME];\n\nexport const LABELS_TO_REMOVE = ['__aggregated_metric__', '__stream_shard__'];\nexport function getFieldOptions(labels: string[]) {\n const options = [...labels];\n const labelOptions: VariableValueOption[] = options.map((label) => ({\n label,\n value: String(label),\n }));\n\n return [{ label: 'All', value: ALL_VARIABLE_VALUE }, ...labelOptions];\n}\n\n// Since \"meta\" is not saved in the URL state, it's ephemeral and can only be used for wip keys, but we can differentiate fields from metadata if the value is not encoded (and therefore different then the label)\nexport function isFilterMetadata(filter: { value: string; valueLabels?: string[] }) {\n const value = isAdHocFilterValueUserInput(filter.value)\n ? stripAdHocFilterUserInputPrefix(filter.value)\n : filter.value;\n return value === filter.valueLabels?.[0];\n}\n","import { AdHocFiltersVariable, SceneObject } from '@grafana/scenes';\nimport { LEVEL_VARIABLE_VALUE, VAR_FIELDS, VAR_LABELS, VAR_METADATA } from './variables';\nimport { getParserForField, getParserFromFieldsFilters } from './fields';\nimport { buildDataQuery } from './query';\nimport {\n getFieldsAndMetadataVariable,\n getFieldsVariable,\n getLabelsVariable,\n getLogsStreamSelector,\n getMetadataVariable,\n getValueFromFieldsFilter,\n} from './variableGetters';\nimport { addToFilters, FilterType } from '../Components/ServiceScene/Breakdowns/AddToFiltersButton';\nimport { isOperatorExclusive, isOperatorInclusive } from './operatorHelpers';\nimport { getLabelValueFromDataFrame } from './levels';\nimport { DataFrame } from '@grafana/data';\n\nexport const LABEL_BREAKDOWN_GRID_TEMPLATE_COLUMNS = 'repeat(auto-fit, minmax(400px, 1fr))';\n\nexport function buildLabelsQuery(sceneRef: SceneObject, optionValue: string, optionName: string) {\n let labelExpressionToAdd = '';\n let structuredMetadataToAdd = '';\n\n const fields = getFieldsVariable(sceneRef);\n const parser = getParserFromFieldsFilters(fields);\n\n if (optionName && optionName !== LEVEL_VARIABLE_VALUE) {\n labelExpressionToAdd = ` ,${optionName} != \"\"`;\n } else if (optionName && optionName === LEVEL_VARIABLE_VALUE) {\n structuredMetadataToAdd = ` | ${optionName} != \"\"`;\n }\n\n return buildDataQuery(\n `sum(count_over_time(${getLogsStreamSelector({\n labelExpressionToAdd,\n structuredMetadataToAdd,\n parser,\n })} [$__auto])) by (${optionValue})`,\n { legendFormat: `{{${optionValue}}}`, refId: 'LABEL_BREAKDOWN_VALUES' }\n );\n}\n\nexport function getLabelsFromSeries(series: DataFrame[]): string[] {\n const labels = series.map((dataFrame) => getLabelValueFromDataFrame(dataFrame));\n return labels.flatMap((f) => (f ? [f] : []));\n}\n\nexport function toggleFieldFromFilter(key: string, value: string, sceneRef: SceneObject): FilterType {\n const fieldsAndMetadataVariable = getFieldsAndMetadataVariable(sceneRef);\n const empty = fieldsAndMetadataVariable.state.filters.length === 0;\n const detectedFieldType = getParserForField(key, sceneRef);\n const isMetadata = detectedFieldType === 'structuredMetadata';\n\n const filterExists = fieldsAndMetadataVariable.state.filters.find((filter) => {\n if (isMetadata) {\n return isOperatorInclusive(filter.operator) && filter.value === value;\n }\n return isOperatorInclusive(filter.operator) && getValueFromFieldsFilter(filter).value === value;\n });\n\n if (empty || !filterExists) {\n addToFilters(key, value, 'include', sceneRef, isMetadata ? VAR_METADATA : VAR_FIELDS);\n return 'include';\n } else {\n addToFilters(key, value, 'toggle', sceneRef, isMetadata ? VAR_METADATA : VAR_FIELDS);\n return 'toggle';\n }\n}\n\nexport function toggleLabelFromFilter(key: string, value: string, sceneRef: SceneObject): FilterType {\n const labelsVariable = getLabelsVariable(sceneRef);\n const empty = labelsVariable.state.filters.length === 0;\n const filterExists = labelsVariable.state.filters.find(\n (filter) => filter.value === value && isOperatorInclusive(filter.operator)\n );\n\n if (empty || !filterExists) {\n addToFilters(key, value, 'include', sceneRef, VAR_LABELS);\n return 'include';\n } else {\n addToFilters(key, value, 'toggle', sceneRef, VAR_LABELS);\n return 'toggle';\n }\n}\n\nexport function getVisibleLabels(key: string, allLabels: string[], sceneRef: SceneObject) {\n const labelsVariable = getLabelsVariable(sceneRef);\n return getVisibleFilters(key, allLabels, labelsVariable);\n}\n\nexport function getVisibleFields(key: string, allLabels: string[], sceneRef: SceneObject) {\n const fieldsVariable = getFieldsVariable(sceneRef);\n return getVisibleFilters(key, allLabels, fieldsVariable);\n}\n\nexport function getVisibleMetadata(key: string, allLabels: string[], sceneRef: SceneObject) {\n const metadataVariable = getMetadataVariable(sceneRef);\n return getVisibleFilters(key, allLabels, metadataVariable);\n}\n\nexport function getVisibleFilters(key: string, allLabels: string[], variable: AdHocFiltersVariable) {\n const inclusiveFilters = variable.state.filters\n .filter((filter) => filter.key === key && isOperatorInclusive(filter.operator))\n .map((filter) => (variable.state.name === VAR_FIELDS ? getValueFromFieldsFilter(filter).value : filter.value));\n const exclusiveLabels = variable.state.filters\n .filter((filter) => filter.key === key && isOperatorExclusive(filter.operator))\n .map((filter) => (variable.state.name === VAR_FIELDS ? getValueFromFieldsFilter(filter).value : filter.value));\n\n return allLabels.filter((label) => {\n if (exclusiveLabels.includes(label)) {\n return false;\n }\n return inclusiveFilters.length === 0 || inclusiveFilters.includes(label);\n });\n}\n","import { DataFrame } from '@grafana/data';\nimport { SeriesVisibilityChangeMode } from '@grafana/ui';\nimport { LEVEL_VARIABLE_VALUE, VAR_LEVELS } from './variables';\nimport { SceneObject } from '@grafana/scenes';\nimport { addToFilters, FilterType } from 'Components/ServiceScene/Breakdowns/AddToFiltersButton';\nimport { getLevelsVariable } from './variableGetters';\n\nimport { isOperatorExclusive, isOperatorInclusive } from './operatorHelpers';\n\n/**\n * Given a set of `visibleLevels` in a panel, it returns a list of the new visible levels\n * after applying the visibility change in `mode`.\n */\nexport function toggleLevelVisibility(\n level: string,\n visibleLevels: string[] | undefined,\n mode: SeriesVisibilityChangeMode,\n allLevels: string[]\n) {\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const levels = visibleLevels ?? [];\n if (levels.length === 1 && levels.includes(level)) {\n return [];\n }\n return [level];\n }\n /**\n * When the behavior is `AppendToSelection` and the filter is empty, we initialize it\n * with all levels because the user is excluding this level in their action.\n */\n let levels = !visibleLevels?.length ? allLevels : visibleLevels;\n if (levels.includes(level)) {\n return levels.filter((existingLevel) => existingLevel !== level);\n }\n\n return [...levels, level];\n}\n\nexport function getLevelLabelsFromSeries(series: DataFrame[]) {\n return series.map((dataFrame) => getLabelValueFromDataFrame(dataFrame) ?? 'logs');\n}\n\nexport function getLabelValueFromDataFrame(frame: DataFrame) {\n const labels = frame.fields[1]?.labels;\n\n if (!labels) {\n return null;\n }\n\n const keys = Object.keys(labels);\n if (keys.length === 0) {\n return null;\n }\n\n return labels[keys[0]];\n}\n\n/*\n * From the current state of the levels filter, return the level names that\n * the user wants to see.\n */\nexport function getVisibleLevels(allLevels: string[], sceneRef: SceneObject) {\n const levelsFilter = getLevelsVariable(sceneRef);\n const wantedLevels = levelsFilter.state.filters\n .filter((filter) => isOperatorInclusive(filter.operator))\n .map((filter) => filter.value.split('|').map(normalizeLevelName))\n .join('|');\n const unwantedLevels = levelsFilter.state.filters\n .filter((filter) => isOperatorExclusive(filter.operator))\n .map((filter) => filter.value.split('|').map(normalizeLevelName))\n .join('|');\n return allLevels.filter((level) => {\n if (unwantedLevels.includes(level)) {\n return false;\n }\n return wantedLevels.length === 0 || wantedLevels.includes(level);\n });\n}\n\nfunction normalizeLevelName(level: string) {\n if (level === '\"\"') {\n return 'logs';\n }\n return level;\n}\n\n/**\n * Toggle a level from the filter state.\n * If the filter is empty, it's added.\n * If the filter exists but it's different, it's replaced.\n * If the filter exists, it's removed.\n */\nexport function toggleLevelFromFilter(level: string, sceneRef: SceneObject): FilterType {\n const levelFilter = getLevelsVariable(sceneRef);\n const empty = levelFilter.state.filters.length === 0;\n const filterExists = levelFilter.state.filters.find(\n (filter) => filter.value === level && isOperatorInclusive(filter.operator)\n );\n\n if (level === 'logs') {\n level = '\"\"';\n }\n\n if (empty || !filterExists) {\n addToFilters(LEVEL_VARIABLE_VALUE, level, 'include', sceneRef, VAR_LEVELS);\n return 'include';\n } else {\n addToFilters(LEVEL_VARIABLE_VALUE, level, 'toggle', sceneRef, VAR_LEVELS);\n return 'toggle';\n }\n}\n","import {\n arrayToDataFrame,\n DataFrame,\n DataFrameType,\n DataTopic,\n Field,\n FieldCache,\n FieldType,\n FieldWithIndex,\n Labels,\n} from '@grafana/data';\n\n// these are like Labels, but their values can be\n// arbitrary structures, not just strings\nexport type LogFrameLabels = Record;\n\n// the attributes-access is a little awkward, but it's necessary\n// because there are multiple,very different dataFrame-representations.\nexport type LogsFrame = {\n timeField: FieldWithIndex;\n bodyField: FieldWithIndex;\n timeNanosecondField: FieldWithIndex | null;\n severityField: FieldWithIndex | null;\n idField: FieldWithIndex | null;\n getLogFrameLabels: () => LogFrameLabels[] | null; // may be slow, so we only do it when asked for it explicitly\n getLogFrameLabelsAsLabels: () => Labels[] | null; // temporarily exists to make the labels=>attributes migration simpler\n getLabelFieldName: () => string | null;\n extraFields: FieldWithIndex[];\n raw: DataFrame;\n};\n\nfunction getField(cache: FieldCache, name: string, fieldType: FieldType): FieldWithIndex | undefined {\n const field = cache.getFieldByName(name);\n if (field === undefined) {\n return undefined;\n }\n\n return field.type === fieldType ? field : undefined;\n}\n\nexport const DATAPLANE_TIMESTAMP_NAME = 'timestamp';\nexport const DATAPLANE_BODY_NAME = 'body';\nexport const DATAPLANE_SEVERITY_NAME = 'severity';\nexport const DATAPLANE_ID_NAME = 'id';\nexport const DATAPLANE_LABELS_NAME = 'labels';\n\nexport function logFrameLabelsToLabels(logFrameLabels: LogFrameLabels): Labels {\n const result: Labels = {};\n\n Object.entries(logFrameLabels).forEach(([k, v]) => {\n result[k] = typeof v === 'string' ? v : JSON.stringify(v);\n });\n\n return result;\n}\n\nexport function parseLogsFrame(frame: DataFrame): LogsFrame | null {\n if (frame.meta?.type === DataFrameType.LogLines) {\n return parseDataplaneLogsFrame(frame);\n } else {\n return parseLegacyLogsFrame(frame);\n }\n}\n\nexport function parseDataplaneLogsFrame(frame: DataFrame): LogsFrame | null {\n const cache = new FieldCache(frame);\n\n const timestampField = getField(cache, DATAPLANE_TIMESTAMP_NAME, FieldType.time);\n const bodyField = getField(cache, DATAPLANE_BODY_NAME, FieldType.string);\n\n // these two are mandatory\n if (timestampField === undefined || bodyField === undefined) {\n return null;\n }\n\n const severityField = getField(cache, DATAPLANE_SEVERITY_NAME, FieldType.string) ?? null;\n const idField = getField(cache, DATAPLANE_ID_NAME, FieldType.string) ?? null;\n const labelsField = getField(cache, DATAPLANE_LABELS_NAME, FieldType.other) ?? null;\n\n const labels = labelsField === null ? null : labelsField.values;\n\n const extraFields = cache.fields.filter(\n (_, i) =>\n i !== timestampField.index &&\n i !== bodyField.index &&\n i !== severityField?.index &&\n i !== idField?.index &&\n i !== labelsField?.index\n );\n\n return {\n raw: frame,\n timeField: timestampField,\n bodyField,\n severityField,\n idField,\n getLogFrameLabels: () => labels,\n timeNanosecondField: null,\n getLogFrameLabelsAsLabels: () => (labels !== null ? labels.map(logFrameLabelsToLabels) : null),\n getLabelFieldName: () => (labelsField !== null ? labelsField.name : null),\n extraFields,\n };\n}\n\n// Copied from https://github.com/grafana/grafana/blob/main/public/app/features/logs/legacyLogsFrame.ts\nexport function parseLegacyLogsFrame(frame: DataFrame): LogsFrame | null {\n const cache = new FieldCache(frame);\n const timeField = cache.getFirstFieldOfType(FieldType.time);\n const bodyField = cache.getFirstFieldOfType(FieldType.string);\n\n // these two are mandatory\n if (timeField === undefined || bodyField === undefined) {\n return null;\n }\n\n const timeNanosecondField = cache.getFieldByName('tsNs') ?? null;\n const severityField = cache.getFieldByName('level') ?? null;\n const idField = cache.getFieldByName('id') ?? null;\n\n // extracting the labels is done very differently for old-loki-style and simple-style\n // dataframes, so it's a little awkward to handle it,\n // we both need to on-demand extract the labels, and also get teh labelsField,\n // but only if the labelsField is used.\n const [labelsField, getL] = makeLabelsGetter(cache, bodyField, frame);\n\n const extraFields = cache.fields.filter(\n (_, i) =>\n i !== timeField.index &&\n i !== bodyField.index &&\n i !== timeNanosecondField?.index &&\n i !== severityField?.index &&\n i !== idField?.index &&\n i !== labelsField?.index\n );\n\n return {\n timeField,\n bodyField,\n timeNanosecondField,\n severityField,\n idField,\n getLogFrameLabels: getL,\n getLogFrameLabelsAsLabels: getL,\n getLabelFieldName: () => labelsField?.name ?? null,\n extraFields,\n raw: frame,\n };\n}\n\n// if the frame has \"labels\" field with type \"other\", adjust the behavior.\n// we also have to return the labels-field (if we used it),\n// to be able to remove it from the unused-fields, later.\nfunction makeLabelsGetter(\n cache: FieldCache,\n lineField: Field,\n frame: DataFrame\n): [FieldWithIndex | null, () => Labels[] | null] {\n // If we have labels field with type \"other\", use that\n const labelsField = cache.getFieldByName('labels');\n if (labelsField !== undefined && labelsField.type === FieldType.other) {\n const values = labelsField.values.map(logFrameLabelsToLabels);\n return [labelsField, () => values];\n } else {\n // Otherwise we use the labels on the line-field, and make an array with it\n return [null, () => makeLabelsArray(lineField, frame.length)];\n }\n}\n\n// take the labels from the line-field, and \"stretch\" it into an array\n// with the length of the frame (so there are the same labels for every row)\nfunction makeLabelsArray(lineField: Field, length: number): Labels[] | null {\n const lineLabels = lineField.labels;\n if (lineLabels !== undefined) {\n const result = new Array(length);\n result.fill(lineLabels);\n return result;\n } else {\n return null;\n }\n}\n\nexport function getTimeName(logsFrame?: LogsFrame) {\n return logsFrame?.timeField.name ?? DATAPLANE_TIMESTAMP_NAME;\n}\n\nexport function getBodyName(logsFrame?: LogsFrame | null): string {\n return logsFrame?.bodyField.name ?? DATAPLANE_BODY_NAME;\n}\n\nexport function getIdName(logsFrame?: LogsFrame): string {\n return logsFrame?.idField?.name ?? DATAPLANE_ID_NAME;\n}\n\nexport function getSeriesVisibleRange(series: DataFrame[]) {\n let start = 0;\n let end = 0;\n\n const timeField = series[0]?.fields.find((field) => field.type === FieldType.time);\n if (timeField) {\n const values = [...timeField.values].sort();\n const oldestFirst = values[0] < values[values.length - 1];\n start = oldestFirst ? values[0] : values[values.length - 1];\n end = oldestFirst ? values[values.length - 1] : values[0];\n }\n return { start, end };\n}\n\nexport const VISIBLE_RANGE_NAME = 'Visible range';\nexport function getVisibleRangeFrame(start: number, end: number) {\n const frame = arrayToDataFrame([\n {\n time: start,\n timeEnd: end,\n isRegion: true,\n text: 'Range from oldest to newest logs in display',\n color: 'rgba(58, 113, 255, 0.3)',\n },\n ]);\n frame.name = VISIBLE_RANGE_NAME;\n frame.meta = {\n dataTopic: DataTopic.Annotations,\n };\n\n return frame;\n}\n\nexport function isEmptyLogsResult(series: DataFrame[]) {\n return series.length === 0 || series[0].fields[0].values.length === 0;\n}\n","import { ServiceSceneCustomState } from '../Components/ServiceScene/ServiceScene';\n\nlet metadataService: MetadataService;\n\nexport function initializeMetadataService(): void {\n if (!metadataService) {\n metadataService = new MetadataService();\n }\n}\n\n/**\n * Singleton class for sharing state across drilldown routes with common parent scene\n */\nexport class MetadataService {\n private serviceSceneState: ServiceSceneCustomState | undefined = undefined;\n public getServiceSceneState() {\n return this.serviceSceneState;\n }\n\n public setPatternsCount(count: number) {\n if (!this.serviceSceneState) {\n this.serviceSceneState = {};\n }\n\n this.serviceSceneState.patternsCount = count;\n }\n\n public setLabelsCount(count: number) {\n if (!this.serviceSceneState) {\n this.serviceSceneState = {};\n }\n\n this.serviceSceneState.labelsCount = count;\n }\n\n public setFieldsCount(count: number) {\n if (!this.serviceSceneState) {\n this.serviceSceneState = {};\n }\n\n this.serviceSceneState.fieldsCount = count;\n }\n\n public setServiceSceneState(state: ServiceSceneCustomState) {\n this.serviceSceneState = {\n patternsCount: state.patternsCount,\n labelsCount: state.labelsCount,\n fieldsCount: state.fieldsCount,\n loading: state.loading,\n logsCount: state.logsCount,\n totalLogsCount: state.totalLogsCount,\n };\n }\n}\n\nexport function getMetadataService(): MetadataService {\n return metadataService;\n}\n","import { ServiceScene } from '../Components/ServiceScene/ServiceScene';\nimport { IndexScene } from '../Components/IndexScene/IndexScene';\nimport { ALL_VARIABLE_VALUE } from './variables';\nimport { getMetadataService } from './metadata';\nimport { locationService } from '@grafana/runtime';\nimport { buildServicesUrl, DRILLDOWN_URL_KEYS, PageSlugs, ROUTES, ValueSlugs } from './routing';\nimport { sceneGraph } from '@grafana/scenes';\nimport { UrlQueryMap, urlUtil } from '@grafana/data';\nimport { replaceSlash } from './extensions/links';\nimport { prefixRoute } from './plugin';\n\nlet previousRoute: string | undefined = undefined;\n\nfunction buildValueBreakdownUrl(label: string, newPath: ValueSlugs, labelValue: string, labelName = 'service') {\n if (label === ALL_VARIABLE_VALUE && newPath === ValueSlugs.label) {\n return prefixRoute(`${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${PageSlugs.labels}`);\n } else if (label === ALL_VARIABLE_VALUE && newPath === ValueSlugs.field) {\n return prefixRoute(`${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${PageSlugs.fields}`);\n } else {\n return prefixRoute(\n `${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${newPath}/${replaceSlash(label)}`\n );\n }\n}\n\nexport function buildDrilldownPageUrl(path: PageSlugs | string, extraQueryParams?: UrlQueryMap): string {\n return urlUtil.renderUrl(path, buildDrilldownPageRoute(extraQueryParams));\n}\n\nexport function buildDrilldownPageRoute(extraQueryParams?: UrlQueryMap): UrlQueryMap {\n return {\n ...Object.entries(urlUtil.getUrlSearchParams()).reduce((acc, [key, value]) => {\n if (DRILLDOWN_URL_KEYS.includes(key)) {\n acc[key] = value;\n }\n\n return acc;\n }, {}),\n ...extraQueryParams,\n };\n}\n\nexport function getValueBreakdownLink(newPath: ValueSlugs, label: string, serviceScene: ServiceScene) {\n const indexScene = sceneGraph.getAncestor(serviceScene, IndexScene);\n const urlLabelName = indexScene.state.routeMatch?.params.labelName;\n const urlLabelValue = indexScene.state.routeMatch?.params.labelValue;\n\n if (urlLabelName && urlLabelValue) {\n let urlPath = buildValueBreakdownUrl(label, newPath, urlLabelValue, urlLabelName);\n const fullUrl = buildDrilldownPageUrl(urlPath);\n\n // If we're going to navigate, we need to share the state between this instantiation of the service scene\n if (serviceScene) {\n const metadataService = getMetadataService();\n metadataService.setServiceSceneState(serviceScene.state);\n }\n\n return fullUrl;\n }\n\n return '';\n}\n\n/**\n * Navigate to value breakdown url\n * @param newPath\n * @param label\n * @param serviceScene\n */\nexport function navigateToValueBreakdown(newPath: ValueSlugs, label: string, serviceScene: ServiceScene) {\n const link = getValueBreakdownLink(newPath, label, serviceScene);\n if (link) {\n pushUrlHandler(link);\n }\n}\n\n/**\n * The case for initial navigation from the service selection to the service index is a special case, as we don't yet have a serviceScene constructed to pull the selected service.\n * This function will route users to the initial (logs) page from the service selection view, which will populate the service scene state with the selected service string.\n * @param labelName\n * @param labelValue\n */\nexport function getDrillDownIndexLink(labelName: string, labelValue: string, labelFilters?: UrlQueryMap) {\n const breakdownUrl = buildDrilldownPageUrl(ROUTES.logs(labelValue, labelName), labelFilters);\n return breakdownUrl;\n}\n\nexport function getDrillDownTabLink(path: PageSlugs, serviceScene: ServiceScene, extraQueryParams?: UrlQueryMap) {\n const indexScene = sceneGraph.getAncestor(serviceScene, IndexScene);\n const urlLabelValue = indexScene.state.routeMatch?.params.labelValue;\n const urlLabelName = indexScene.state.routeMatch?.params.labelName;\n\n if (urlLabelValue) {\n const fullUrl = prefixRoute(`${PageSlugs.explore}/${urlLabelName}/${replaceSlash(urlLabelValue)}/${path}`);\n return buildDrilldownPageUrl(fullUrl, extraQueryParams);\n }\n return '';\n}\n\n/**\n * Navigates to the drilldown page specified by the path slug\n *\n * @param path\n * @param serviceScene\n * @param extraQueryParams\n */\nexport function navigateToDrilldownPage(path: PageSlugs, serviceScene: ServiceScene, extraQueryParams?: UrlQueryMap) {\n const drilldownLink = getDrillDownTabLink(path, serviceScene, extraQueryParams);\n\n if (drilldownLink) {\n // If we're going to navigate, we need to share the state between this instantiation of the service scene\n if (serviceScene) {\n const metadataService = getMetadataService();\n metadataService.setServiceSceneState(serviceScene.state);\n }\n\n pushUrlHandler(drilldownLink);\n return;\n }\n}\n\nexport function pushUrlHandler(newUrl: string) {\n previousRoute = newUrl;\n locationService.push(newUrl);\n}\n\nexport function addCurrentUrlToHistory() {\n // Add the current url to browser history before the state is changed so the user can revert their change.\n const location = locationService.getLocation();\n locationService.push(location.pathname + location.search);\n}\n\n/**\n * Navigate to the services selection url\n */\nexport function navigateToIndex() {\n const location = locationService.getLocation();\n const serviceUrl = buildServicesUrl(ROUTES.explore());\n const currentUrl = location.pathname + location.search;\n const search = locationService.getSearch();\n\n if (serviceUrl === currentUrl || currentUrl.includes(serviceUrl)) {\n return;\n }\n\n if (!search.get('var-filters')) {\n // If we don't have filters, we don't want to keep this url in browser history since this is fired AFTER the url props are made invalid, push the previous route and replace it\n if (previousRoute) {\n locationService.replace(previousRoute);\n }\n locationService.push(serviceUrl);\n } else {\n pushUrlHandler(serviceUrl);\n }\n}\n","import { QueryRunnerState, sceneGraph, SceneQueryRunner } from '@grafana/scenes';\n\nexport class LogsSceneQueryRunner extends SceneQueryRunner {\n constructor(initialState: QueryRunnerState) {\n super(initialState);\n }\n\n public runQueries() {\n const timeRange = sceneGraph.getTimeRange(this);\n\n // We don't want to subscribe to time range changes, or we'll get duplicate queries\n // this.subscribeToTimeRangeChanges(timeRange);\n\n // @todo can we make runWithTimeRange protected? (https://github.com/grafana/scenes/pull/866)\n // Hack to call private method\n this['runWithTimeRangeAndScopes'](timeRange);\n }\n}\n","import {\n DataFrame,\n FieldColorModeId,\n FieldConfig,\n FieldMatcherID,\n FieldType,\n getFieldDisplayName,\n} from '@grafana/data';\nimport {\n FieldConfigBuilder,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n PanelBuilders,\n QueryRunnerState,\n SceneDataProvider,\n SceneDataTransformer,\n SceneObject,\n SceneQueryRunner,\n VizPanel,\n} from '@grafana/scenes';\nimport { map, Observable } from 'rxjs';\nimport { HideSeriesConfig, LogsSortOrder } from '@grafana/schema';\nimport { WRAPPED_LOKI_DS_UID } from './datasource';\nimport { LogsSceneQueryRunner } from './LogsSceneQueryRunner';\nimport { DrawStyle, StackingMode } from '@grafana/ui';\nimport { getLevelLabelsFromSeries, getVisibleLevels } from './levels';\nimport { LokiQuery, LokiQueryDirection } from './lokiQuery';\nimport { LOGS_COUNT_QUERY_REFID, LOGS_PANEL_QUERY_REFID } from '../Components/ServiceScene/ServiceScene';\nimport { getLogsPanelSortOrderFromStore, getLogsPanelSortOrderFromURL } from 'Components/ServiceScene/LogOptionsScene';\nimport { getLabelsFromSeries, getVisibleFields, getVisibleLabels, getVisibleMetadata } from './labels';\nimport { getParserForField } from './fields';\n\nconst UNKNOWN_LEVEL_LOGS = 'logs';\nexport const INFO_LEVEL_FIELD_NAME_REGEX = /^info$/i;\nexport const DEBUG_LEVEL_FIELD_NAME_REGEX = /^debug$/i;\nexport const WARNING_LEVEL_FIELD_NAME_REGEX = /^(warn|warning)$/i;\nexport const ERROR_LEVEL_FIELD_NAME_REGEX = /^error$/i;\nexport const CRITICAL_LEVEL_FIELD_NAME_REGEX = /^(crit|critical|fatal)$/i;\nexport const UNKNOWN_LEVEL_FIELD_NAME_REGEX = /^(logs|unknown)$/i;\n\nexport function setLevelColorOverrides(overrides: FieldConfigOverridesBuilder) {\n overrides.matchFieldsWithNameByRegex(INFO_LEVEL_FIELD_NAME_REGEX.source).overrideColor({\n mode: 'fixed',\n fixedColor: 'semi-dark-green',\n });\n overrides.matchFieldsWithNameByRegex(DEBUG_LEVEL_FIELD_NAME_REGEX.source).overrideColor({\n mode: 'fixed',\n fixedColor: 'semi-dark-blue',\n });\n overrides.matchFieldsWithNameByRegex(WARNING_LEVEL_FIELD_NAME_REGEX.source).overrideColor({\n mode: 'fixed',\n fixedColor: 'semi-dark-orange',\n });\n overrides.matchFieldsWithNameByRegex(ERROR_LEVEL_FIELD_NAME_REGEX.source).overrideColor({\n mode: 'fixed',\n fixedColor: 'semi-dark-red',\n });\n overrides.matchFieldsWithNameByRegex(CRITICAL_LEVEL_FIELD_NAME_REGEX.source).overrideColor({\n mode: 'fixed',\n fixedColor: '#705da0',\n });\n overrides.matchFieldsWithNameByRegex(UNKNOWN_LEVEL_FIELD_NAME_REGEX.source).overrideColor({\n mode: 'fixed',\n fixedColor: 'darkgray',\n });\n}\n\nexport function setLogsVolumeFieldConfigs(\n builder: ReturnType | ReturnType\n) {\n return builder\n .setCustomFieldConfig('stacking', { mode: StackingMode.Normal })\n .setCustomFieldConfig('fillOpacity', 100)\n .setCustomFieldConfig('lineWidth', 0)\n .setCustomFieldConfig('pointSize', 0)\n .setCustomFieldConfig('axisSoftMin', 0)\n .setCustomFieldConfig('drawStyle', DrawStyle.Bars)\n .setOverrides(setLevelColorOverrides);\n}\n\nexport function setValueSummaryFieldConfigs(\n builder: ReturnType | ReturnType\n) {\n return builder\n .setCustomFieldConfig('stacking', { mode: StackingMode.Normal })\n .setCustomFieldConfig('fillOpacity', 100)\n .setCustomFieldConfig('lineWidth', 0)\n .setCustomFieldConfig('pointSize', 0)\n .setCustomFieldConfig('drawStyle', DrawStyle.Bars);\n}\n\ninterface TimeSeriesFieldConfig extends FieldConfig {\n hideFrom: HideSeriesConfig;\n}\n\nexport function setLabelSeriesOverrides(labels: string[], overrideConfig: FieldConfigOverridesBuilder) {\n overrideConfig\n .match({\n id: FieldMatcherID.byNames,\n options: {\n mode: 'exclude',\n names: labels,\n prefix: 'All except:',\n readOnly: true,\n },\n })\n .overrideCustomFieldConfig('hideFrom', {\n legend: false,\n tooltip: false,\n viz: true,\n });\n\n // Setting __systemRef to hideSeriesFrom, allows the override to be changed by interacting with the viz\n const overrides = overrideConfig.build();\n // @ts-expect-error\n overrides[overrides.length - 1].__systemRef = 'hideSeriesFrom';\n}\n\n/**\n * Sets labels series visibility in the panel\n */\nexport function syncLevelsVisibleSeries(panel: VizPanel, series: DataFrame[], sceneRef: SceneObject) {\n const focusedLevels = getVisibleLevels(getLevelLabelsFromSeries(series), sceneRef);\n const config = setLogsVolumeFieldConfigs(FieldConfigBuilders.timeseries()).setOverrides(\n setLabelSeriesOverrides.bind(null, focusedLevels)\n );\n if (config instanceof FieldConfigBuilder) {\n panel.onFieldConfigChange(config.build(), true);\n }\n}\n\n/**\n * @todo unit test\n * Set levels series visibility in the panel\n */\nexport function syncLabelsValueSummaryVisibleSeries(\n key: string,\n panel: VizPanel,\n series: DataFrame[],\n sceneRef: SceneObject\n) {\n const allLabels = getLabelsFromSeries(series);\n const focusedLabels = getVisibleLabels(key, allLabels, sceneRef);\n\n const config = setValueSummaryFieldConfigs(FieldConfigBuilders.timeseries());\n if (focusedLabels.length) {\n config.setOverrides(setLabelSeriesOverrides.bind(null, focusedLabels));\n }\n if (config instanceof FieldConfigBuilder) {\n panel.onFieldConfigChange(config.build(), true);\n }\n}\n\n/**\n * Set fields series visibility in the panel\n */\nexport function syncFieldsValueSummaryVisibleSeries(\n key: string,\n panel: VizPanel,\n series: DataFrame[],\n sceneRef: SceneObject\n) {\n const allLabels = getLabelsFromSeries(series);\n const detectedFieldType = getParserForField(key, sceneRef);\n\n const focusedLabels =\n detectedFieldType === 'structuredMetadata'\n ? getVisibleMetadata(key, allLabels, sceneRef)\n : getVisibleFields(key, allLabels, sceneRef);\n\n const config = setValueSummaryFieldConfigs(FieldConfigBuilders.timeseries());\n\n if (focusedLabels.length) {\n config.setOverrides(setLabelSeriesOverrides.bind(null, focusedLabels));\n }\n if (config instanceof FieldConfigBuilder) {\n panel.onFieldConfigChange(config.build(), true);\n }\n}\n\nfunction setColorByDisplayNameTransformation() {\n return (source: Observable) => {\n return source.pipe(\n map((data: DataFrame[]) => {\n return data.map((frame, frameIndex) => {\n return {\n ...frame,\n fields: frame.fields.map((f, fieldIndex) => {\n // Time fields do not have color config\n if (f.type === FieldType.time) {\n return f;\n }\n const displayName = getFieldDisplayName(f, frame, data);\n return {\n ...f,\n config: {\n ...f.config,\n displayName,\n color: {\n mode: FieldColorModeId.PaletteClassicByName,\n },\n },\n };\n }),\n };\n });\n })\n );\n };\n}\n\nexport function sortLevelTransformation() {\n return (source: Observable) => {\n return source.pipe(\n map((data: DataFrame[]) => {\n return data\n .map((d) => {\n if (d.fields.length < 2) {\n return d;\n }\n if (!d.fields[1].config.displayNameFromDS) {\n d.fields[1].config.displayNameFromDS = UNKNOWN_LEVEL_LOGS;\n }\n return d;\n })\n .sort((a, b) => {\n if (a.fields.length < 2 || b.fields.length < 2) {\n return 0;\n }\n const aName: string | undefined = a.fields[1].config.displayNameFromDS;\n const aVal = aName?.match(CRITICAL_LEVEL_FIELD_NAME_REGEX)\n ? 5\n : aName?.match(ERROR_LEVEL_FIELD_NAME_REGEX)\n ? 4\n : aName?.match(WARNING_LEVEL_FIELD_NAME_REGEX)\n ? 3\n : aName?.match(DEBUG_LEVEL_FIELD_NAME_REGEX)\n ? 2\n : aName?.match(INFO_LEVEL_FIELD_NAME_REGEX)\n ? 2\n : 1;\n const bName: string | undefined = b.fields[1].config.displayNameFromDS;\n const bVal = bName?.match(CRITICAL_LEVEL_FIELD_NAME_REGEX)\n ? 5\n : bName?.match(ERROR_LEVEL_FIELD_NAME_REGEX)\n ? 4\n : bName?.match(WARNING_LEVEL_FIELD_NAME_REGEX)\n ? 3\n : bName?.match(DEBUG_LEVEL_FIELD_NAME_REGEX)\n ? 2\n : bName?.match(INFO_LEVEL_FIELD_NAME_REGEX)\n ? 2\n : 1;\n\n return aVal - bVal;\n });\n })\n );\n };\n}\n\nexport function getResourceQueryRunner(queries: LokiQuery[]) {\n return new LogsSceneQueryRunner({\n datasource: { uid: WRAPPED_LOKI_DS_UID },\n queries: queries,\n });\n}\n\nexport function getQueryRunner(queries: LokiQuery[], queryRunnerOptions?: Partial) {\n // if there's a legendFormat related to any `level` like label, we want to\n // sort the output equally. That's purposefully not `LEVEL_VARIABLE_VALUE`,\n // such that the `detected_level` graph looks the same as a graph for the\n // `level` label.\n\n const hasLevel = queries.find((query) => query.legendFormat?.toLowerCase().includes('level'));\n const isLogPanelQuery = queries.find(\n (query) => query.refId === LOGS_PANEL_QUERY_REFID || query.refId === LOGS_COUNT_QUERY_REFID\n );\n\n if (hasLevel) {\n return new SceneDataTransformer({\n $data: getSceneQueryRunner({\n datasource: { uid: WRAPPED_LOKI_DS_UID },\n queries: queries,\n ...queryRunnerOptions,\n }),\n transformations: [sortLevelTransformation],\n });\n }\n\n if (!isLogPanelQuery) {\n return new SceneDataTransformer({\n $data: getSceneQueryRunner({\n datasource: { uid: WRAPPED_LOKI_DS_UID },\n queries: queries,\n ...queryRunnerOptions,\n }),\n transformations: [setColorByDisplayNameTransformation],\n });\n } else {\n queries = queries.map((query) => ({\n ...query,\n get direction() {\n const sortOrder = getLogsPanelSortOrderFromURL() || getLogsPanelSortOrderFromStore();\n return sortOrder === LogsSortOrder.Descending ? LokiQueryDirection.Backward : LokiQueryDirection.Forward;\n },\n }));\n }\n\n return getSceneQueryRunner({\n datasource: { uid: WRAPPED_LOKI_DS_UID },\n queries: queries,\n ...queryRunnerOptions,\n });\n}\n\nexport function getSceneQueryRunner(queryRunnerOptions?: Partial) {\n return new SceneQueryRunner({\n datasource: { uid: WRAPPED_LOKI_DS_UID },\n queries: [],\n ...queryRunnerOptions,\n });\n}\n\nexport function getQueryRunnerFromProvider(provider: SceneDataProvider): SceneQueryRunner {\n if (provider instanceof SceneQueryRunner) {\n return provider;\n }\n\n if (provider.state.$data instanceof SceneQueryRunner) {\n return provider.state.$data;\n }\n\n throw new Error('SceneDataProvider is missing SceneQueryRunner');\n}\n","import pluginJson from '../plugin.json';\n\n// jest tests struggle with import order when importing from the plugin.json, moving methods that use the plugin_id to its own file makes it simpler to import when mocking\nexport const PLUGIN_ID = pluginJson.id;\nexport const PLUGIN_BASE_URL = `/a/${PLUGIN_ID}`;\n\n// Prefixes the route with the base URL of the plugin\nexport function prefixRoute(route: string): string {\n return `${PLUGIN_BASE_URL}/${route}`;\n}\n","import { AdHocVariableFilter, SelectableValue } from '@grafana/data';\nimport {\n addAdHocFilterUserInputPrefix,\n AdHocFiltersWithLabelsAndMeta,\n FieldValue,\n VAR_DATASOURCE_EXPR,\n} from './variables';\nimport { LokiQuery } from './lokiQuery';\nimport { SceneDataQueryResourceRequest, SceneDataQueryResourceRequestOptions } from './datasourceTypes';\nimport { PLUGIN_ID } from './plugin';\nimport { AdHocFilterWithLabels, sceneUtils } from '@grafana/scenes';\nimport { LineFilterCaseSensitive, LineFilterOp } from './filterTypes';\nimport { sortLineFilters } from '../Components/IndexScene/LineFilterVariablesScene';\nimport { ExpressionBuilder } from './ExpressionBuilder';\n\n/**\n * Builds the resource query\n * @param expr string to be interpolated and executed in the resource request\n * @param resource\n * @param queryParamsOverrides\n * @param primaryLabel\n */\nexport const buildResourceQuery = (\n expr: string,\n resource: SceneDataQueryResourceRequestOptions,\n queryParamsOverrides?: Partial,\n primaryLabel?: string\n): LokiQuery & SceneDataQueryResourceRequest & { primaryLabel?: string } => {\n return {\n ...defaultQueryParams,\n resource,\n refId: resource,\n ...queryParamsOverrides,\n datasource: { uid: VAR_DATASOURCE_EXPR },\n expr,\n primaryLabel,\n };\n};\n/**\n * Builds a loki data query\n * @param expr\n * @param queryParamsOverrides\n * @returns LokiQuery\n */\nexport const buildDataQuery = (expr: string, queryParamsOverrides?: Partial): LokiQuery => {\n return {\n ...defaultQueryParams,\n ...queryParamsOverrides,\n expr,\n };\n};\n\nconst defaultQueryParams = {\n refId: 'A',\n queryType: 'range',\n editorMode: 'code',\n supportingQueryType: PLUGIN_ID,\n};\n\nexport const buildVolumeQuery = (\n expr: string,\n resource: 'volume' | 'patterns' | 'detected_labels' | 'detected_fields' | 'labels',\n primaryLabel: string,\n queryParamsOverrides?: Record\n): LokiQuery & SceneDataQueryResourceRequest => {\n return buildResourceQuery(expr, resource, { ...queryParamsOverrides }, primaryLabel);\n};\n\nexport function renderLogQLLabelFilters(filters: AdHocFilterWithLabels[], ignoreKeys?: string[]) {\n const filtersTransformer = new ExpressionBuilder(filters);\n return filtersTransformer.getLabelsExpr({ ignoreKeys });\n}\n\nexport function onAddCustomAdHocValue(item: SelectableValue): {\n value: string | undefined;\n valueLabels: string[];\n} {\n if (item.value) {\n return {\n value: addAdHocFilterUserInputPrefix(item.value),\n valueLabels: [item.label ?? item.value],\n };\n }\n\n return {\n value: item.value,\n valueLabels: [item.label ?? item.value ?? ''],\n };\n}\n\nexport function onAddCustomFieldValue(\n item: SelectableValue & { isCustom?: boolean },\n filter: AdHocFiltersWithLabelsAndMeta\n): { value: string | undefined; valueLabels: string[] } {\n const field: FieldValue = {\n value: item.value ?? '',\n parser: filter?.meta?.parser ?? 'mixed',\n };\n\n // metadata is not encoded\n if (field.parser === 'structuredMetadata') {\n return {\n value: addAdHocFilterUserInputPrefix(field.value),\n valueLabels: [item.label ?? field.value],\n };\n }\n\n return {\n value: addAdHocFilterUserInputPrefix(JSON.stringify(field)),\n valueLabels: [item.label ?? field.value],\n };\n}\n\nexport function renderLevelsFilter(filters: AdHocVariableFilter[], ignoreKeys?: string[]) {\n const filterTransformer = new ExpressionBuilder(filters);\n return filterTransformer.getLevelsExpr({ ignoreKeys });\n}\n\nexport function renderLogQLMetadataFilters(filters: AdHocVariableFilter[], ignoreKeys?: string[]) {\n const filterTransformer = new ExpressionBuilder(filters);\n return filterTransformer.getMetadataExpr({ ignoreKeys });\n}\n\nexport function renderLogQLFieldFilters(filters: AdHocVariableFilter[], ignoreKeys?: string[]) {\n const filterTransformer = new ExpressionBuilder(filters);\n return filterTransformer.getFieldsExpr({ ignoreKeys });\n}\n\nexport function escapeDoubleQuotedLineFilter(filter: AdHocFilterWithLabels) {\n // Is not regex\n if (filter.operator === LineFilterOp.match || filter.operator === LineFilterOp.negativeMatch) {\n if (filter.key === LineFilterCaseSensitive.caseInsensitive) {\n return sceneUtils.escapeLabelValueInRegexSelector(filter.value ?? '');\n } else {\n return sceneUtils.escapeLabelValueInExactSelector(filter.value ?? '');\n }\n } else {\n return sceneUtils.escapeLabelValueInExactSelector(filter.value ?? '');\n }\n}\n\n/**\n * Builds line filter as a double-quoted LogQL string\n * Expects pre-escaped values\n */\nfunction buildLogQlLineFilter(filter: AdHocFilterWithLabels, value: string) {\n // Change operator if needed and insert caseInsensitive flag\n if (filter.key === LineFilterCaseSensitive.caseInsensitive) {\n if (filter.operator === LineFilterOp.negativeRegex || filter.operator === LineFilterOp.negativeMatch) {\n return `${LineFilterOp.negativeRegex} \"(?i)${value}\"`;\n }\n return `${LineFilterOp.regex} \"(?i)${value}\"`;\n }\n\n return `${filter.operator} \"${value}\"`;\n}\n\n/**\n * Converts line filter ad-hoc filters to LogQL\n *\n * the filter key is LineFilterCaseSensitive\n * the filter operator is LineFilterOp\n * the value is the user input\n */\nexport function renderLogQLLineFilter(filters: AdHocFilterWithLabels[]) {\n sortLineFilters(filters);\n return filters\n .map((filter) => {\n if (!filter.value) {\n return '';\n }\n\n const value = escapeDoubleQuotedLineFilter(filter);\n return buildLogQlLineFilter(filter, value);\n })\n .join(' ');\n}\nexport function wrapWildcardSearch(input: string) {\n if (input === '.+') {\n return input;\n } else if (input.substring(0, 6) !== '(?i).*') {\n return `(?i).*${input}.*`;\n }\n\n return input;\n}\n\nexport function unwrapWildcardSearch(input: string) {\n if (input.substring(0, 6) === '(?i).*' && input.slice(-2) === '.*') {\n return input.slice(6).slice(0, -2);\n }\n\n return input;\n}\n\nexport function sanitizeStreamSelector(expression: string) {\n return expression.replace(/\\s*,\\s*}/, '}');\n}\n\n// default line limit; each data source can define it's own line limit too\nexport const LINE_LIMIT = 1000;\n","import { UrlQueryMap, urlUtil } from '@grafana/data';\nimport {\n SERVICE_NAME,\n SERVICE_UI_LABEL,\n VAR_DATASOURCE,\n VAR_FIELD_GROUP_BY,\n VAR_FIELDS,\n VAR_LABEL_GROUP_BY,\n VAR_LABELS,\n VAR_LEVELS,\n VAR_LINE_FILTER,\n VAR_LINE_FILTERS,\n VAR_METADATA,\n VAR_PATTERNS,\n} from './variables';\nimport { locationService } from '@grafana/runtime';\nimport { RouteMatch, RouteProps } from '../Components/Pages';\nimport { replaceSlash } from './extensions/links';\nimport { SceneObject } from '@grafana/scenes';\nimport { getLabelsVariable } from './variableGetters';\nimport { logger } from './logger';\nimport { PLUGIN_BASE_URL, prefixRoute } from './plugin';\n\nexport enum PageSlugs {\n explore = 'explore',\n logs = 'logs',\n labels = 'labels',\n patterns = 'patterns',\n fields = 'fields',\n}\nexport enum ValueSlugs {\n field = 'field',\n label = 'label',\n}\n\nexport type ParentDrilldownSlugs =\n | PageSlugs.explore\n | PageSlugs.fields\n | PageSlugs.logs\n | PageSlugs.labels\n | PageSlugs.patterns;\nexport type ChildDrilldownSlugs = ValueSlugs.field | ValueSlugs.label;\n\nexport const ROUTES = {\n explore: () => prefixRoute(PageSlugs.explore),\n logs: (labelValue: string, labelName = 'service') =>\n prefixRoute(`${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${PageSlugs.logs}`),\n fields: (labelValue: string, labelName = 'service') =>\n prefixRoute(`${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${PageSlugs.fields}`),\n patterns: (labelValue: string, labelName = 'service') =>\n prefixRoute(`${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${PageSlugs.patterns}`),\n labels: (labelValue: string, labelName = 'service') =>\n prefixRoute(`${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${PageSlugs.labels}`),\n};\n\nexport const SUB_ROUTES = {\n label: (labelValue: string, labelName = 'service', breakdownLabelName: string) =>\n prefixRoute(\n `${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${ValueSlugs.label}/${breakdownLabelName}`\n ),\n field: (labelValue: string, labelName = 'service', breakdownLabelName: string) =>\n prefixRoute(\n `${PageSlugs.explore}/${labelName}/${replaceSlash(labelValue)}/${ValueSlugs.field}/${breakdownLabelName}`\n ),\n};\n\nexport const ROUTE_DEFINITIONS: Record = {\n explore: `${PageSlugs.explore}/*`,\n logs: `:labelName/:labelValue/${PageSlugs.logs}`,\n fields: `:labelName/:labelValue/${PageSlugs.fields}`,\n patterns: `:labelName/:labelValue/${PageSlugs.patterns}`,\n labels: `:labelName/:labelValue/${PageSlugs.labels}`,\n};\n\nexport const CHILD_ROUTE_DEFINITIONS: Record = {\n field: `:labelName/:labelValue/${ValueSlugs.field}/:breakdownLabel`,\n label: `:labelName/:labelValue/${ValueSlugs.label}/:breakdownLabel`,\n};\n\nexport const EXPLORATIONS_ROUTE = `${PLUGIN_BASE_URL}/${PageSlugs.explore}`;\n\n// For redirect back to service, we just want to keep datasource, and timerange\nexport const SERVICE_URL_KEYS = ['from', 'to', `var-${VAR_DATASOURCE}`, `var-${VAR_LABELS}`];\n//@todo why patterns and var-patterns?\nexport const DRILLDOWN_URL_KEYS = [\n 'from',\n 'to',\n 'mode',\n 'urlColumns',\n 'visualizationType',\n 'selectedLine',\n 'displayedFields',\n 'panelState',\n VAR_PATTERNS,\n `var-${VAR_PATTERNS}`,\n `var-${VAR_DATASOURCE}`,\n `var-${VAR_LABELS}`,\n `var-${VAR_FIELDS}`,\n `var-${VAR_LEVELS}`,\n `var-${VAR_FIELD_GROUP_BY}`,\n `var-${VAR_LABEL_GROUP_BY}`,\n `var-${VAR_DATASOURCE}`,\n `var-${VAR_LINE_FILTER}`,\n `var-${VAR_METADATA}`,\n `var-${VAR_LINE_FILTERS}`,\n];\n\nexport function getDrilldownSlug() {\n const location = locationService.getLocation();\n const slug = location.pathname.slice(location.pathname.lastIndexOf('/') + 1, location.pathname.length);\n return slug as PageSlugs;\n}\n\n/**\n * The \"primary\" label, is the replacement for the service_name paradigm\n * It must be an indexed label with an include filter\n * Note: Will return the label as it exists in the url, so \"service_name\" will be returned as \"service\", we'll need to adjust for this case if we want to support URLs from before this change\n */\nexport function getPrimaryLabelFromUrl(): RouteProps {\n const location = locationService.getLocation();\n const startOfUrl = '/a/grafana-lokiexplore-app/explore';\n const endOfUrl = location.pathname.slice(location.pathname.indexOf(startOfUrl) + startOfUrl.length + 1);\n const routeParams = endOfUrl.split('/');\n\n let labelName = routeParams[0];\n const labelValue = routeParams[1];\n const breakdownLabel = routeParams[3];\n // Keep urls the same\n if (labelName === SERVICE_NAME) {\n labelName = SERVICE_UI_LABEL;\n }\n return { labelName, labelValue, breakdownLabel };\n}\n\nexport function getDrilldownValueSlug() {\n const location = locationService.getLocation();\n const locationArray = location.pathname.split('/');\n const slug = locationArray[locationArray.length - 2];\n return slug as ValueSlugs;\n}\n\nexport function buildServicesUrl(path: string, extraQueryParams?: UrlQueryMap): string {\n return urlUtil.renderUrl(path, buildServicesRoute(extraQueryParams));\n}\nexport function extractValuesFromRoute(routeMatch: RouteMatch): RouteProps {\n return {\n labelName: routeMatch.params.labelName,\n labelValue: routeMatch.params.labelValue,\n breakdownLabel: routeMatch.params.breakdownLabel,\n };\n}\n\nexport function buildServicesRoute(extraQueryParams?: UrlQueryMap): UrlQueryMap {\n return {\n ...Object.entries(urlUtil.getUrlSearchParams()).reduce((acc, [key, value]) => {\n if (SERVICE_URL_KEYS.includes(key)) {\n acc[key] = value;\n }\n\n return acc;\n }, {}),\n ...extraQueryParams,\n };\n}\n\n/**\n * Compare slugs against variable filters and log discrepancies\n * These don't cause errors or render empty UIs, but shouldn't be possible when routing within the app\n * If we see these logged in production it indicates we're navigating users incorrectly\n * @param sceneRef\n */\nexport function checkPrimaryLabel(sceneRef: SceneObject) {\n const labelsVariable = getLabelsVariable(sceneRef);\n let { labelName, labelValue } = getPrimaryLabelFromUrl();\n if (labelName === SERVICE_UI_LABEL) {\n labelName = SERVICE_NAME;\n }\n const primaryLabel = labelsVariable.state.filters.find((filter) => filter.key === labelName);\n if (!primaryLabel) {\n const location = locationService.getLocation();\n\n logger.info('invalid primary label name in url', {\n labelName,\n url: `${location.pathname}${location.search}`,\n });\n }\n\n const primaryLabelValue = labelsVariable.state.filters.find((filter) => replaceSlash(filter.value) === labelValue);\n if (!primaryLabelValue) {\n const location = locationService.getLocation();\n\n logger.info('invalid primary label value in url', {\n labelValue,\n url: `${location.pathname}${location.search}`,\n });\n }\n}\n","import { urlUtil } from '@grafana/data';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport { sceneGraph, SceneObject, SceneObjectUrlValues, SceneQueryRunner, SceneTimePicker } from '@grafana/scenes';\nimport {\n LOG_STREAM_SELECTOR_EXPR,\n PRETTY_LOG_STREAM_SELECTOR_EXPR,\n VAR_DATASOURCE_EXPR,\n VAR_LABELS_EXPR,\n} from './variables';\nimport { EXPLORATIONS_ROUTE } from './routing';\nimport { IndexScene } from 'Components/IndexScene/IndexScene';\nimport { logger } from './logger';\nimport { LokiDatasource } from './lokiQuery';\n\nexport function getExplorationFor(model: SceneObject): IndexScene {\n return sceneGraph.getAncestor(model, IndexScene);\n}\n\nexport function getUrlForValues(values: SceneObjectUrlValues) {\n return urlUtil.renderUrl(EXPLORATIONS_ROUTE, values);\n}\n\nexport function getDataSource(sceneObject: SceneObject) {\n return sceneGraph.interpolate(sceneObject, VAR_DATASOURCE_EXPR);\n}\n\nexport function getQueryExpr(exploration: SceneObject) {\n return sceneGraph.interpolate(exploration, LOG_STREAM_SELECTOR_EXPR).replace(/\\s+/g, ' ');\n}\n\nexport function getPrettyQueryExpr(exploration: SceneObject) {\n return sceneGraph.interpolate(exploration, PRETTY_LOG_STREAM_SELECTOR_EXPR).replace(/\\s+/g, ' ');\n}\n\nexport function getPatternExpr(exploration: SceneObject) {\n return sceneGraph.interpolate(exploration, VAR_LABELS_EXPR).replace(/\\s+/g, ' ');\n}\n\nexport function getColorByIndex(index: number) {\n const visTheme = config.theme2.visualization;\n return visTheme.getColorByName(visTheme.palette[index % 8]);\n}\n\nexport async function getLokiDatasource(sceneObject: SceneObject) {\n const ds = (await getDataSourceSrv().get(VAR_DATASOURCE_EXPR, { __sceneObject: { value: sceneObject } })) as\n | LokiDatasource\n | undefined;\n return ds;\n}\n\nexport function isDefined(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport function getQueryRunnerFromChildren(sceneObject: SceneObject) {\n return sceneGraph.findDescendents(sceneObject, SceneQueryRunner);\n}\n\ninterface SceneType extends Function {\n new (...args: never[]): T;\n}\n\nexport function findObjectOfType(\n scene: SceneObject,\n check: (obj: SceneObject) => boolean,\n returnType: SceneType\n) {\n const obj = sceneGraph.findObject(scene, check);\n if (obj instanceof returnType) {\n return obj;\n } else if (obj !== null) {\n logger.warn(`invalid return type: ${returnType.toString()}`);\n }\n\n return null;\n}\n\nexport function getTimePicker(scene: IndexScene) {\n return scene.state.controls?.find((s) => s instanceof SceneTimePicker) as SceneTimePicker;\n}\n","import uFuzzy from '@leeoniya/ufuzzy';\nimport { debounce as debounceLodash } from 'lodash';\n\nconst uf = new uFuzzy({\n intraMode: 1,\n intraIns: 1,\n intraSub: 1,\n intraTrn: 1,\n intraDel: 1,\n});\n\nexport function fuzzySearch(haystack: string[], query: string, callback: (data: string[][]) => void) {\n const [idxs, info, order] = uf.search(haystack, query, 0, 1e5);\n\n let haystackOrder: string[] = [];\n let matchesSet: Set = new Set();\n if (idxs && order) {\n /**\n * get the fuzzy matches for highlighting\n * @param part\n * @param matched\n */\n const mark = (part: string, matched: boolean) => {\n if (matched) {\n matchesSet.add(part);\n }\n };\n\n // Iterate to create the order of needles(queries) and the matches\n for (let i = 0; i < order.length; i++) {\n let infoIdx = order[i];\n\n /** Evaluate the match, get the matches for highlighting */\n uFuzzy.highlight(haystack[info.idx[infoIdx]], info.ranges[infoIdx], mark);\n /** Get the order */\n haystackOrder.push(haystack[info.idx[infoIdx]]);\n }\n\n callback([haystackOrder, [...matchesSet]]);\n } else if (!query) {\n callback([]);\n }\n}\n\nexport const debouncedFuzzySearch = debounceLodash(fuzzySearch, 300);\n","import { ChangepointDetector } from '@bsull/augurs/changepoint';\nimport { OutlierDetector, OutlierOutput } from '@bsull/augurs/outlier';\nimport { DataFrame, doStandardCalcs, fieldReducers, FieldType, outerJoinDataFrames, ReducerID } from '@grafana/data';\nimport { getLabelValueFromDataFrame } from './levels';\nimport { memoize } from 'lodash';\nimport { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from './analytics';\nimport { logger } from './logger';\n\nexport const DEFAULT_SORT_BY = 'changepoint';\n\nexport const sortSeries = memoize(\n (series: DataFrame[], sortBy: string, direction: string) => {\n if (sortBy === 'alphabetical') {\n return sortSeriesByName(series, direction);\n }\n\n if (sortBy === 'outliers') {\n initOutlierDetector(series);\n }\n\n const reducer = (dataFrame: DataFrame) => {\n // ML & Wasm sorting options\n try {\n if (sortBy === 'changepoint') {\n return calculateDataFrameChangepoints(dataFrame);\n } else if (sortBy === 'outliers') {\n return calculateOutlierValue(series, dataFrame);\n }\n } catch (e) {\n logger.error(e, { msg: 'failed to sort' });\n\n // ML sorting panicked, fallback to stdDev\n sortBy = ReducerID.stdDev;\n }\n const fieldReducer = fieldReducers.get(sortBy);\n const value =\n fieldReducer.reduce?.(dataFrame.fields[1], true, true) ?? doStandardCalcs(dataFrame.fields[1], true, true);\n return value[sortBy] ?? 0;\n };\n\n const seriesCalcs = series.map((dataFrame) => ({\n value: reducer(dataFrame),\n dataFrame: dataFrame,\n }));\n\n seriesCalcs.sort((a, b) => {\n if (a.value !== undefined && b.value !== undefined) {\n return b.value - a.value;\n }\n return 0;\n });\n\n if (direction === 'asc') {\n seriesCalcs.reverse();\n }\n\n return seriesCalcs.map(({ dataFrame }) => dataFrame);\n },\n (series: DataFrame[], sortBy: string, direction: string) => {\n const firstTimestamp = series.length > 0 ? series[0].fields[0].values[0] : 0;\n const lastTimestamp =\n series.length > 0\n ? series[series.length - 1].fields[0].values[series[series.length - 1].fields[0].values.length - 1]\n : 0;\n const firstValue = series.length > 0 ? getLabelValueFromDataFrame(series[0]) : '';\n const lastValue = series.length > 0 ? getLabelValueFromDataFrame(series[series.length - 1]) : '';\n // This still isn't good enough, if the dataframe returns the same number of fields, with the same start and end values, we'll fail to update the UI\n const allSeriesKey = series.map(\n (frame) =>\n frame.length +\n '_' +\n frame.fields.map((field) => field.name + '_' + field.values[0] + '_' + field.values[field.values.length - 1])\n );\n return `${firstValue}_${lastValue}_${firstTimestamp}_${lastTimestamp}_${series.length}_${allSeriesKey}_${sortBy}_${direction}`;\n }\n);\n\nexport const calculateDataFrameChangepoints = (data: DataFrame) => {\n if (!wasmSupported()) {\n throw new Error('WASM not supported, fall back to stdDev');\n }\n\n const fields = data.fields.filter((f) => f.type === FieldType.number);\n\n const dataPoints = fields[0].values.length;\n\n let samplingStep = Math.floor(dataPoints / 100) || 1;\n if (samplingStep > 1) {\n // Avoiding \"big\" steps for more accuracy\n samplingStep = Math.ceil(samplingStep / 2);\n }\n\n const sample = fields[0].values.filter((_, i) => i % samplingStep === 0);\n\n const values = new Float64Array(sample);\n const points = ChangepointDetector.defaultArgpcp().detectChangepoints(values);\n\n return points.indices.length;\n};\n\nexport const sortSeriesByName = (series: DataFrame[], direction: string) => {\n const sortedSeries = [...series];\n sortedSeries.sort((a, b) => {\n const valueA = getLabelValueFromDataFrame(a);\n const valueB = getLabelValueFromDataFrame(b);\n if (!valueA || !valueB) {\n return 0;\n }\n return valueA?.localeCompare(valueB) ?? 0;\n });\n if (direction === 'desc') {\n sortedSeries.reverse();\n }\n return sortedSeries;\n};\n\nconst initOutlierDetector = (series: DataFrame[]) => {\n if (!wasmSupported()) {\n return;\n }\n\n // Combine all frames into one by joining on time.\n const joined = outerJoinDataFrames({ frames: series });\n if (!joined) {\n return;\n }\n\n // Get number fields: these are our series.\n const joinedSeries = joined.fields.filter((f) => f.type === FieldType.number);\n const points = joinedSeries.flatMap((series) => new Float64Array(series.values));\n\n try {\n const detector = OutlierDetector.dbscan({ sensitivity: 0.4 }).preprocess(points);\n outliers = detector.detect();\n } catch (e) {\n logger.error(e, { msg: 'initOutlierDetector: OutlierDetector error' });\n }\n};\n\nlet outliers: OutlierOutput | undefined = undefined;\n\nexport const calculateOutlierValue = (series: DataFrame[], data: DataFrame): number => {\n if (!wasmSupported()) {\n throw new Error('WASM not supported, fall back to stdDev');\n }\n if (!outliers) {\n throw new Error('Initialize outlier detector first');\n }\n\n const index = series.indexOf(data);\n if (outliers.seriesResults[index].isOutlier) {\n return outliers.seriesResults[index].outlierIntervals.length;\n }\n\n return 0;\n};\n\nexport const wasmSupported = () => {\n const support = typeof WebAssembly === 'object';\n\n if (!support) {\n reportAppInteraction(USER_EVENTS_PAGES.service_details, USER_EVENTS_ACTIONS.service_details.wasm_not_supported);\n }\n\n return support;\n};\n","import pluginJson from '../plugin.json';\nimport { SortBy, SortDirection } from '../Components/ServiceScene/Breakdowns/SortByScene';\nimport { SceneObject, VariableValue } from '@grafana/scenes';\nimport { getDataSourceName, getServiceName } from './variableGetters';\nimport { logger } from './logger';\nimport { SERVICE_NAME } from './variables';\nimport { Options } from '@grafana/schema/dist/esm/raw/composable/logs/panelcfg/x/LogsPanelCfg_types.gen';\nimport { unknownToStrings } from './narrowing';\nimport { AvgFieldPanelType, CollapsablePanelText } from '../Components/Panels/PanelMenu';\n\nconst FAVORITE_PRIMARY_LABEL_VALUES_LOCALSTORAGE_KEY = `${pluginJson.id}.services.favorite`;\nconst FAVORITE_PRIMARY_LABEL_NAME_LOCALSTORAGE_KEY = `${pluginJson.id}.primarylabels.tabs.favorite`;\nconst DS_LOCALSTORAGE_KEY = `${pluginJson.id}.datasource`;\nconst SCENE_LAYOUT_LOCALSTORAGE_KEY = `${pluginJson.id}.scene.layout`;\n\n// This should be a string, but we'll accept anything and return an empty array if it's not a string\nexport function getFavoriteLabelValuesFromStorage(dsKey: string | unknown, labelName: string): string[] {\n if (!dsKey || typeof dsKey !== 'string') {\n return [];\n }\n const key = createPrimaryLabelLocalStorageKey(dsKey, labelName);\n let labelValues: string[] = [];\n try {\n labelValues = unknownToStrings(JSON.parse(localStorage.getItem(key) || '[]'));\n } catch (e) {\n logger.error(e, { msg: 'Error parsing favorite services from local storage' });\n }\n\n if (!Array.isArray(labelValues)) {\n labelValues = [];\n }\n return labelValues;\n}\n\n// This should be a string, but we'll accept anything and return early\nexport function addToFavoriteLabelValueInStorage(dsKey: string | unknown, labelName: string, labelValue: string) {\n if (!dsKey || typeof dsKey !== 'string') {\n return;\n }\n const key = createPrimaryLabelLocalStorageKey(dsKey, labelName);\n let services: string[] = [];\n try {\n services = unknownToStrings(JSON.parse(localStorage.getItem(key) || '[]'));\n } catch (e) {\n logger.error(e, { msg: 'Error parsing favorite services from local storage' });\n }\n\n if (!Array.isArray(services)) {\n services = [];\n }\n\n // We want to put this service at the top of the list and remove any duplicates\n const servicesToStore = services.filter((service: string) => service !== labelValue);\n servicesToStore.unshift(labelValue);\n\n localStorage.setItem(key, JSON.stringify(servicesToStore));\n}\n\nexport function removeFromFavoritesInStorage(dsKey: VariableValue, labelName: string, labelValue: string) {\n if (!dsKey || !labelName || !labelValue || typeof dsKey !== 'string') {\n return;\n }\n const key = createPrimaryLabelLocalStorageKey(dsKey, labelName);\n let services: string[] = [];\n try {\n services = unknownToStrings(JSON.parse(localStorage.getItem(key) || '[]'));\n } catch (e) {\n logger.error(e, { msg: 'Error parsing favorite services from local storage' });\n }\n\n if (!Array.isArray(services)) {\n services = [];\n }\n const servicesToStore = services.filter((service: string) => service !== labelValue);\n localStorage.setItem(key, JSON.stringify(servicesToStore));\n}\n\nexport function addTabToLocalStorage(dsKey: string, labelName: string) {\n if (!dsKey || !labelName) {\n return;\n }\n\n const key = createTabsLocalStorageKey(dsKey);\n\n let services: string[] = [];\n try {\n services = unknownToStrings(JSON.parse(localStorage.getItem(key) || '[]'));\n } catch (e) {\n logger.error(e, { msg: 'Error parsing saved tabs from local storage' });\n }\n\n if (!Array.isArray(services)) {\n services = [];\n }\n\n if (services.indexOf(labelName) === -1) {\n // We want to put this service at the top of the list and remove any duplicates\n const servicesToStore = services.filter((tabName: string) => tabName !== labelName);\n servicesToStore.unshift(labelName);\n\n localStorage.setItem(key, JSON.stringify(servicesToStore));\n }\n}\n\nexport function removeTabFromLocalStorage(dsKey: string, labelName: string) {\n if (!dsKey || !labelName) {\n return;\n }\n const key = createTabsLocalStorageKey(dsKey);\n let services: string[] = [];\n try {\n services = unknownToStrings(JSON.parse(localStorage.getItem(key) || '[]'));\n } catch (e) {\n logger.error(e, { msg: 'Error parsing favorite services from local storage' });\n }\n\n if (!Array.isArray(services)) {\n services = [];\n }\n const servicesToStore = services.filter((tabName: string) => tabName !== labelName);\n localStorage.setItem(key, JSON.stringify(servicesToStore));\n}\n\nexport function getFavoriteTabsFromStorage(dsKey: string | unknown): string[] {\n if (!dsKey || typeof dsKey !== 'string') {\n return [];\n }\n const key = createTabsLocalStorageKey(dsKey);\n let tabNames: string[] = [];\n try {\n tabNames = unknownToStrings(JSON.parse(localStorage.getItem(key) || '[]'));\n } catch (e) {\n logger.error(e, { msg: 'Error parsing favorite services from local storage' });\n }\n\n if (!Array.isArray(tabNames)) {\n tabNames = [];\n }\n return tabNames;\n}\n\nfunction createPrimaryLabelLocalStorageKey(ds: string, labelName: string) {\n if (labelName === SERVICE_NAME) {\n labelName = '';\n } else {\n labelName = `_${labelName}`;\n }\n return `${FAVORITE_PRIMARY_LABEL_VALUES_LOCALSTORAGE_KEY}_${ds}${labelName}`;\n}\n\nfunction createTabsLocalStorageKey(ds: string) {\n return `${FAVORITE_PRIMARY_LABEL_NAME_LOCALSTORAGE_KEY}_${ds}`;\n}\n\nexport function getLastUsedDataSourceFromStorage(): string | undefined {\n return localStorage.getItem(DS_LOCALSTORAGE_KEY) ?? undefined;\n}\n\nexport function addLastUsedDataSourceToStorage(dsKey: string) {\n localStorage.setItem(DS_LOCALSTORAGE_KEY, dsKey);\n}\n\nconst SORT_BY_LOCALSTORAGE_KEY = `${pluginJson.id}.values.sort`;\nexport function getSortByPreference(\n target: string,\n defaultSortBy: SortBy,\n defaultDirection: SortDirection\n): { sortBy: SortBy | ''; direction: SortDirection } {\n const preference = localStorage.getItem(`${SORT_BY_LOCALSTORAGE_KEY}.${target}.by`) ?? '';\n const parts = preference.split('.');\n if (!parts[0] || !parts[1]) {\n return { sortBy: defaultSortBy, direction: defaultDirection };\n }\n const sortBy = parts[0] as SortBy;\n const direction = parts[1] as SortDirection;\n return { sortBy, direction };\n}\n\nexport function setSortByPreference(target: string, sortBy: string, direction: string) {\n // Prevent storing empty values\n if (sortBy && direction) {\n localStorage.setItem(`${SORT_BY_LOCALSTORAGE_KEY}.${target}.by`, `${sortBy}.${direction}`);\n }\n}\n\nfunction getExplorationPrefix(sceneRef: SceneObject) {\n const ds = getDataSourceName(sceneRef);\n const serviceName = getServiceName(sceneRef);\n return `${ds}.${serviceName}`;\n}\n\nexport function getDisplayedFields(sceneRef: SceneObject) {\n const PREFIX = getExplorationPrefix(sceneRef);\n const storedFields = localStorage.getItem(`${pluginJson.id}.${PREFIX}.logs.fields`);\n if (storedFields) {\n return JSON.parse(storedFields);\n }\n return [];\n}\n\nexport function setDisplayedFields(sceneRef: SceneObject, fields: string[]) {\n const PREFIX = getExplorationPrefix(sceneRef);\n localStorage.setItem(`${pluginJson.id}.${PREFIX}.logs.fields`, JSON.stringify(fields));\n}\n\n// Log panel options\nconst LOG_OPTIONS_LOCALSTORAGE_KEY = `${pluginJson.id}.logs.option`;\nexport function getLogOption(option: keyof Options, defaultValue: T) {\n const localStorageResult = localStorage.getItem(`${LOG_OPTIONS_LOCALSTORAGE_KEY}.${option}`);\n return localStorageResult ? localStorageResult : defaultValue;\n}\n\nexport function setLogOption(option: keyof Options, value: string | number | boolean) {\n let storedValue = value.toString();\n if (typeof value === 'boolean' && !value) {\n storedValue = '';\n }\n localStorage.setItem(`${LOG_OPTIONS_LOCALSTORAGE_KEY}.${option}`, storedValue);\n}\n\n// Logs volume options\nconst LOGS_VOLUME_LOCALSTORAGE_KEY = 'grafana.explore.logs.logsVolume';\nexport function setLogsVolumeOption(option: 'collapsed', value: string | undefined) {\n const key = `${LOGS_VOLUME_LOCALSTORAGE_KEY}.${option}`;\n if (value === undefined) {\n localStorage.removeItem(key);\n return;\n }\n localStorage.setItem(key, value);\n}\n\nexport function getLogsVolumeOption(option: 'collapsed') {\n return Boolean(localStorage.getItem(`${LOGS_VOLUME_LOCALSTORAGE_KEY}.${option}`));\n}\n\n// Log visualization options\nexport type LogsVisualizationType = 'logs' | 'table';\n\nconst VISUALIZATION_TYPE_LOCALSTORAGE_KEY = 'grafana.explore.logs.visualisationType';\nexport function getLogsVisualizationType(): LogsVisualizationType {\n const storedType = localStorage.getItem(VISUALIZATION_TYPE_LOCALSTORAGE_KEY) ?? '';\n switch (storedType) {\n case 'table':\n case 'logs':\n return storedType;\n default:\n return 'logs';\n }\n}\n\nexport function setLogsVisualizationType(type: string) {\n localStorage.setItem(VISUALIZATION_TYPE_LOCALSTORAGE_KEY, type);\n}\n\n// Line filter options\nconst LINE_FILTER_OPTIONS_LOCALSTORAGE_KEY = `${pluginJson.id}.linefilter.option`;\nexport function setLineFilterCase(caseSensitive: boolean) {\n let storedValue = caseSensitive.toString();\n if (!caseSensitive) {\n storedValue = '';\n }\n\n localStorage.setItem(`${LINE_FILTER_OPTIONS_LOCALSTORAGE_KEY}.caseSensitive`, storedValue);\n}\n\nexport function setLineFilterRegex(regex: boolean) {\n let storedValue = regex.toString();\n if (!regex) {\n storedValue = '';\n }\n\n localStorage.setItem(`${LINE_FILTER_OPTIONS_LOCALSTORAGE_KEY}.regex`, storedValue);\n}\n\nexport function setLineFilterExclusive(exclusive: boolean) {\n let storedValue = exclusive.toString();\n if (!exclusive) {\n storedValue = '';\n }\n\n localStorage.setItem(`${LINE_FILTER_OPTIONS_LOCALSTORAGE_KEY}.exclusive`, storedValue);\n}\n\nexport function getLineFilterCase(defaultValue: boolean): boolean {\n const storedValue = localStorage.getItem(`${LINE_FILTER_OPTIONS_LOCALSTORAGE_KEY}.caseSensitive`);\n return storedValue === 'true' ? true : defaultValue;\n}\n\nexport function getLineFilterRegex(defaultValue: boolean): boolean {\n const storedValue = localStorage.getItem(`${LINE_FILTER_OPTIONS_LOCALSTORAGE_KEY}.regex`);\n return storedValue === 'true' ? true : defaultValue;\n}\n\nexport function getLineFilterExclusive(defaultValue: boolean): boolean {\n const storedValue = localStorage.getItem(`${LINE_FILTER_OPTIONS_LOCALSTORAGE_KEY}.exclusive`);\n return storedValue === 'true' ? true : defaultValue;\n}\n\n// Panel options\nconst PANEL_OPTIONS_LOCALSTORAGE_KEY = `${pluginJson.id}.panel.option`;\nexport interface PanelOptions {\n panelType: AvgFieldPanelType;\n collapsed: CollapsablePanelText;\n}\nexport function getPanelOption(\n option: K,\n values: V[]\n): V | null {\n const result = localStorage.getItem(`${PANEL_OPTIONS_LOCALSTORAGE_KEY}.${option}`);\n if (result !== null) {\n return values.find((v) => result === v) ?? null;\n }\n\n return null;\n}\n\nexport function setPanelOption(option: K, value: V) {\n localStorage.setItem(`${PANEL_OPTIONS_LOCALSTORAGE_KEY}.${option}`, value);\n}\n\nconst EXPRESSION_BUILDER_DEBUG_LOCALSTORAGE_KEY = `${pluginJson.id}.expressionBuilder.debug`;\nexport function getExpressionBuilderDebug() {\n const value = localStorage.getItem(EXPRESSION_BUILDER_DEBUG_LOCALSTORAGE_KEY);\n return !!value;\n}\n\nconst SERVICE_SELECTION_PAGE_COUNT_KEY = `${pluginJson.id}.serviceSelection.pageCount`;\n\nexport function getServiceSelectionPageCount(): number | undefined {\n const value = localStorage.getItem(SERVICE_SELECTION_PAGE_COUNT_KEY);\n return value ? parseInt(value, 10) : undefined;\n}\nexport function setServiceSelectionPageCount(pageCount: number) {\n localStorage.setItem(SERVICE_SELECTION_PAGE_COUNT_KEY, pageCount.toString(10));\n}\n\nexport function getSceneLayout(): string | null {\n const value = localStorage.getItem(SCENE_LAYOUT_LOCALSTORAGE_KEY);\n return value;\n}\nexport function setSceneLayout(layout: string) {\n localStorage.setItem(SCENE_LAYOUT_LOCALSTORAGE_KEY, layout);\n}\n","export const testIds = {\n appConfig: {\n container: 'data-testid ac-container',\n apiKey: 'data-testid ac-api-key',\n apiUrl: 'data-testid ac-api-url',\n submit: 'data-testid ac-submit-form',\n },\n exploreServiceSearch: {\n search: 'data-testid search-services',\n },\n header: {\n refreshPicker: 'data-testid RefreshPicker run button',\n },\n variables: {\n datasource: {\n label: 'data-testid Dashboard template variables submenu Label Data source',\n },\n combobox: {},\n serviceName: {\n label: 'data-testid Dashboard template variables submenu Label Labels',\n },\n levels: {\n inputWrap: 'data-testid detected_level filter variable',\n },\n },\n breakdowns: {\n labels: {},\n fields: {},\n common: {\n sortByFunction: 'data-testid SortBy function',\n sortByDirection: 'data-testid SortBy direction',\n filterButtonGroup: 'data-testid filter-button-group',\n filterButton: 'data-testid filter-button',\n filterSelect: 'data-testid filter-select',\n filterNumericPopover: {\n removeButton: 'data-testid filter-numeric-remove',\n submitButton: 'data-testid filter-numeric-submit',\n cancelButton: 'data-testid filter-numeric-cancel',\n inputGreaterThan: 'data-testid filter-numeric-gt',\n inputGreaterThanUnit: 'data-testid filter-numeric-gtu',\n inputGreaterThanInclusive: 'data-testid filter-numeric-gte',\n\n inputLessThan: 'data-testid filter-numeric-lt',\n inputLessThanUnit: 'data-testid filter-numeric-ltu',\n inputLessThanInclusive: 'data-testid filter-numeric-lte',\n },\n },\n },\n\n index: {\n showLogsButton: 'data-testid button-filter-include',\n selectServiceButton: 'data-testid button-select-service',\n addNewLabelTab: 'data-testid Tab Add label',\n searchLabelValueInput: 'data-testid search-services-input',\n aggregatedMetricsMenu: 'data-testid aggregated-metrics-menu',\n aggregatedMetricsToggle: 'data-testid aggregated-metrics-toggle',\n header: {\n showLogsButton: 'data-testid Show logs header',\n },\n },\n\n exploreServiceDetails: {\n searchLogs: 'data-testid search-logs',\n openExplore: 'data-testid open-explore',\n tabPatterns: 'data-testid tab-patterns',\n tabLogs: 'data-testid tab-logs',\n tabFields: 'data-testid tab-fields',\n tabLabels: 'data-testid tab-labels',\n buttonRemovePattern: 'data-testid button-remove-pattern',\n buttonFilterInclude: 'data-testid button-filter-include',\n buttonFilterExclude: 'data-testid button-filter-exclude',\n },\n patterns: {\n tableWrapper: 'data-testid table-wrapper',\n buttonIncludedPattern: 'data-testid button-included-pattern',\n buttonExcludedPattern: 'data-testid button-excluded-pattern',\n },\n logsPanelHeader: {\n header: 'data-testid Panel header Logs',\n radio: 'data-testid radio-button',\n },\n table: {\n wrapper: 'data-testid table-wrapper',\n inspectLine: 'data-testid inspect',\n rawLogLine: 'data-testid raw-log-line',\n },\n};\n","import { config, locationService } from '@grafana/runtime';\nimport { logger } from './logger';\nimport { dateTime, LogRowModel, TimeRange, urlUtil } from '@grafana/data';\n\nexport const copyText = (string: string) => {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard.writeText(string);\n } else {\n const el = document.createElement('textarea');\n el.value = string;\n document.body.appendChild(el);\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n }\n};\n\nexport enum UrlParameterType {\n From = 'from',\n To = 'to',\n}\n\ntype PermalinkDataType =\n | {\n id?: string;\n row?: number;\n }\n | {\n logs: {\n id: string;\n displayedFields: string[];\n };\n };\n\nexport const generateLink = (relativeUrl: string): string => {\n return `${window.location.protocol}//${window.location.host}${config.appSubUrl}${relativeUrl}`;\n};\n\nexport const generateLogShortlink = (paramName: string, data: PermalinkDataType, timeRange: TimeRange) => {\n const location = locationService.getLocation();\n const searchParams = urlUtil.getUrlSearchParams();\n searchParams[UrlParameterType.From] = timeRange.from.toISOString();\n searchParams[UrlParameterType.To] = timeRange.to.toISOString();\n searchParams[paramName] = JSON.stringify(data);\n return generateLink(urlUtil.renderUrl(location.pathname, searchParams));\n};\n\nexport function capitalizeFirstLetter(input: string) {\n if (input.length) {\n return input?.charAt(0).toUpperCase() + input.slice(1);\n }\n\n logger.warn('invalid string argument');\n return input;\n}\n\nexport function truncateText(input: string, length: number, ellipsis: boolean) {\n return input.substring(0, length) + (ellipsis && input.length > length ? '…' : '');\n}\n\nexport function resolveRowTimeRangeForSharing(row: LogRowModel): TimeRange {\n // With infinite scrolling, we cannot rely on the time picker range, so we use a time range around the shared log line.\n const from = dateTime(row.timeEpochMs - 1);\n const to = dateTime(row.timeEpochMs + 1);\n\n const range = {\n from,\n to,\n raw: {\n from,\n to,\n },\n };\n\n return range;\n}\n","import {\n AdHocFiltersVariable,\n CustomVariable,\n DataSourceVariable,\n sceneGraph,\n SceneObject,\n SceneVariableState,\n} from '@grafana/scenes';\nimport { CustomConstantVariable } from './CustomConstantVariable';\nimport {\n AdHocFieldValue,\n FieldValue,\n isAdHocFilterValueUserInput,\n JSON_FORMAT_EXPR,\n LOGS_FORMAT_EXPR,\n LogsQueryOptions,\n MIXED_FORMAT_EXPR,\n SERVICE_NAME,\n stripAdHocFilterUserInputPrefix,\n VAR_AGGREGATED_METRICS,\n VAR_DATASOURCE,\n VAR_FIELD_GROUP_BY,\n VAR_FIELDS,\n VAR_FIELDS_AND_METADATA,\n VAR_FIELDS_EXPR,\n VAR_LABEL_GROUP_BY,\n VAR_LABELS,\n VAR_LABELS_EXPR,\n VAR_LABELS_REPLICA,\n VAR_LEVELS,\n VAR_LEVELS_EXPR,\n VAR_LINE_FILTER,\n VAR_LINE_FILTERS,\n VAR_LINE_FILTERS_EXPR,\n VAR_METADATA,\n VAR_METADATA_EXPR,\n VAR_PATTERNS,\n VAR_PATTERNS_EXPR,\n VAR_PRIMARY_LABEL,\n VAR_PRIMARY_LABEL_SEARCH,\n} from './variables';\nimport { AdHocVariableFilter } from '@grafana/data';\nimport { logger } from './logger';\nimport { narrowFieldValue, NarrowingError } from './narrowing';\nimport { isFilterMetadata } from './filters';\nimport { AdHocFilterTypes, InterpolatedFilterType } from '../Components/ServiceScene/Breakdowns/AddToFiltersButton';\n\nexport function getLogsStreamSelector(options: LogsQueryOptions) {\n const {\n labelExpressionToAdd = '',\n structuredMetadataToAdd = '',\n fieldExpressionToAdd = '',\n parser = undefined,\n } = options;\n\n switch (parser) {\n case 'structuredMetadata':\n return `{${VAR_LABELS_EXPR}${labelExpressionToAdd}} ${structuredMetadataToAdd} ${VAR_LEVELS_EXPR} ${VAR_METADATA_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_LINE_FILTERS_EXPR} ${fieldExpressionToAdd} ${VAR_FIELDS_EXPR}`;\n case 'json':\n return `{${VAR_LABELS_EXPR}${labelExpressionToAdd}} ${structuredMetadataToAdd} ${VAR_LEVELS_EXPR} ${VAR_METADATA_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_LINE_FILTERS_EXPR} ${JSON_FORMAT_EXPR} ${fieldExpressionToAdd} ${VAR_FIELDS_EXPR}`;\n case 'logfmt':\n return `{${VAR_LABELS_EXPR}${labelExpressionToAdd}} ${structuredMetadataToAdd} ${VAR_LEVELS_EXPR} ${VAR_METADATA_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_LINE_FILTERS_EXPR} ${LOGS_FORMAT_EXPR} ${fieldExpressionToAdd} ${VAR_FIELDS_EXPR}`;\n default:\n return `{${VAR_LABELS_EXPR}${labelExpressionToAdd}} ${structuredMetadataToAdd} ${VAR_LEVELS_EXPR} ${VAR_METADATA_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_LINE_FILTERS_EXPR} ${MIXED_FORMAT_EXPR} ${fieldExpressionToAdd} ${VAR_FIELDS_EXPR}`;\n }\n}\n\nexport function getPatternsVariable(scene: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_PATTERNS, scene);\n if (!(variable instanceof CustomVariable)) {\n throw new Error('VAR_PATTERNS not found');\n }\n return variable;\n}\n\nexport function getLabelsVariable(scene: SceneObject) {\n return getAdHocFiltersVariable(VAR_LABELS, scene);\n}\n\nexport function getLabelsVariableReplica(scene: SceneObject) {\n return getAdHocFiltersVariable(VAR_LABELS_REPLICA, scene);\n}\n\nexport function getMetadataVariable(scene: SceneObject) {\n return getAdHocFiltersVariable(VAR_METADATA, scene);\n}\n\n// Combined fields and metadata, editable in the UI, changes to this variable flow into FIELDS and METADATA\nexport function getFieldsAndMetadataVariable(scene: SceneObject) {\n return getAdHocFiltersVariable(VAR_FIELDS_AND_METADATA, scene);\n}\n\nexport function getFieldsVariable(scene: SceneObject) {\n return getAdHocFiltersVariable(VAR_FIELDS, scene);\n}\n\nexport function getLevelsVariable(scene: SceneObject) {\n return getAdHocFiltersVariable(VAR_LEVELS, scene);\n}\n\nexport function getLineFilterVariable(scene: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_LINE_FILTER, scene);\n if (!(variable instanceof AdHocFiltersVariable)) {\n throw new Error('VAR_LINE_FILTER not found');\n }\n return variable;\n}\n\nexport function getLabelGroupByVariable(scene: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_LABEL_GROUP_BY, scene);\n if (!(variable instanceof CustomConstantVariable)) {\n throw new Error('VAR_LABEL_GROUP_BY not found');\n }\n return variable;\n}\n\nexport function getAggregatedMetricsVariable(scene: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_AGGREGATED_METRICS, scene);\n if (!(variable instanceof CustomConstantVariable)) {\n throw new Error('SERVICE_LABEL_VAR not found');\n }\n return variable;\n}\n\nexport function getFieldGroupByVariable(scene: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_FIELD_GROUP_BY, scene);\n if (!(variable instanceof CustomConstantVariable)) {\n throw new Error('VAR_FIELD_GROUP_BY not found');\n }\n return variable;\n}\n\nexport function getDataSourceVariable(scene: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_DATASOURCE, scene);\n if (!(variable instanceof DataSourceVariable)) {\n throw new Error('VAR_DATASOURCE not found');\n }\n return variable;\n}\n\nexport function getLineFiltersVariable(scene: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_LINE_FILTERS, scene);\n if (!(variable instanceof AdHocFiltersVariable)) {\n throw new Error('VAR_LINE_FILTERS not found');\n }\n return variable;\n}\n\nexport function getAdHocFiltersVariable(variableName: AdHocFilterTypes, scene: SceneObject) {\n const variable = sceneGraph.lookupVariable(variableName, scene);\n\n if (!(variable instanceof AdHocFiltersVariable)) {\n throw new Error(`Could not get AdHocFiltersVariable ${variableName}. Variable not found.`);\n }\n return variable;\n}\n\nexport function getServiceSelectionSearchVariable(sceneRef: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_PRIMARY_LABEL_SEARCH, sceneRef);\n if (!(variable instanceof CustomConstantVariable)) {\n throw new Error('VAR_PRIMARY_LABEL_SEARCH not found');\n }\n return variable;\n}\n\nexport function clearServiceSelectionSearchVariable(sceneRef: SceneObject) {\n getServiceSelectionSearchVariable(sceneRef).setState({\n value: '.+',\n label: '',\n });\n}\n\nexport function getServiceSelectionPrimaryLabel(sceneRef: SceneObject) {\n const variable = sceneGraph.lookupVariable(VAR_PRIMARY_LABEL, sceneRef);\n if (!(variable instanceof AdHocFiltersVariable)) {\n throw new Error('VAR_PRIMARY_LABEL not found');\n }\n return variable;\n}\n\nexport function setServiceSelectionPrimaryLabelKey(key: string, sceneRef: SceneObject) {\n getServiceSelectionPrimaryLabel(sceneRef).setState({\n filters: [\n {\n // the value is replaced by the value in VAR_PRIMARY_LABEL_SEARCH if a search is active, so we just need to set the filter key (label name)\n value: '.+',\n operator: '=~',\n key: key,\n },\n ],\n });\n}\n\nexport function getUrlParamNameForVariable(variableName: string) {\n return `var-${variableName}`;\n}\n\n/**\n * Parses an adHoc filter and returns the encoded value and parser\n * @param filter\n * @param variableName - only used for debugging\n */\nexport function getValueFromFieldsFilter(\n filter: { value: string; valueLabels?: string[] },\n variableName: string = VAR_FIELDS\n): FieldValue {\n if (isFilterMetadata(filter)) {\n return {\n value: filter.value,\n parser: 'structuredMetadata',\n };\n }\n\n try {\n const encodedValue = isAdHocFilterValueUserInput(filter.value)\n ? stripAdHocFilterUserInputPrefix(filter.value)\n : filter.value;\n const fieldValue = narrowFieldValue(JSON.parse(encodedValue));\n if (fieldValue !== false) {\n return fieldValue;\n } else {\n throw new NarrowingError('getValueFromFieldsFilter: invalid filter value!');\n }\n } catch (e) {\n if (e instanceof NarrowingError) {\n logger.error(e, { msg: `getValueFromFieldsFilter: Failed to validate ${variableName}`, value: filter.value });\n } else {\n logger.error(e, { msg: `getValueFromFieldsFilter: Failed to parse ${variableName}`, value: filter.value });\n }\n\n // If the user has a URL from before 0.1.4 where detected_fields changed the format of the fields value to include the parser, fall back to mixed parser if we have a value\n if (filter.value) {\n return {\n value: filter.value,\n parser: 'mixed',\n };\n }\n throw e;\n }\n}\n\nexport function getValueFromAdHocVariableFilter(\n variableName: InterpolatedFilterType,\n filter?: AdHocVariableFilter\n): AdHocFieldValue {\n if (variableName === VAR_FIELDS && filter) {\n return getValueFromFieldsFilter(filter);\n }\n\n return {\n value: filter?.value,\n };\n}\n\nexport function getServiceName(scene: SceneObject) {\n const labelsVariable = getLabelsVariable(scene);\n return getServiceNameFromVariableState(labelsVariable.state);\n}\n\nexport function getServiceNameFromVariableState(\n adHocFiltersVariableState: SceneVariableState & { filters: AdHocVariableFilter[] }\n) {\n const serviceName = adHocFiltersVariableState.filters\n .filter((filter) => filter.key === SERVICE_NAME)\n .map((filter) => filter.value);\n\n if (!serviceName) {\n throw new Error('Service present in filters selected');\n }\n return serviceName[0];\n}\n\nexport function getDataSourceName(scene: SceneObject) {\n const dsVariable = getDataSourceVariable(scene);\n return dsVariable.getValue();\n}\n","import { AdHocFiltersVariable, sceneGraph, SceneObject, SceneVariable } from '@grafana/scenes';\nimport { CustomConstantVariable } from './CustomConstantVariable';\nimport { SERVICE_NAME, SERVICE_UI_LABEL, VAR_LABELS } from './variables';\nimport { IndexScene } from '../Components/IndexScene/IndexScene';\nimport { getPrimaryLabelFromUrl } from './routing';\nimport { FilterOp } from './filterTypes';\nimport { includeOperators, numericOperators, operators } from './operators';\nimport { isOperatorInclusive } from './operatorHelpers';\n\nexport function getVariablesThatCanBeCleared(indexScene: IndexScene) {\n const variables = sceneGraph.getVariables(indexScene);\n let variablesToClear: SceneVariable[] = [];\n\n for (const variable of variables.state.variables) {\n if (variable instanceof AdHocFiltersVariable && variable.state.filters.length) {\n variablesToClear.push(variable);\n }\n if (variable instanceof CustomConstantVariable && variable.state.value && variable.state.name !== 'logsFormat') {\n variablesToClear.push(variable);\n }\n }\n return variablesToClear;\n}\n\nexport function clearVariables(sceneRef: SceneObject) {\n // clear patterns: needs to happen first, or it won't work as patterns is split into a variable and a state, and updating the variable triggers a state update\n const indexScene = sceneGraph.getAncestor(sceneRef, IndexScene);\n indexScene.setState({\n patterns: [],\n });\n\n const variablesToClear = getVariablesThatCanBeCleared(indexScene);\n\n variablesToClear.forEach((variable) => {\n if (variable instanceof AdHocFiltersVariable && variable.state.key === 'adhoc_service_filter') {\n let { labelName } = getPrimaryLabelFromUrl();\n // getPrimaryLabelFromUrl returns the label name that exists in the URL, which is \"service\" not \"service_name\"\n if (labelName === SERVICE_UI_LABEL) {\n labelName = SERVICE_NAME;\n }\n variable.setState({\n filters: variable.state.filters.filter((filter) => filter.key === labelName),\n });\n } else if (variable instanceof AdHocFiltersVariable) {\n variable.setState({\n filters: [],\n });\n } else if (variable instanceof CustomConstantVariable) {\n variable.setState({\n value: '',\n text: '',\n });\n }\n });\n}\n\nexport const operatorFunction = function (variable: AdHocFiltersVariable) {\n const wip = variable.state._wip;\n\n // If there is already a non-regex inclusion operator for this key, don't allow exclusion\n if (wip && variable.state.filters.some((filter) => filter.key === wip.key && filter.operator === FilterOp.Equal)) {\n return includeOperators;\n }\n\n const isLabelsVar = variable.state.name === VAR_LABELS;\n const inclusiveOperatorCount = variable.state.filters.filter((filter) => isOperatorInclusive(filter.operator)).length;\n const isEditingOnlyFilter = !wip?.key && inclusiveOperatorCount === 1;\n const isAddingFirstFilter = wip?.key && inclusiveOperatorCount < 1;\n\n // Should not be able to exclude the only operator\n if (isLabelsVar && (isEditingOnlyFilter || isAddingFirstFilter)) {\n return includeOperators;\n }\n\n // Only fields or metadata can have field types?\n if (wip?.meta) {\n const meta: Record = wip.meta;\n const type = meta.type;\n\n if (type === 'float' || type === 'bytes' || type === 'duration') {\n return numericOperators;\n }\n }\n\n return operators;\n};\n"],"names":["FilterButton","props","isExcluded","isIncluded","onInclude","onExclude","onClear","titles","buttonFill","hideExclude","styles","useStyles2","getStyles","div","className","container","Button","variant","fill","size","aria-selected","includeButton","onClick","data-testid","testIds","exploreServiceDetails","buttonFilterInclude","title","include","excludeButton","exclude","buttonFilterExclude","theme","css","display","justifyContent","borderRadius","borderRight","undefined","shape","radius","default","borderLeft","GrotError","children","wrap","EmptyState","message","margin","InterceptBanner","Alert","alert","severity","onRemove","a","target","href","rel","br","flex","GiveFeedbackButton","wrapper","feedback","Icon","name","marginLeft","gap","spacing","position","top","alignSelf","color","colors","text","secondary","fontSize","typography","bodySmall","link","CustomVariableValueSelectors","SceneObjectBase","model","variablesSetState","sceneGraph","getVariables","useState","variables","state","length","filter","variable","includes","map","VariableValueSelectWrapper","key","layout","Component","PatternTag","pattern","expanded","setExpanded","onMouseLeave","Tag","getPatternPreview","tag","aria-label","buttonRemovePattern","removeButton","PREVIEW_WIDTH","sm","lg","Math","round","window","innerWidth","substringLength","substring","fontFamily","cursor","overflow","borderTopRightRadius","borderBottomRightRadius","backgroundColor","main","border","boxSizing","padding","textOverflow","paddingLeft","paddingRight","PatternControls","patterns","includePatterns","type","excludePatterns","onRemovePattern","addCurrentUrlToHistory","pat","reportAppInteraction","USER_EVENTS_PAGES","service_details","USER_EVENTS_ACTIONS","pattern_removed","includePatternsLength","excludePatternsLength","patternsContainer","Text","weight","buttonIncludedPattern","p","buttonExcludedPattern","alignItems","flexWrap","VariableLayoutScene","indexScene","getAncestor","IndexScene","controls","layoutScene","LayoutScene","lineFilterRenderer","levelsRenderer","firstRowWrapper","label","breakpoints","down","flexDirection","controlsFirstRowContainer","controlsRowContainer","stickyControlsContainer","grafanaTopBarHeight","left","background","canvas","zIndex","navbarFixed","boxShadow","shadows","z1","controlsContainer","filters","filtersWrap","width","controlsWrapper","marginTop","timeRangeDatasource","timeRange","cx","control","SceneFlexLayout","CONTROLS_VARS_DATASOURCE","CONTROLS_VARS_FIELDS_COMBINED","setState","interceptBannerStorageKey","PLUGIN_ID","onActivate","slug","getDrilldownSlug","this","LineFilterVariablesScene","LevelsVariableScene","variableLayout","PageSlugs","explore","dismiss","interceptDismissed","localStorage","setItem","constructor","super","getItem","addActivationHandler","bind","bodyContainer","flexGrow","minHeight","maxWidth","body","contentScene","logger","warn","getDetectedFieldValuesTagValuesProvider","expr","sceneRef","variableType","datasourceUnknownType","getDataSourceSrv","get","getDataSource","DataSourceWithBackend","error","Error","languageProvider","values","fetchDetectedLabelValues","options","limit","throwError","requestOptions","showErrorAlert","results","isArray","VAR_LEVELS","replace","currentFilters","valuesToRemove","forEach","value","valueLabels","isOperatorRegex","operator","split","v","push","filteredResults","meta","parser","valueDecoded","getValueFromFieldsFilter","JSON","stringify","r","msg","e","getLabelsTagValuesProvider","datasource_","datasource","getTagValues","filtersFiltered","existingFilters","oldFiltersFiltered","f","isOperatorInclusive","some","tagValuesFilterAdHocFilters","ExpressionBuilder","getJoinedLabelsFilters","getDataSourceVariable","result","FilterOp","Equal","favoriteValuesArray","getFavoriteLabelValuesFromStorage","getValue","toString","favoriteValuesSet","Set","sort","b","has","getLabelsTagKeysProvider","getTagKeys","tagKeys","filteredResult","Array","LABELS_TO_REMOVE","getFieldsKeysProvider","scopedVars","fetchDetectedFieldsFn","fetchDetectedFields","opts","queryOptions","field","LEVEL_VARIABLE_VALUE","VAR_FIELDS_AND_METADATA","parsers","group","interpolateString","interpolatedExpr","range","getDefaultTimeRange","rangeParams","getTimeRangeParams","start","end","params","query","Promise","resolve","reject","getResource","fields","console","MAP","KEYCODE_MAP","SHIFT_MAP","$","_","SPECIAL_ALIASES","option","command","return","escape","plus","mod","test","navigator","platform","REVERSE_MAP","i","characterFromEvent","event","character","String","fromCharCode","which","shiftKey","toLowerCase","isModifier","pickBestAction","modifiers","action","keyNumber","parseInt","hasOwnProperty","getReverseMap","getKeyInfo","combination","keys","keysFromString","belongsTo","element","ancestor","document","parentNode","mousetrap","el","_callbacks","_directMap","_sequenceLevels","_resetTimer","_ignoreNextKeyup","_ignoreNextKeypress","_nextExpectedAction","_globalCallbacks","_resetSequences","doNotReset","activeSequences","_getMatches","sequenceName","level","callback","matches","seq","metaKey","ctrlKey","modifiers1","modifiers2","join","deleteCombo","combo","deleteSequence","splice","_fireCallback","sequence","srcElement","HTMLElement","stopCallback","preventDefault","returnValue","stopPropagation","cancelBubble","_handleKey","callbacks","maxLevel","processedSequenceCallback","max","suffixPrefixIndex","lastIndexOf","sequencePrefix","slice","Object","entries","startsWith","ignoreThisKeypress","_handleKeyEvent","rawEvent","KeyboardEvent","repeat","keyCode","handleKey","altKey","eventModifiers","_resetSequenceTimer","clearTimeout","setTimeout","_bindSequence","_increaseSequence","nextAction","_callbackAndReset","wrappedCallback","_bindSingle","info","eventLike","callbackInfo","_bindMultiple","combinations","self","unbind","bindGlobal","unbindGlobal","trigger","reset","indexOf","composedPath","initialEventTarget","Boolean","tagName","isContentEditable","args","addKeycodes","object","addEventListener","KeybindingSet","addBinding","item","evt","onTrigger","_binds","removeAll","appEvents","getAppEvents","setupKeyboardShortcuts","scene","keybindings","vizPanelKey","panelAttentionSubscription","subscribe","SetPanelAttentionEvent","payload","panelId","withFocusedPanel","fn","vizPanel","findObject","o","isActive","VizPanel","toggleVizPanelLegend","findAllObjects","withAllPanels","url","getExploreLink","locationService","activeScene","prevScene","__grafanaSceneContext","setWindowGrafanaSceneContext","getTimeRange","publish","CopyTimeEvent","PasteTimeEvent","updateUrl","publishEvent","onRefresh","handleZoomOut","timePicker","getTimePicker","toAbsolute","handleTimeRangeShift","unsubscribe","onZoom","direction","onMoveBackward","onMoveForward","optionsWithLegend","legend","showLegend","onOptionsChange","BusEventBase","BusEventWithPayload","getCopiedTimeRange","raw","clipboard","readText","unknownRange","parse","narrowTimeRange","isError","NoLokiSplash","useTheme2","graphicContainer","SVG","src","isDark","h3","locationUtil","assureBaseUrl","height","up","marginBottom","textAlign","showLogsButtonSceneKey","stateUpdate","setVariableProviders","findByKeyAndType","ShowLogsButtonScene","hidden","drillDownLabel","ServiceSelectionScene","ServiceScene","getContentScene","routeMatch","breakdownLabel","setTagProviders","updatePatterns","getPatternsVariable","resetVariablesIfNotInUrl","getFieldsVariable","getUrlParamNameForVariable","VAR_FIELDS","getLevelsVariable","_subs","add","subscribeToState","newState","limitMaxInterval","subscribeToEvent","subscribeToPasteTimeEvent","fieldFilters","metadataFilters","getMetadataVariable","fieldsAndMetadataVariable","getFieldsAndMetadataVariable","updateFilters","subscribeToCombinedFieldsVariable","clearKeyBindings","setLabelsProviders","labelsVar","getLabelsVariable","_getOperators","operatorFunction","getTagKeysProvider","getTagValuesProvider","prevState","jsonData","plugin","interval","maxInterval","rangeUtil","intervalToSeconds","timeRangeInterval","to","diff","from","defaultRange","SceneTimeRange","DEFAULT_TIME_RANGE","AppEvents","alertWarning","attempted_duration_seconds","configured_max_interval","levelsVariable","fieldsCombinedVariable","getLevelsTagValuesProvider","getLevelsTagKeysProvider","getCombinedFieldsTagKeysProvider","getCombinedFieldsTagValuesProvider","currentKey","metadataVar","fieldVar","uninterpolatedExpression","getFieldsTagValuesExpression","otherFiltersString","renderVariableFilters","otherMetadataString","VAR_METADATA","PENDING_FIELDS_EXPR","PENDING_METADATA_EXPR","interpolate","interpolated","renderLogQLFieldFilters","renderLogQLMetadataFilters","urlParamName","location","getLocation","URLSearchParams","search","patternsVariable","patternsLine","renderPatternFilters","changeValueTo","getUrlState","updateFromUrl","getLastUsedDataSourceFromStorage","variablesScene","unsub","initialDatasourceUid","initialFilters","labelVariable","AdHocFiltersVariable","VAR_LABELS","EXPLORATION_DS","allowCustomValue","expressionBuilder","renderLogQLLabelFilters","hide","VariableHide","dontHide","onAddCustomValue","onAddCustomAdHocValue","operators","fieldsVariable","applyMode","hideVariable","metadataVariable","onAddCustomFieldValue","skipUrlSync","renderLevelsFilter","supportsMultiValueOperators","lineFiltersVariable","VAR_LINE_FILTERS","renderLogQLLineFilter","lineFilterOperators","dsVariable","DataSourceVariable","VAR_DATASOURCE","pluginId","dsValue","addLastUsedDataSourceToStorage","SceneVariableSet","CustomVariable","VAR_PATTERNS","VAR_LINE_FILTER","CustomConstantVariable","VAR_LOGS_FORMAT","MIXED_FORMAT_EXPR","getVariableSet","SceneFlexItem","disabled","SceneTimePicker","SceneRefreshPicker","config","featureToggles","exploreLogsAggregatedMetrics","ToolbarScene","isOpen","$timeRange","$variables","_urlSync","SceneObjectUrlSyncConfig","areArraysEqual","isFilterMetadata","copiedRange","newRange","convertRawToRange","sceneTimeRange","getLokiDatasource","then","ds","LoadingPlaceholder","LEVELS_VARIABLE_SCENE_KEY","onFilterChange","SceneVariableValueChangedEvent","levelsVar","selected","isLoading","visible","levelsKeys","response","skipPublish","forcePublish","filterOptions","opt","filterOpt","onChangeOptions","openSelect","onCloseMenu","syncLevelsVariable","levelsVariableScene","obj","levels","inputWrap","ControlsLabel","MultiSelect","prefix","placeholder","onChange","onOpenMenu","onFocus","menuShouldPortal","isClearable","blurInputOnSelect","closeMenuOnSelect","openMenuOnFocus","showAllSelectedWhenOpen","hideSelectedOptions","val","whiteSpace","LineFilterVariable","focus","setFocus","getLineFilterStyles","span","titleWrap","IconButton","collapseWrap","LineFilterEditor","collapseBtn","tooltip","isFilterExclusive","LineFilterOp","negativeMatch","negativeRegex","updateFilter","existingFilter","filterUpdate","debounced","updateVariableLineFilter","updateVariableDebounced","handleEnter","lineFilter","onRegexToggle","newOperator","match","regex","onToggleExclusive","onCaseSensitiveToggle","caseSensitive","LineFilterCaseSensitive","caseInsensitive","onInputChange","removeFilter","getLineFiltersVariable","otherFilters","keyLabel","search_string_in_variables_changed","searchQueryLength","containsLevel","debounce","sortLineFilters","lineFiltersWrap","lineFilterVar","exclusive","setExclusive","hasPositiveFilter","getLink","positiveFilter","find","getDrillDownIndexLink","button","LinkButton","index","header","showLogsButton","AGGREGATED_METRICS_USER_OVERRIDE_LOCALSTORAGE_KEY","pluginJson","userOverride","active","aggregatedMetrics","toggleAggregatedMetricsOverride","service_selection","aggregated_metrics_toggled","enabled","onToggleOpen","popover","primary","z3","weak","marginRight","heading","fontWeight","fontWeightMedium","paddingBottom","gridTemplateColumns","rowGap","columnGap","renderPopover","AGGREGATED_METRIC_START_DATE","toLocaleString","Switch","aggregatedMetricsToggle","Dropdown","overlay","placement","onVisibleChange","ToolbarButton","icon","aggregatedMetricsMenu","getServicesScene","EmbeddedScene","makeIndexPage","SceneAppPage","prefixRoute","PageLayoutType","Custom","preserveUrlKeys","SERVICE_URL_KEYS","routePath","getScene","drilldowns","ROUTE_DEFINITIONS","logs","getPage","parent","makeBreakdownPage","defaultRoute","labels","CHILD_ROUTE_DEFINITIONS","makeBreakdownValuePage","ValueSlugs","makeRedirectPage","urlUtil","renderUrl","PLUGIN_BASE_URL","hideFromBreadcrumbs","$behaviors","navigateToIndex","labelName","labelValue","extractValuesFromRoute","capitalizeFirstLetter","ROUTES","DRILLDOWN_URL_KEYS","getParentPage","SUB_ROUTES","onExploreLinkClick","open","getQueryExpr","trimEnd","displayedFields","getDisplayedFields","visualisationType","getLogsVisualizationType","columns","urlColumns","unknownToStrings","columnsParam","getUrlColumns","exploreState","toURLRange","queries","refId","panelsState","labelFieldName","DATAPLANE_LABELS_NAME","subUrl","appSubUrl","panes","schemaVersion","AddToInvestigationButton","getQueries","context","getContext","data","getData","queryRunner","findObjectOfType","SceneQueryRunner","frame","getFilter","q","legendFormat","getFieldConfig","panel","frames","series","fieldConfig","properties","id","existingOverride","overrides","matcher","displayNameFromDS","displayName","unshift","fieldName","uid","ctx","origin","logoPath","LokiLogo","links","usePluginLinks","extensionPointId","ExtensionPoints","MetricInvestigation","description","filterNameAndValueObj","ADD_TO_INVESTIGATION_MENU_TEXT","ADD_TO_INVESTIGATION_MENU_DIVIDER_TEXT","ADD_TO_INVESTIGATION_MENU_GROUP_TEXT","AvgFieldPanelType","CollapsablePanelText","PanelMenu","addItem","setItems","items","addInvestigationsLink","iconClassName","onExploreLinkClickTracking","shortcut","viz","VizPanelMenu","investigationsButton","investigationOptions","getLabelName","activate","panelType","collapsible","addVisualizationHeader","menu","collapsed","newCollapsableState","vizPanelFlexLayout","setValueSummaryHeight","setPanelOption","addCollapsableItem","gridItem","SceneCSSGridItem","clone","$data","headerActions","PanelBuilders","timeseries","setOverrides","setLevelColorOverrides","histogram","setMenu","setTitle","setHeaderActions","setData","build","newPanelType","fieldsAggregatedBreakdownScene","FieldsAggregatedBreakdownScene","rebuildAvgFields","onSwitchVizTypeTracking","addHistogramItem","exploreLogsVizPanelMenu","subscribeToAddToInvestigation","getQueryRunnerFromChildren","breakdownScene","FieldValuesBreakdownScene","LabelValuesBreakdownScene","queryProvider","uninterpolatedExpr","all","open_in_explore_menu_clicked","newVizType","change_viz_type","getInvestigationLink","addToInvestigation","getPluginLinkExtensions","extensions","getObservablePluginLinks","firstValueFrom","addToInvestigationButton","existingMenuItems","existingAddToExplorationLink","getPanelWrapperStyles","panelWrapper","AddFilterEvent","source","ClearFilterEvent","addAdHocFilter","addToFilters","clearFilters","getUIAdHocVariable","fieldValue","getValueFromAdHocVariableFilter","getNumericOperatorType","op","gt","gte","lt","lte","removeNumericFilter","resolveVariableTypeForField","operatorType","NotEqual","addNumericFilter","valueObject","getParserForField","addToFavorites","valueLabel","filterExists","validateVariableNameForField","variableName","getDetectedLabelsFrame","AddToFiltersButton","setFilterState","filterInSelectedFilters","isMetadata","add_to_filters_in_breakdown_clicked","filterType","filtersLength","getAdHocFiltersVariable","BreakdownSearchReset","recentFilters","BreakdownSearchScene","filterValues","LabelBreakdownScene","FieldsBreakdownScene","cacheKey","byFrameRepeater","findDescendents","ByFrameRepeater","child","filterByString","typeofBody","onValueFilterChange","clearValueFilter","SearchInput","performRepeat","newChildren","sortedSeries","sortSeries","sortBy","seriesIndex","layoutChild","getLayoutChild","unfilteredChildren","layoutSwitcher","LayoutSwitcher","singleGraphParent","VALUE_SUMMARY_PANEL_KEY","SceneDataTransformer","transformations","limitFramesByName","pipe","newFrames","getLabelValue","typeofPanel","typeofGraphParent","iterateFrames","haystack","fuzzySearch","filterFrames","filterSummaryChart","filterFn","buildNoResultsScene","clearFilter","prevData","LoadingState","Done","Streaming","SceneReactObject","reactNode","alertContainer","noResultsAlert","clearButton","minWidth","EmptyLayoutScene","emptyStateStyles","FieldSelector","setSelected","selectableOptions","InlineField","selectWrapper","Select","select","ServiceFieldSelector","selectOption","initialFilter","customOption","setCustomOption","allOptions","selectedOption","serviceSceneSelectWrapper","exploreServiceSearch","__isNew__","actionMeta","prevInputValue","wrapWildcardSearch","input","x1","Selector","getTagKey","groupByVariable","getFieldGroupByVariable","buildQuery","buildQueryRunner","onValuesDataQueryChange","runQuery","setSubscriptions","getQueryRunner","runQueriesMode","tagKey","detectedFieldsFrame","getDetectedFieldsFrame","queryString","buildFieldsQueryString","filterExpression","removeFieldLabelFromVariableInterpolation","expression","buildDataQuery","getParserForThisField","setFieldParserSubscriptions","setMetadataParserSubscriptions","getSceneQueryRunner","rebuildQuery","runQueries","queryRunners","getQueryParser","fieldsVar","setErrorState","errors","err","status","strong","traceId","optionValue","getSortByPreference","DEFAULT_SORT_BY","fieldsBreakdownScene","layouts","LabelsMenu","setShowMenuAlways","ValueSummaryPanelScene","ValuesMenu","SceneCSSGridLayout","templateColumns","FIELDS_BREAKDOWN_GRID_TEMPLATE_COLUMNS","autoRows","isLazy","getFilterBreakdownValueScene","DrawStyle","Bars","Line","getParserFromFieldsFilters","parserForFields","getParserForFields","updateChildren","newParser","getDetectedFieldsFrameFromQueryRunnerState","newNamesField","getDetectedFieldsNamesFromQueryRunnerState","newParsersField","getDetectedFieldsParsersFromQueryRunnerState","cardinalityMap","calculateCardinalityMap","newFieldsSet","updatedChildren","fieldType","getDetectedFieldType","dataTransformer","getQueryRunnerForPanel","delete","buildChildren","sortChildren","subscribeToPanel","aPanel","bPanel","aCardinality","Map","cardinality","set","serviceScene","fieldsCount","updateFieldCount","$detectedFieldsData","onDetectedFieldsChange","subscribeToFieldsVar","newParsers","oldParsers","extractParserFromArray","detectedFieldsState","childrenClones","getResultsStream","isHidden","activeLayout","getActiveGridLayouts","getPanelOption","panels","isAvgField","newChild","buildChild","ALL_VARIABLE_VALUE","SelectLabelActionScene","hideValueDrilldown","setCustomFieldConfig","mode","StackingMode","Normal","setSeriesLimit","MAX_NUMBER_OF_TIME_SERIES","l","activeLayoutChildren","activePanels","changeFieldCount","loading","$detectedLabelsData","SortCriteriaChanged","handleSortByChange","variableChanged","getPrimaryLabelFromUrl","newService","prevService","oldState","updateOptions","checkPrimaryLabel","dataFrame","getVariablesThatCanBeCleared","NoMatchingLabelsScene","clearCallback","clearVariables","getFieldOptions","updateBody","VAR_FIELD_GROUP_BY","defaultToAll","includeAll","SortByScene","_variableDependency","VariableDependencyConfig","variableNames","value_breakdown_sort_change","criteria","onFieldSelectorChange","select_field_in_breakdown_clicked","previousField","getValueText","view","sortByDirection","navigateToValueBreakdown","labelsMenuWrapper","valuesMenuWrapper","blockingMessage","StatusWrapper","content","textDecoration","paddingTop","LabelsAggregatedBreakdownScene","$detectedLabels","update","updateQueriesOnFieldsVariableChange","getPanelByIndex","detectedLabelsFrame","newLabels","getLabelGroupByVariable","layoutObj","existingLabels","newLabelsSet","detectedLabels","LABEL_BREAKDOWN_GRID_TEMPLATE_COLUMNS","buildLabelsQuery","setHoverHeader","onDetectedLabelsDataChange","onLabelsVariableChange","onGroupByVariableChange","SERVICE_UI_LABEL","SERVICE_NAME","newPrimaryLabel","prevPrimaryLabel","getLabelOptions","hasAllValue","VAR_LABEL_GROUP_BY","previousLabel","VAR_LABEL_GROUP_BY_EXPR","removeValueLabelFromVariableInterpolation","setEmptyStates","setErrorStates","errorIndex","displayed","showErrorToast","getActiveLayout","repeater","variableState","labelBreakdownScene","bodyOpts","levelColor","errorArray","displayError","activeLayoutContainsNoPanels","alertError","renderError","isTopLevelLayoutType","every","updateLayout","getSceneLayout","onLayoutChange","layout_type_changed","setSceneLayout","Field","RadioButtonGroup","findIndex","setCollapsible","setCollapsed","buildValueSummaryPanel","getValueSummaryHeight","extendPanelContext","extendTimeSeriesLegendBus","maxHeight","syncLevelsVisibleSeries","syncLabelsValueSummaryVisibleSeries","syncFieldsValueSummaryVisibleSeries","getFieldsVariableLegendSyncSubscription","sceneFlexItem","isLevel","initLegendOptions","getLabelsVariableLegendSyncSubscription","getQuerySubscription","onToggleSeriesVisibility","toggleLevelFromFilter","toggleLabelFromFilter","toggleFieldFromFilter","label_in_panel_summary_clicked","collapsableState","suffix","rest","Input","suffixWrapper","clearIcon","DisplayDurationUnits","DisplayByteUnits","NumericFilterPopoverScene","gtFilter","ltFilter","extractedValue","extractValueFromString","gtu","unit","ltu","Number","hasExistingFilter","onSubmit","togglePopover","units","onInputKeydown","formDisabled","inputString","inputType","durationValue","durationValueLength","isNaN","bytesValue","byteValueLength","getUnitOptions","popoverStyles","getPopoverStyles","subTitle","selectLabelActionScene","ClickOutsideWrapper","useCapture","Stack","role","card","fieldWrap","FieldSet","fieldset","breakdowns","common","filterNumericPopover","inputGreaterThanInclusive","horizontal","inclusiveField","inclusiveInput","inputGreaterThan","onKeyDownCapture","autoFocus","currentTarget","numberInput","Label","inputGreaterThanUnit","unitFieldLabel","selectInput","inputLessThanInclusive","inputLessThan","inputLessThanUnit","buttons","submitButton","cancelButton","numberFieldLabel","switchFieldLabel","INCLUDE_VALUE","EXCLUDE_VALUE","NUMERIC_FILTER_VALUE","getVariable","getExistingFilter","EMPTY_VARIABLE_VALUE","onClickExcludeEmpty","onClickIncludeEmpty","onClickNumericFilter","selectedValue","calculateSparsity","newLogsPanelState","showPopover","logsPanelData","getLogsPanelFrame","hasNumericFilters","hasSparseFilters","logLinesWithLabelCount","reduce","acc","percentage","existingFilterValue","detectedFieldFrame","getViewValuesLink","getValueBreakdownLink","SelectableValueComponent","getSelectableValueComponentStyles","popoverRef","useRef","filterButtonDisabled","hasOtherFilter","selectedOptionValue","hasExistingNumericFilter","numericSelected","includeSelected","sparseIncludeOption","component","sparseExcludeOption","numericFilterOption","defaultOption","ButtonGroup","filterButtonGroup","filterButton","ref","ButtonSelect","filterSelect","buttonSelect","PopoverController","showPopper","hidePopper","popperProps","blurFocusProps","onBlur","current","Popover","show","wrapperClassName","referenceElement","renderArrow","warning","pxToRem","borderTopLeftRadius","borderBottomLeftRadius","sortingOptions","ReducerID","stdDev","sum","min","fieldReducers","selectOptions","filterReducerOptions","onCriteriaChange","setSortByPreference","onDirectionChange","sortByValue","htmlFor","sortByFunction","isSearchable","inputId","ENABLED_PERCENTILES","ext","getLabelValueFromDataFrame","statusMessage","fontStyle","getFocusStyles","outline","outlineOffset","transitionTimingFunction","transitionDuration","transitionProperty","getIconButtonBefore","hoverSize","opacity","transitions","handleMotion","RegexIconButton","maxContrast","Tooltip","svg","viewBox","xmlns","x","y","dominantBaseline","textAnchor","gridSize","x0_5","hover","colorManipulator","alpha","LineFilterCaseSensitivityButton","re2JS","LineFilterInput","invalid","setInvalid","errorMessage","setErrorMessage","validate","useCallback","compile","narrowErrorMessage","load","useEffect","aria-invalid","rows","RE2JS","INITIAL_INPUT_WIDTH","onSubmitLineFilter","onClearLineFilter","setWidth","resize","searchLogs","inputNoBorderRight","onKeyUp","buttonWrap","removeBtn","submit","exclusiveBtn","LogOptionsScene","handleWrapLinesChange","getLogsPanelScene","wrapLogMessage","setLogOption","getLogsListScene","setLogsVizOption","prettifyLogMessage","onChangeLogsSortOrder","sortOrder","LogsListScene","LogsPanelScene","clearDisplayedFields","logs_clear_displayed_fields","getLogsPanelSortOrderFromStore","getLogOption","LogsSortOrder","Descending","getLogsPanelSortOrderFromURL","decodedSortOrder","narrowLogsSortOrder","onChangeVisualizationType","visualizationType","wrapLines","buttonGroupWrapper","transparent","Ascending","LogsPanelHeaderActions","vizType","tableColumnCustomWidths","LogLineState","TableColumnsContext","createContext","columnWidthMap","setColumnWidthMap","filteredColumns","setColumns","setFilteredColumns","setVisible","bodyState","setBodyState","clearSelectedLine","TableColumnContextProvider","initialColumns","logsFrame","setUrlColumns","setUrlTableBodyState","urlTableBodyState","showColumnManagementDrawer","isColumnManagementActive","removeExtraColumns","initialColumnWidths","existingWidths","narrowRecordStringNumber","NarrowingError","getColumnWidthsFromLocalStorage","setColumnWidthMapState","handleSetColumns","newColumns","activeColumns","colA","colB","getActiveColumns","handleSetBodyState","logLineState","handleSetVisible","isVisible","pendingLabelState","newColumnsArray","pa","pb","timeField","bodyField","defaultColumns","getDefaultColumns","col","pendingColumns","getTimeName","percentOfLinesWithLabel","Infinity","getBodyName","setDefaultColumns","Provider","labelTypes","columnsToSet","useTableColumnContext","useContext","TableCellContext","cellIndex","numberOfMenuItems","setActiveCellIndex","TableCellContextProvider","cellActive","setCellActive","handleCellActive","useTableCellContext","TableHeaderContext","isHeaderMenuActive","setHeaderMenuActive","TableHeaderContextProvider","handleisHeaderMenuActive","useTableHeaderContext","LogsColumnSearch","searchValue","setSearchValue","dispatcher","newColumnsWithMeta","numberOfResults","searchResultCount","reportInteraction","resultCount","searchWrap","needle","debouncedFuzzySearch","LogsTableEmptyFields","empty","LogsTableNavField","dragIcon","labelCount","appearance","contentWrap","customWidthWrap","checkboxLabel","Checkbox","checked","showCount","omit","draggable","LogsTableActiveFields","reorderColumn","valueFilter","toggleColumn","dragging","columnWrapper","getLogsFieldsStyles","labelKeys","onDragEnd","destination","renderTitle","DragDropContext","Droppable","droppableId","provided","droppableProps","innerRef","la","lb","sortLabels","Draggable","draggableId","snapshot","isDragging","draggableProps","dragHandleProps","collator","Intl","Collator","sensitivity","LogsTableAvailableFields","borderBottom","compare","LogsTableMultiSelect","sidebarWrap","overflowY","scrollbarWidth","columnHeaderButton","columnHeader","h6","clear","filteredColumnsWithMeta","columnsWithMeta","getReorderColumn","sourceIndex","destinationIndex","ColumnSelectionDrawerWrap","columnName","logContext","logError","c","priorActiveCount","column","columnAction","columnCount","columnFilterEvent","pendingFilteredLabelState","isDefaultField","DefaultCellWrapComponent","CellWrapInnerComponent","onMouseOut","onMouseIn","rowIndex","cellState","bgColor","overflowX","onMouseEnter","initialState","addFilter","selectedLine","QueryContext","QueryContextProvider","useQueryContext","CellContextMenu","pillType","menuItemsWrap","menuItem","showColumn","path","fillRule","clipRule","d","fillOpacity","LEVEL_NAME","DefaultPill","mappings","getFieldMappings","isPillActive","activePillWrap","pillWrap","pill","menuItemText","FieldType","time","LineActionIcons","clipboardButton","lineHeight","inspectButton","verticalAlign","iconWrapper","z2","inspect","logId","idField","lineValue","isInspecting","setIsInspecting","getText","generateLogShortlink","row","table","inspectLine","tooltipPlacement","tabIndex","ClipboardButton","Modal","onDismiss","pre","ButtonRow","DefaultCellComponent","getCellLinks","displayValue","number","linkWrapper","hasLinks","React","formattedValueToString","fieldIndex","showColumns","renderValue","getLinks","DataLinksContextMenu","api","openMenu","LogLinePillValue","activePill","valueWrap","menuActive","onClickAdd","LogLinePill","templateSrv","getTemplateSrv","useMemo","other","originalField","isDerivedField","originalFrame","getLinksSupplier","subFieldName","addFieldToColumns","stopScroll","scrollTo","scrollLeft","Scroller","scrollerRef","scroller","scrollRight","onPointerDown","behavior","onPointerUp","scrollWidth","RawLogLineText","rawLogLine","fontFamilyMonospace","LogLineCellComponent","isHover","setIsHover","untransformedField","rawValue","isDerived","untransformedValue","string","renderLabels","isAuto","auto","hasLabels","ScrollSyncPane","LogsTableHeader","isFirstColumn","isLine","logLineButton","tableHeaderMenu","leftAlign","rightAlign","defaultContentWrapper","isBodyField","onLogTextToggle","defaultContent","LogsTableHeaderWrap","hideColumn","pendingColumnState","columnIndex","cols","headerProps","linkWrap","openColumnManagementDrawer","slideLeft","reverse","slideRight","autoColumnWidths","transform","TableAndContext","GrafanaTable","onColumnResize","onResize","initialSortBy","desc","initialRowIndex","cellHeight","TableCellHeight","Sm","footerOptions","reducer","countRows","Table","timeZone","section","tableWrap","tableFrame","setTableFrame","localSelectedLine","prepareTableFrame","frameWithOverrides","applyFieldOverrides","replaceVariables","defaults","custom","guessLogsFieldTypeForField","filterable","headerComponent","getInitialFieldWidth","cellOptions","getTableCellOptions","prepare","isFieldLokiLabels","typeInfo","DataFrameType","LogLines","isFieldDataplaneLabels","flatMap","format","keepTime","labelFiltersTransform","labelFilters","labelFiltersInclude","indexByName","includeByName","getOrganizeFieldsTransform","buildColumnsWithMeta","specialFields","extraFields","getDefaultStateOrganizeFieldsTransform","transformedDataFrame","lastValueFrom","transformDataFrame","getIdName","lineIndex","cleanLineIndex","Drawer","onClose","ScrollSync","vertical","proportional","fieldDisplayName","guessLogsFieldTypeForValue","critical","crit","eror","debug","trace","MappingType","ValueToText","cellComponent","TableCellDisplayMode","tableWidth","numberOfFields","extraPadding","columnMeta","maxLength","iso8601Regex","TableWrap","panelWrapSize","setPanelWrapSize","useResizeObserver","panelWrap","clientWidth","clientHeight","getTimeZone","getColumnsFromProps","fieldNames","previouslySelected","getLogFrameLabelsAsLabels","numberOfLogLines","labelMap","fieldLabels","setObj","valueSet","getCardinalityMapFromLabels","cardinalityCount","fromEntries","normalize","mapLabelsToInitialState","specialFieldArray","addSpecialLabelsState","setSpecialFieldMeta","total","ceil","guessFieldTypeFromValue","TableProvider","parseLogsFrame","defaultUrlColumns","LogsTableScene","onActivateSyncDisplayedFieldsWithUrlColumns","getParentScene","urlColumnsParam","urlColumnsUrl","narrowStringsArray","parentModel","urlHasDefaultUrlColumns","updateDefaultUrlColumns","updateDisplayedFields","newDisplayedFields","setDisplayedFields","tableLogLineState","timeRangeValue","PanelChrome","loadingState","showMenuAlways","actions","setVisualizationType","getVariableForLabel","areArraysStrictlyEqual","LineFilterScene","getLineFilterVariable","updateInputState","updateVariable","getLineFilterCase","getLineFilterRegex","getLineFilterExclusive","cancel","setLineFilterExclusive","flush","thisFilter","clearVariable","handleChange","setLineFilterCase","setLineFilterRegex","getFilterKey","getOperator","search_string_in_logs_changed","decodedUrlColumns","unknownTableRow","narrowSelectedTableRow","decodedSelectedTableRow","decodedVisualizationType","narrowLogsVisualizationType","searchParams","setStateFromUrl","updateLogsPanel","selectedLineUrl","vizTypeUrl","displayedFieldsUrl","getVizPanel","logsPanelScene","xSizing","lineFilterScenes","lineFilterScene","logs_visualization_toggle","setLogsVisualizationType","contain","CopyLinkButton","copied","setCopied","timeoutId","handleClick","LogsPanelError","decodedWrapLogMessage","getLogsPanel","handleLogsError","isEmptyLogsResult","handleNoData","clearLogsError","logsCount","getTitle","errorResponse","statusText","showLogsError","logsVolumeCollapsedByError","getLogsVolumeOption","logsVolume","logsVolumePanelKey","LogsVolumePanel","formattedCount","valueFormatter","getValueFormat","trim","setOption","handleLabelFilterClick","handleLabelFilterOutClick","handleIsFilterLabelActive","handleFilterStringClick","handleFilterOutStringClick","onClickShowField","onClickHideField","getPrettyQueryExpr","updateVisibleRange","handleShareLogLineClick","handleLabelFilter","logs_detail_filter_applied","logs_toggle_displayed_field","displayedField","newLogs","rowId","resolveRowTimeRangeForSharing","copyText","metadata","hasKeyValueFilter","fieldFilter","hasKeyValueFilterField","lineFiltersVar","logs_popover_line_filter","selectionLength","LogsVolumeActions","TemporaryExemptionsButton","usePluginComponent","streamSelector","dataSourceUid","contextHints","updateContainerHeight","totalLogsCount","formattedTotalCount","maxLines","LINE_LIMIT","calcs","displayMode","LegendDisplayMode","List","setUnit","getTimeSeriesExpr","setLogsVolumeFieldConfigs","setLogsVolumeOption","annotations","displayVisibleRange","containerLayout","innerHeight","updatedLogSeries","visibleRange","getSeriesVisibleRange","getVisibleRangeFrame","levelFilter","level_in_logs_volume_clicked","ShareButtonScene","setIsOpen","onCopyLink","shorten","absTime","createAndCopyShortLink","global","isAbsoluteTime","protocol","host","lastSelected","defaultMode","MenuActions","menuOptions","getUrl","constructAbsoluteUrl","getSceneTimeRange","Menu","groupOption","MenuGroup","Item","narrow","getRelativeURLPath","createShortLink","getBackendSrv","post","shortLink","alertSuccess","toUtc","getUrlSearchParams","toISOString","pathname","onPatternClick","filteredPatterns","staleIndex","pattern_selected","logsStatsRow","logsStatsRowActive","logsStatsRowLabel","logsStatsRowValue","logsStatsRowCount","logsStatsRowPercent","logsStatsRowBar","logsStatsRowInnerBar","PatternFieldLabelStatsRow","count","proportion","style","percent","barStyle","logsStats","wordBreak","logsStatsHeader","medium","logsStatsTitle","logsStatsClose","logsStatsBody","PatternFieldLabelStats","stats","topRows","activeRow","otherRows","otherCount","combinedRows","stat","PatternNameLabel","exploration","patternIndices","indices","currentIndex","extractPatternIndices","setStats","statsError","setStatsError","previousQueryRef","previousTimeRangeRef","handlePatternClick","pattern_field_clicked","patternExtractor","_value","constructQuery","currentTimeRange","requestId","intervalMs","targets","timezone","app","startTime","fieldCount","fieldStatsMap","toArray","fieldStats","convertResultToStats","parts","part","Toggletip","onOpen","Spinner","emphasize","PatternsLogsSampleScene","queryWithFilters","LOG_STREAM_SELECTOR_EXPR","replacePatternsInQuery","queryRunnerWithFilters","onQueryWithFiltersResult","pendingPattern","VAR_PATTERNS_EXPR","removePatternFromFilterExclusion","patternsViewTableScene","PatternsViewTableScene","patternsNotMatchingFilters","setWarningMessage","noticeFlexItem","getNoticeFlexItem","vizFlexItem","getVizFlexItem","getFlexItemChildren","excludeThisPatternFromFiltering","patternsThatDontMatchCurrentFilters","filterVariable","onQueryError","traceIds","request","panelFlexItem","queryWithoutFilters","PATTERNS_SAMPLE_SELECTOR_EXPR","queryRunnerWithoutFilters","PatternsTableExpandedRow","tableViz","expandedRows","rowScene","newRowScene","SCALED_UNITS","appliedPatterns","getColumnStyles","cell","panelData","original","dataNode","SceneDataNode","timeSeries","TooltipDisplayMode","None","AxisPlacement","Hidden","setDisplayMode","tableTimeSeriesWrap","tableTimeSeries","sortType","scaledUnits","countTextWrap","toFixed","getTablePatternTextStyles","tablePatternTextDefault","getExplorationFor","disableGrow","existingPattern","appliedPattern","includeLink","excludeLink","undoLink","patternFrames","legendSyncPatterns","logExploration","patternFrame","getTableStyles","patternsFrameScene","PatternsFrameScene","patternFramesRaw","patternsBreakdownScene","PatternsBreakdownScene","previousValue","tableData","buildTableData","buildColumns","tableWrapper","InteractiveTable","getRowId","renderExpandedRow","theme2","overflowWrap","th","pointerEvents","palette","visualization","newFrame","$patternsData","prevFrame","patternFilter","forEachChild","getTimeseriesDataNode","getSingleViewLayout","originalOnToggleSeriesVisibility","override","patternsToShow","names","getTimeSeries","asTable","setLinks","targetBlank","fixedColor","overrideToFixedColor","logsByServiceScene","PatternsViewTextSearch","onSearchResult","setFilteredPatterns","patternFramesOverride","filteredPatternFrames","clearSearch","handleSearchChange","setEmptySearch","PatternsNotDetected","TextLink","external","PatternsTooOld","PATTERNS_MAX_AGE_HOURS","setBody","onDataChange","ySizing","updatePatternFrames","dataFrames","dataFrameToPatternFrame","prevFrames","Loading","controlsRight","controlsLeft","justifyItems","patternMissingText","timeRangeTooOld","dateTime","textAlignment","code","TabNames","breakdownViewsDefinitions","testId","tabLogs","behaviors","sync","DashboardCursorSync","Crosshair","tabLabels","buildFieldsBreakdownActionScene","changeFieldNumber","tabFields","tabPatterns","valueBreakdownViews","buildLabelValuesBreakdownActionScene","buildFieldValuesBreakdownActionScene","ActionBarScene","dataSource","shareButtonScene","currentBreakdownViewSlug","allowNavToParent","drilldownValueSlug","getDrilldownValueSlug","loadingStates","Box","paddingY","TabsBar","tab","Tab","counter","getCounter","totalCount","getLogsCountStyles","logsCountStyles","emptyCountStyles","LogsCount","getDrillDownTabLink","onChangeTab","action_view_changed","newActionView","previousActionView","patternsCount","labelsCount","md","right","removeEscapeChar","charsEscapedByEscapeRegExp","char","stringArray","nextChar","isNextCharRegex","LOGS_PANEL_QUERY_REFID","LOGS_COUNT_QUERY_REFID","setSubscribeToLabelsVariable","redirectToStart","prevRouteMatch","replaceSlash","$logsCount","newPrimaryLabelValue","isAdHocFilterValueUserInput","stripAdHocFilterUserInputPrefix","isExact","resetTabCount","navigateToDrilldownPage","getMetadataService","setServiceSceneState","showVariables","getServiceSceneState","getMetadata","resetBodyAndData","setBreakdownView","subscribeToPatternsQuery","subscribeToDetectedLabelsQuery","subscribeToDetectedFieldsQuery","subscribeToLogsQuery","subscribeToLogsCountQuery","subscribeToFieldsVariable","subscribeToMetadataVariable","subscribeToLevelsVariableChangedEvent","subscribeToLevelsVariableFiltersState","subscribeToDataSourceVariable","subscribeToPatternsVariable","subscribeToLineFiltersVariable","subscribeToTimeRange","deprecatedLineFilterArray","deprecatedLineFilter","globalLineFilterVars","caseSensitiveMatches","caseInsensitiveMatches","migrateLineFilterV1","parentSlug","updateLoadingState","patternsResponse","setPatternsCount","detectedLabelsResponse","detectedLabelsFields","removeSpecialFields","setLabelsCount","updateFieldsCount","detectedFieldsFields","setFieldsCount","getServiceSceneQueryRunner","getPatternsQueryRunner","getDetectedLabelsQueryRunner","getDetectedFieldsQueryRunner","getLogCountQueryRunner","buildGraphScene","breakdownView","breakdownViewDef","valueBreakdownView","valueBreakdownViewDef","getResourceQueryRunner","buildResourceQuery","VAR_LABELS_EXPR","queryType","FavoriteServiceHeaderActionScene","setHover","isFavorite","removeFromFavorites","tooltipCopy","onMouseOver","SelectServiceButton","getLabelDrilldownLink","selectLabel","primaryLabelName","primaryLabelValue","service_selected","clonedVar","urlSync","selectServiceButton","ConfigureVolumeError","NoServiceSearchResults","TabPopoverScene","serviceSelectionScene","serviceSelectionTabsScene","ServiceSelectionTabsScene","tabOptions","tabOptionsWithIcon","saved","toggleShowPopover","setSelectedTab","getLabelsFromQueryRunnerState","$labelsData","populatePrimaryLabelsVariableOptions","selectedTab","getSelectedTab","savedTabs","getFavoriteTabsFromStorage","savedIndex","runDetectedLabels","runDetectedLabelsSubs","getServiceSelectionPrimaryLabel","selectDefaultLabelTab","removeSavedTab","removeTabFromLocalStorage","getTabsStyles","tabs","tabLabel","truncateText","addTab","NoServiceVolume","AddLabelToFiltersHeaderActionScene","isSelected","included","add_to_filters","ServiceSelectionPaginationScene","getPageCountStyles","searchPageCountWrap","searchFieldPlaceholderText","textWrapMode","PageCount","countPerPage","delta","roundedTotalCount","getCountOptionsFromTotal","lastOptionValue","currentPage","setServiceSelectionPageCount","pagination","float","paginationWrap","paginationWrapMd","Pagination","numberOfPages","onNavigate","toPage","showSmallVersion","aggregatedMetricsEnabled","AGGREGATED_SERVICE_NAME","primaryLabelUrlKey","datasourceUrlKey","getSelectedTabFromUrl","addDatasourceChangeToBrowserHistory","newDs","dsUrl","currentUrl","newUrl","pushUrlHandler","addLabelChangeToBrowserHistory","newKey","primaryLabelRaw","primaryLabelSplit","addTabToLocalStorage","clearServiceSelectionSearchVariable","setServiceSelectionPrimaryLabelKey","buildServiceLayout","serviceLabelVar","primaryLabelVar","datasourceVar","splitDuration","isAggregatedMetricsActive","getMetricExpression","step","cssGridItem","runner","runPanelQuery","toolbar","getQueryOptionsToolbar","formatPrimaryLabelForUI","setVolumeQueryRunner","buildVolumeQuery","VAR_PRIMARY_LABEL_EXPR","VAR_LABELS_REPLICA_EXPR","subscribeToVolume","doVariablesNeedSync","labelsVarPrimary","labelsVarReplica","getLabelsVariableReplica","activeTab","filteredFilters","needsSync","syncVariables","fixRequiredUrlParams","subscribeToPrimaryLabelsVariable","subscribeToLabelFilterChanges","subscribeToActiveTabVariable","runVolumeOnActivate","subscribeToDatasource","subscribeToAggregatedMetricToggle","subscribeToAggregatedMetricVariable","isTimeRangeTooEarlyForAggMetrics","onUnsupportedAggregatedMetricTimeRange","runVolumeQuery","onSupportedAggregatedMetricTimeRange","getAggregatedMetricsVariable","isBefore","resetQueryRunner","updateAggregatedMetricVariable","updateTabs","getGridItems","requestTimeRange","fromDiff","abs","toDiff","labelsToQuery","getLabels","paginationScene","existingChildren","aggregatedMetricsVariable","datasourceVariable","existing","newChildTs","newChildLogs","buildServiceLogsLayout","serviceIndex","getLogExpression","labelsByVolume","dsString","searchString","getServiceSelectionSearchVariable","services","favoriteServicesToQuery","service","createListOfLabelsToQuery","getServiceSelectionPageCount","VAR_PRIMARY_LABEL_SEARCH","VAR_AGGREGATED_METRICS","hideLabel","VAR_PRIMARY_LABEL","renderPrimaryLabelFilters","VAR_LABELS_REPLICA","serviceLevel","onSearchServicesChange","primaryLabelSearch","searchVar","search_services_changed","searchQuery","getLevelFilterForService","serviceLevels","Off","allLevels","getLevelLabelsFromSeries","toggleLevelVisibility","updateServiceLogs","headingWrapper","loadingText","bodyWrapper","searchPaginationWrap","searchWrapper","searchField","serviceStringVariable","hasSearch","isLogVolumeLoading","volumeApiError","filterLabel","customValue","customLabel","unwrapWildcardSearch","serviceName","onSearchChange","goToLabelDrillDownLink","MultiValueVariable","getValueOptions","of","MultiOrSingleValueSelect","equalsFilters","notEqualsFilters","regexEqualFilters","regexNotEqualFilters","getCombinedLabelFilters","adHocFilters","operatorFilters","joinedValues","joinCombinedFiltersValues","ltFilters","lteFilters","gtFilters","gteFilters","filtersString","buildLabelsLogQLFromFilters","getLabelsExpr","joinMatchFilters","decodeFilters","getExpr","filterSeparator","equalFiltersStrings","notEqualsFiltersStrings","regexEqualFiltersStrings","regexNotEqualFiltersStrings","ltFiltersStrings","lteFiltersStrings","gtFiltersStrings","gteFiltersStrings","allFilters","buildJoinedFilters","LabelFilterOp","RegexEqual","RegexNotEqual","getFilterValues","buildFilter","NumericFilterOp","allFiltersString","combineValues","equal","notEqual","regexEqual","regexNotEqual","groupFiltersByKey","combineFiltersValues","mergeFilters","removeStaleOperators","filterStrings","filtersWithSameOperatorsAndKeys","isOperatorNumeric","buildFilterString","positiveFilterValueSeparator","negativeFilterValueSeparator","expectedOperator","operatorTo","filtersFrom","filtersTo","valuesToMove","mergeCombinedFiltersValues","separator","filterCombinedValues","filtersByKey","multipleValuesOperator","updatedOperatorAndEscapedValues","currentOperator","narrowFilterOperator","updatedOperator","firstFilter","filterString","escapeFieldValue","escapeFieldValues","isUserInput","sceneUtils","escapeLabelValueInExactSelector","escapeLabelValueInRegexSelector","quoteChar","ignoreKeys","positiveMatch","positiveRegex","isOperatorExclusive","positiveMatchGroup","groupBy","positiveRegexGroup","negativeMatchGroup","negativeRegexGroup","gtGroup","gteGroup","ltGroup","lteGroup","getExpressionBuilderDebug","page","createInteractionName","open_in_explore_clicked","wasm_not_supported","interval_too_long","arr1","arr2","set1","set2","isLogsQuery","nodeType","isQueryWithNode","iterate","enter","MetricExpr","requestSupportsSharding","isLogsRequest","isInstantQuery","SHARDING_PLACEHOLDER","addShardingPlaceholderSelector","interpolateShardingSelector","shards","shardValue","RegExp","combineResponses","currentResult","newResult","cloneDataFrame","currentFrame","frame1","frame2","frameType1","frameType2","TimeSeriesMulti","field1","field2","compareLabels","customType1","frameType","customType2","shouldCombine","dest","destTimeField","destIdField","sourceTimeField","sourceIdField","sourceTimeValues","totalFields","destIdx","resolveIdx","entryExistsInDest","compareEntries","sourceField","findSourceField","nanos","getCombinedMetadataStats","mergeFrames","mergedErrors","mergedError","mergedTraceIds","destField","idx","closestIdx","destIndex","sameTimestamp","compareNsTimestamps","referenceField","sourceFields","candidates","TOTAL_BYTES_STAT","destStats","sourceStats","destStat","s","sourceStat","eitherStat","runShardSplitQuery","interpolateVariablesInQueries","splittingTargets","shouldStop","mergedResponse","uuidv4","subquerySubscription","retriesMap","retryTimer","runNextRequest","subscriber","cycle","groupSize","nextGroupSize","retrying","done","next","complete","nextRequest","nextCycle","retry","isRetriableError","traces","floor","sqrt","retries","pow","shardsToQuery","groupShardRequests","subRequest","partialResponse","maxFactor","constrainGroupSize","currentSize","metaExecutionTime","executionTime","updateGroupSizeFromResponse","runNonSplitRequest","Observable","selector","getNodesFromQuery","getSelectorForShardValues","isValidQuery","fetchLabelValues","getInitialGroupSize","catch","splitQueriesByStreamShard","WRAPPED_LOKI_DS_UID","DETECTED_FIELDS_NAME_FIELD","DETECTED_FIELDS_CARDINALITY_NAME","DETECTED_FIELDS_PARSER_NAME","DETECTED_FIELDS_TYPE_NAME","WrappedLokiDatasource","RuntimeDataSource","__sceneObject","valueOf","lokiDs","targetsSet","resource","getVolume","getPatterns","getDetectedLabels","getDetectedFields","shardingEnabled","exploreLogsShardSplitting","updatedRequest","sanitizeStreamSelector","interpolatedTarget","dsResponse","utc","headers","lokiPatterns","maxValue","minValue","timeValues","countValues","samples","createDataFrame","preferredVisualisationType","targetsInterpolated","sortLabelsByCardinality","detectedLabelFields","nameField","cardinalityField","parserField","typeField","FIELDS_TO_REMOVE","primaryLabel","volumeResponse","lhs","rhs","lVolumeCount","rVolumeCount","df","metric","labelsResponse","testDatasource","registerRuntimeDataSource","streamSelectorName","excludeEmpty","metadataExpressionToAdd","VAR_METADATA_EXPR","VAR_LINE_FILTERS_EXPR","VAR_FIELDS_EXPR","JSON_FORMAT_EXPR","LOGS_FORMAT_EXPR","DETECTED_LEVELS_VALUES_EXPR","DETECTED_FIELD_AND_METADATA_VALUES_EXPR","rerenderFavorites","forceRender","addToFavoriteLabelValueInStorage","removeFromFavoritesInStorage","getReducerId","extractParserFromString","parserString","extractFieldTypeFromString","fieldString","parsersSet","parsersArray","namesField","sortByScene","labelKey","frameIndex","reducerID","selectFrameTransformation","setDisplayName","labelType","getLabelTypeFromFrame","LabelType","Parsed","Indexed","StructuredMetadata","getFilterTypeFromLabelType","parserForThisField","typesField","optionType","parserFromFilterValue","fieldExpressionToAdd","structuredMetadataToAdd","getLogsStreamSelector","buildFieldsQuery","labelOptions","optionName","labelExpressionToAdd","getLabelsFromSeries","labelsVariable","getVisibleLabels","allLabels","getVisibleFilters","getVisibleFields","getVisibleMetadata","inclusiveFilters","exclusiveLabels","visibleLevels","SeriesVisibilityChangeMode","ToggleSelection","existingLevel","getVisibleLevels","levelsFilter","wantedLevels","normalizeLevelName","unwantedLevels","getField","cache","getFieldByName","DATAPLANE_TIMESTAMP_NAME","DATAPLANE_BODY_NAME","DATAPLANE_SEVERITY_NAME","DATAPLANE_ID_NAME","logFrameLabelsToLabels","logFrameLabels","k","FieldCache","timestampField","severityField","labelsField","getLogFrameLabels","timeNanosecondField","getLabelFieldName","parseDataplaneLogsFrame","getFirstFieldOfType","getL","lineField","lineLabels","makeLabelsArray","makeLabelsGetter","parseLegacyLogsFrame","oldestFirst","VISIBLE_RANGE_NAME","arrayToDataFrame","timeEnd","isRegion","dataTopic","DataTopic","Annotations","metadataService","initializeMetadataService","MetadataService","serviceSceneState","previousRoute","buildDrilldownPageUrl","extraQueryParams","buildDrilldownPageRoute","newPath","urlLabelName","urlLabelValue","urlPath","buildValueBreakdownUrl","fullUrl","drilldownLink","serviceUrl","buildServicesUrl","getSearch","LogsSceneQueryRunner","UNKNOWN_LEVEL_LOGS","INFO_LEVEL_FIELD_NAME_REGEX","DEBUG_LEVEL_FIELD_NAME_REGEX","WARNING_LEVEL_FIELD_NAME_REGEX","ERROR_LEVEL_FIELD_NAME_REGEX","CRITICAL_LEVEL_FIELD_NAME_REGEX","UNKNOWN_LEVEL_FIELD_NAME_REGEX","matchFieldsWithNameByRegex","overrideColor","builder","setValueSummaryFieldConfigs","setLabelSeriesOverrides","overrideConfig","FieldMatcherID","byNames","readOnly","overrideCustomFieldConfig","__systemRef","focusedLevels","FieldConfigBuilders","FieldConfigBuilder","onFieldConfigChange","focusedLabels","setColorByDisplayNameTransformation","getFieldDisplayName","FieldColorModeId","PaletteClassicByName","sortLevelTransformation","aName","aVal","bName","queryRunnerOptions","hasLevel","isLogPanelQuery","LokiQueryDirection","Backward","Forward","route","queryParamsOverrides","defaultQueryParams","VAR_DATASOURCE_EXPR","editorMode","supportingQueryType","addAdHocFilterUserInputPrefix","getLevelsExpr","getMetadataExpr","getFieldsExpr","escapeDoubleQuotedLineFilter","buildLogQlLineFilter","breakdownLabelName","startOfUrl","routeParams","locationArray","buildServicesRoute","sceneObject","PRETTY_LOG_STREAM_SELECTOR_EXPR","check","returnType","uf","uFuzzy","intraMode","intraIns","intraSub","intraTrn","intraDel","idxs","order","haystackOrder","matchesSet","mark","matched","infoIdx","highlight","ranges","debounceLodash","memoize","sortSeriesByName","initOutlierDetector","fieldReducer","calculateDataFrameChangepoints","calculateOutlierValue","doStandardCalcs","seriesCalcs","firstTimestamp","lastTimestamp","firstValue","lastValue","allSeriesKey","wasmSupported","dataPoints","samplingStep","sample","Float64Array","ChangepointDetector","defaultArgpcp","detectChangepoints","valueA","valueB","localeCompare","joined","outerJoinDataFrames","points","detector","OutlierDetector","dbscan","preprocess","outliers","detect","seriesResults","isOutlier","outlierIntervals","support","WebAssembly","FAVORITE_PRIMARY_LABEL_VALUES_LOCALSTORAGE_KEY","FAVORITE_PRIMARY_LABEL_NAME_LOCALSTORAGE_KEY","DS_LOCALSTORAGE_KEY","SCENE_LAYOUT_LOCALSTORAGE_KEY","dsKey","createPrimaryLabelLocalStorageKey","labelValues","servicesToStore","createTabsLocalStorageKey","tabName","tabNames","SORT_BY_LOCALSTORAGE_KEY","defaultSortBy","defaultDirection","getExplorationPrefix","getDataSourceName","getServiceName","PREFIX","storedFields","LOG_OPTIONS_LOCALSTORAGE_KEY","defaultValue","localStorageResult","storedValue","LOGS_VOLUME_LOCALSTORAGE_KEY","removeItem","VISUALIZATION_TYPE_LOCALSTORAGE_KEY","storedType","LINE_FILTER_OPTIONS_LOCALSTORAGE_KEY","PANEL_OPTIONS_LOCALSTORAGE_KEY","EXPRESSION_BUILDER_DEBUG_LOCALSTORAGE_KEY","SERVICE_SELECTION_PAGE_COUNT_KEY","pageCount","appConfig","apiKey","apiUrl","refreshPicker","combobox","addNewLabelTab","searchLabelValueInput","openExplore","logsPanelHeader","radio","isSecureContext","writeText","createElement","appendChild","execCommand","removeChild","paramName","relativeUrl","charAt","toUpperCase","ellipsis","timeEpochMs","VAR_LEVELS_EXPR","lookupVariable","encodedValue","narrowFieldValue","adHocFiltersVariableState","getServiceNameFromVariableState","variablesToClear","wip","_wip","includeOperators","isLabelsVar","inclusiveOperatorCount","isEditingOnlyFilter","isAddingFirstFilter","numericOperators"],"sourceRoot":""} \ No newline at end of file diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/3d96a93cfcb32df74eef.svg b/compose/grafana/plugins/grafana-lokiexplore-app/3d96a93cfcb32df74eef.svg new file mode 100644 index 0000000..a929f6d --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/3d96a93cfcb32df74eef.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/470.js b/compose/grafana/plugins/grafana-lokiexplore-app/470.js new file mode 100644 index 0000000..2c9a925 --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/470.js @@ -0,0 +1,3 @@ +/*! For license information please see 470.js.LICENSE.txt */ +"use strict";(self.webpackChunkgrafana_lokiexplore_app=self.webpackChunkgrafana_lokiexplore_app||[]).push([[470],{4470:(t,e,s)=>{s.r(e),s.d(e,{RE2JS:()=>at,RE2JSCompileException:()=>f,RE2JSException:()=>g,RE2JSFlagsException:()=>_,RE2JSGroupException:()=>A,RE2JSSyntaxException:()=>E});class i{static FOLD_CASE=1;static LITERAL=2;static CLASS_NL=4;static DOT_NL=8;static ONE_LINE=16;static NON_GREEDY=32;static PERL_X=64;static UNICODE_GROUPS=128;static WAS_DOLLAR=256;static MATCH_NL=(()=>i.CLASS_NL|i.DOT_NL)();static PERL=(()=>i.CLASS_NL|i.ONE_LINE|i.PERL_X|i.UNICODE_GROUPS)();static POSIX=0;static UNANCHORED=0;static ANCHOR_START=1;static ANCHOR_BOTH=2}class n{static CODES=(()=>new Map([["",7],["\b",8],["\t",9],["\n",10],["\v",11],["\f",12],["\r",13],[" ",32],['"',34],["$",36],["&",38],["(",40],[")",41],["*",42],["+",43],["-",45],[".",46],["0",48],["1",49],["2",50],["3",51],["4",52],["5",53],["6",54],["7",55],["8",56],["9",57],[":",58],["<",60],[">",62],["?",63],["A",65],["B",66],["C",67],["F",70],["P",80],["Q",81],["U",85],["Z",90],["[",91],["\\",92],["]",93],["^",94],["_",95],["a",97],["b",98],["f",102],["i",105],["m",109],["n",110],["r",114],["s",115],["t",116],["v",118],["x",120],["z",122],["{",123],["|",124],["}",125]]))();static toUpperCase(t){const e=String.fromCodePoint(t).toUpperCase();if(e.length>1)return t;const s=String.fromCodePoint(e.codePointAt(0)).toLowerCase();return s.length>1||s.codePointAt(0)!==t?t:e.codePointAt(0)}static toLowerCase(t){const e=String.fromCodePoint(t).toLowerCase();if(e.length>1)return t;const s=String.fromCodePoint(e.codePointAt(0)).toUpperCase();return s.length>1||s.codePointAt(0)!==t?t:e.codePointAt(0)}}class a{static CASE_ORBIT=(()=>new Map([[75,107],[107,8490],[8490,75],[83,115],[115,383],[383,83],[181,924],[924,956],[956,181],[197,229],[229,8491],[8491,197],[452,453],[453,454],[454,452],[455,456],[456,457],[457,455],[458,459],[459,460],[460,458],[497,498],[498,499],[499,497],[837,921],[921,953],[953,8126],[8126,837],[914,946],[946,976],[976,914],[917,949],[949,1013],[1013,917],[920,952],[952,977],[977,1012],[1012,920],[922,954],[954,1008],[1008,922],[928,960],[960,982],[982,928],[929,961],[961,1009],[1009,929],[931,962],[962,963],[963,931],[934,966],[966,981],[981,934],[937,969],[969,8486],[8486,937],[1042,1074],[1074,7296],[7296,1042],[1044,1076],[1076,7297],[7297,1044],[1054,1086],[1086,7298],[7298,1054],[1057,1089],[1089,7299],[7299,1057],[1058,1090],[1090,7300],[7300,7301],[7301,1058],[1066,1098],[1098,7302],[7302,1066],[1122,1123],[1123,7303],[7303,1122],[7304,42570],[42570,42571],[42571,7304],[7305,7306],[7306,7305],[7776,7777],[7777,7835],[7835,7776],[223,7838],[7838,223],[8064,8072],[8072,8064],[8065,8073],[8073,8065],[8066,8074],[8074,8066],[8067,8075],[8075,8067],[8068,8076],[8076,8068],[8069,8077],[8077,8069],[8070,8078],[8078,8070],[8071,8079],[8079,8071],[8080,8088],[8088,8080],[8081,8089],[8089,8081],[8082,8090],[8090,8082],[8083,8091],[8091,8083],[8084,8092],[8092,8084],[8085,8093],[8093,8085],[8086,8094],[8094,8086],[8087,8095],[8095,8087],[8096,8104],[8104,8096],[8097,8105],[8105,8097],[8098,8106],[8106,8098],[8099,8107],[8107,8099],[8100,8108],[8108,8100],[8101,8109],[8109,8101],[8102,8110],[8110,8102],[8103,8111],[8111,8103],[8115,8124],[8124,8115],[8131,8140],[8140,8131],[912,8147],[8147,912],[944,8163],[8163,944],[8179,8188],[8188,8179],[612,42955],[42955,612],[42956,42957],[42957,42956],[42970,42971],[42971,42970],[411,42972],[42972,411],[64261,64262],[64262,64261],[66560,66600],[66600,66560],[66561,66601],[66601,66561],[66562,66602],[66602,66562],[66563,66603],[66603,66563],[66564,66604],[66604,66564],[66565,66605],[66605,66565],[66566,66606],[66606,66566],[66567,66607],[66607,66567],[66568,66608],[66608,66568],[66569,66609],[66609,66569],[66570,66610],[66610,66570],[66571,66611],[66611,66571],[66572,66612],[66612,66572],[66573,66613],[66613,66573],[66574,66614],[66614,66574],[66575,66615],[66615,66575],[66576,66616],[66616,66576],[66577,66617],[66617,66577],[66578,66618],[66618,66578],[66579,66619],[66619,66579],[66580,66620],[66620,66580],[66581,66621],[66621,66581],[66582,66622],[66622,66582],[66583,66623],[66623,66583],[66584,66624],[66624,66584],[66585,66625],[66625,66585],[66586,66626],[66626,66586],[66587,66627],[66627,66587],[66588,66628],[66628,66588],[66589,66629],[66629,66589],[66590,66630],[66630,66590],[66591,66631],[66631,66591],[66592,66632],[66632,66592],[66593,66633],[66633,66593],[66594,66634],[66634,66594],[66595,66635],[66635,66595],[66596,66636],[66636,66596],[66597,66637],[66637,66597],[66598,66638],[66638,66598],[66599,66639],[66639,66599],[66736,66776],[66776,66736],[66737,66777],[66777,66737],[66738,66778],[66778,66738],[66739,66779],[66779,66739],[66740,66780],[66780,66740],[66741,66781],[66781,66741],[66742,66782],[66782,66742],[66743,66783],[66783,66743],[66744,66784],[66784,66744],[66745,66785],[66785,66745],[66746,66786],[66786,66746],[66747,66787],[66787,66747],[66748,66788],[66788,66748],[66749,66789],[66789,66749],[66750,66790],[66790,66750],[66751,66791],[66791,66751],[66752,66792],[66792,66752],[66753,66793],[66793,66753],[66754,66794],[66794,66754],[66755,66795],[66795,66755],[66756,66796],[66796,66756],[66757,66797],[66797,66757],[66758,66798],[66798,66758],[66759,66799],[66799,66759],[66760,66800],[66800,66760],[66761,66801],[66801,66761],[66762,66802],[66802,66762],[66763,66803],[66803,66763],[66764,66804],[66804,66764],[66765,66805],[66805,66765],[66766,66806],[66806,66766],[66767,66807],[66807,66767],[66768,66808],[66808,66768],[66769,66809],[66809,66769],[66770,66810],[66810,66770],[66771,66811],[66811,66771],[66928,66967],[66967,66928],[66929,66968],[66968,66929],[66930,66969],[66969,66930],[66931,66970],[66970,66931],[66932,66971],[66971,66932],[66933,66972],[66972,66933],[66934,66973],[66973,66934],[66935,66974],[66974,66935],[66936,66975],[66975,66936],[66937,66976],[66976,66937],[66938,66977],[66977,66938],[66940,66979],[66979,66940],[66941,66980],[66980,66941],[66942,66981],[66981,66942],[66943,66982],[66982,66943],[66944,66983],[66983,66944],[66945,66984],[66984,66945],[66946,66985],[66985,66946],[66947,66986],[66986,66947],[66948,66987],[66987,66948],[66949,66988],[66988,66949],[66950,66989],[66989,66950],[66951,66990],[66990,66951],[66952,66991],[66991,66952],[66953,66992],[66992,66953],[66954,66993],[66993,66954],[66956,66995],[66995,66956],[66957,66996],[66996,66957],[66958,66997],[66997,66958],[66959,66998],[66998,66959],[66960,66999],[66999,66960],[66961,67e3],[67e3,66961],[66962,67001],[67001,66962],[66964,67003],[67003,66964],[66965,67004],[67004,66965],[68736,68800],[68800,68736],[68737,68801],[68801,68737],[68738,68802],[68802,68738],[68739,68803],[68803,68739],[68740,68804],[68804,68740],[68741,68805],[68805,68741],[68742,68806],[68806,68742],[68743,68807],[68807,68743],[68744,68808],[68808,68744],[68745,68809],[68809,68745],[68746,68810],[68810,68746],[68747,68811],[68811,68747],[68748,68812],[68812,68748],[68749,68813],[68813,68749],[68750,68814],[68814,68750],[68751,68815],[68815,68751],[68752,68816],[68816,68752],[68753,68817],[68817,68753],[68754,68818],[68818,68754],[68755,68819],[68819,68755],[68756,68820],[68820,68756],[68757,68821],[68821,68757],[68758,68822],[68822,68758],[68759,68823],[68823,68759],[68760,68824],[68824,68760],[68761,68825],[68825,68761],[68762,68826],[68826,68762],[68763,68827],[68827,68763],[68764,68828],[68828,68764],[68765,68829],[68829,68765],[68766,68830],[68830,68766],[68767,68831],[68831,68767],[68768,68832],[68832,68768],[68769,68833],[68833,68769],[68770,68834],[68834,68770],[68771,68835],[68835,68771],[68772,68836],[68836,68772],[68773,68837],[68837,68773],[68774,68838],[68838,68774],[68775,68839],[68839,68775],[68776,68840],[68840,68776],[68777,68841],[68841,68777],[68778,68842],[68842,68778],[68779,68843],[68843,68779],[68780,68844],[68844,68780],[68781,68845],[68845,68781],[68782,68846],[68846,68782],[68783,68847],[68847,68783],[68784,68848],[68848,68784],[68785,68849],[68849,68785],[68786,68850],[68850,68786],[68944,68976],[68976,68944],[68945,68977],[68977,68945],[68946,68978],[68978,68946],[68947,68979],[68979,68947],[68948,68980],[68980,68948],[68949,68981],[68981,68949],[68950,68982],[68982,68950],[68951,68983],[68983,68951],[68952,68984],[68984,68952],[68953,68985],[68985,68953],[68954,68986],[68986,68954],[68955,68987],[68987,68955],[68956,68988],[68988,68956],[68957,68989],[68989,68957],[68958,68990],[68990,68958],[68959,68991],[68991,68959],[68960,68992],[68992,68960],[68961,68993],[68993,68961],[68962,68994],[68994,68962],[68963,68995],[68995,68963],[68964,68996],[68996,68964],[68965,68997],[68997,68965],[71840,71872],[71872,71840],[71841,71873],[71873,71841],[71842,71874],[71874,71842],[71843,71875],[71875,71843],[71844,71876],[71876,71844],[71845,71877],[71877,71845],[71846,71878],[71878,71846],[71847,71879],[71879,71847],[71848,71880],[71880,71848],[71849,71881],[71881,71849],[71850,71882],[71882,71850],[71851,71883],[71883,71851],[71852,71884],[71884,71852],[71853,71885],[71885,71853],[71854,71886],[71886,71854],[71855,71887],[71887,71855],[71856,71888],[71888,71856],[71857,71889],[71889,71857],[71858,71890],[71890,71858],[71859,71891],[71891,71859],[71860,71892],[71892,71860],[71861,71893],[71893,71861],[71862,71894],[71894,71862],[71863,71895],[71895,71863],[71864,71896],[71896,71864],[71865,71897],[71897,71865],[71866,71898],[71898,71866],[71867,71899],[71899,71867],[71868,71900],[71900,71868],[71869,71901],[71901,71869],[71870,71902],[71902,71870],[71871,71903],[71903,71871],[93760,93792],[93792,93760],[93761,93793],[93793,93761],[93762,93794],[93794,93762],[93763,93795],[93795,93763],[93764,93796],[93796,93764],[93765,93797],[93797,93765],[93766,93798],[93798,93766],[93767,93799],[93799,93767],[93768,93800],[93800,93768],[93769,93801],[93801,93769],[93770,93802],[93802,93770],[93771,93803],[93803,93771],[93772,93804],[93804,93772],[93773,93805],[93805,93773],[93774,93806],[93806,93774],[93775,93807],[93807,93775],[93776,93808],[93808,93776],[93777,93809],[93809,93777],[93778,93810],[93810,93778],[93779,93811],[93811,93779],[93780,93812],[93812,93780],[93781,93813],[93813,93781],[93782,93814],[93814,93782],[93783,93815],[93815,93783],[93784,93816],[93816,93784],[93785,93817],[93817,93785],[93786,93818],[93818,93786],[93787,93819],[93819,93787],[93788,93820],[93820,93788],[93789,93821],[93821,93789],[93790,93822],[93822,93790],[93791,93823],[93823,93791],[125184,125218],[125218,125184],[125185,125219],[125219,125185],[125186,125220],[125220,125186],[125187,125221],[125221,125187],[125188,125222],[125222,125188],[125189,125223],[125223,125189],[125190,125224],[125224,125190],[125191,125225],[125225,125191],[125192,125226],[125226,125192],[125193,125227],[125227,125193],[125194,125228],[125228,125194],[125195,125229],[125229,125195],[125196,125230],[125230,125196],[125197,125231],[125231,125197],[125198,125232],[125232,125198],[125199,125233],[125233,125199],[125200,125234],[125234,125200],[125201,125235],[125235,125201],[125202,125236],[125236,125202],[125203,125237],[125237,125203],[125204,125238],[125238,125204],[125205,125239],[125239,125205],[125206,125240],[125240,125206],[125207,125241],[125241,125207],[125208,125242],[125242,125208],[125209,125243],[125243,125209],[125210,125244],[125244,125210],[125211,125245],[125245,125211],[125212,125246],[125246,125212],[125213,125247],[125247,125213],[125214,125248],[125248,125214],[125215,125249],[125249,125215],[125216,125250],[125250,125216],[125217,125251],[125251,125217]]))();static C=[[0,31,1],[127,159,1],[173,888,715],[889,896,7],[897,899,1],[907,909,2],[930,1328,398],[1367,1368,1],[1419,1420,1],[1424,1480,56],[1481,1487,1],[1515,1518,1],[1525,1541,1],[1564,1757,193],[1806,1807,1],[1867,1868,1],[1970,1983,1],[2043,2044,1],[2094,2095,1],[2111,2140,29],[2141,2143,2],[2155,2159,1],[2191,2198,1],[2274,2436,162],[2445,2446,1],[2449,2450,1],[2473,2481,8],[2483,2485,1],[2490,2491,1],[2501,2502,1],[2505,2506,1],[2511,2518,1],[2520,2523,1],[2526,2532,6],[2533,2559,26],[2560,2564,4],[2571,2574,1],[2577,2578,1],[2601,2609,8],[2612,2618,3],[2619,2621,2],[2627,2630,1],[2633,2634,1],[2638,2640,1],[2642,2648,1],[2653,2655,2],[2656,2661,1],[2679,2688,1],[2692,2702,10],[2706,2729,23],[2737,2740,3],[2746,2747,1],[2758,2766,4],[2767,2769,2],[2770,2783,1],[2788,2789,1],[2802,2808,1],[2816,2820,4],[2829,2830,1],[2833,2834,1],[2857,2865,8],[2868,2874,6],[2875,2885,10],[2886,2889,3],[2890,2894,4],[2895,2900,1],[2904,2907,1],[2910,2916,6],[2917,2936,19],[2937,2945,1],[2948,2955,7],[2956,2957,1],[2961,2966,5],[2967,2968,1],[2971,2973,2],[2976,2978,1],[2981,2983,1],[2987,2989,1],[3002,3005,1],[3011,3013,1],[3017,3022,5],[3023,3025,2],[3026,3030,1],[3032,3045,1],[3067,3071,1],[3085,3089,4],[3113,3130,17],[3131,3141,10],[3145,3150,5],[3151,3156,1],[3159,3163,4],[3164,3166,2],[3167,3172,5],[3173,3184,11],[3185,3190,1],[3213,3217,4],[3241,3252,11],[3258,3259,1],[3269,3273,4],[3278,3284,1],[3287,3292,1],[3295,3300,5],[3301,3312,11],[3316,3327,1],[3341,3345,4],[3397,3401,4],[3408,3411,1],[3428,3429,1],[3456,3460,4],[3479,3481,1],[3506,3516,10],[3518,3519,1],[3527,3529,1],[3531,3534,1],[3541,3543,2],[3552,3557,1],[3568,3569,1],[3573,3584,1],[3643,3646,1],[3676,3712,1],[3715,3717,2],[3723,3748,25],[3750,3774,24],[3775,3781,6],[3783,3791,8],[3802,3803,1],[3808,3839,1],[3912,3949,37],[3950,3952,1],[3992,4029,37],[4045,4059,14],[4060,4095,1],[4294,4296,2],[4297,4300,1],[4302,4303,1],[4681,4686,5],[4687,4695,8],[4697,4702,5],[4703,4745,42],[4750,4751,1],[4785,4790,5],[4791,4799,8],[4801,4806,5],[4807,4823,16],[4881,4886,5],[4887,4955,68],[4956,4989,33],[4990,4991,1],[5018,5023,1],[5110,5111,1],[5118,5119,1],[5789,5791,1],[5881,5887,1],[5910,5918,1],[5943,5951,1],[5972,5983,1],[5997,6001,4],[6004,6015,1],[6110,6111,1],[6122,6127,1],[6138,6143,1],[6158,6170,12],[6171,6175,1],[6265,6271,1],[6315,6319,1],[6390,6399,1],[6431,6444,13],[6445,6447,1],[6460,6463,1],[6465,6467,1],[6510,6511,1],[6517,6527,1],[6572,6575,1],[6602,6607,1],[6619,6621,1],[6684,6685,1],[6751,6781,30],[6782,6794,12],[6795,6799,1],[6810,6815,1],[6830,6831,1],[6863,6911,1],[6989,7156,167],[7157,7163,1],[7224,7226,1],[7242,7244,1],[7307,7311,1],[7355,7356,1],[7368,7375,1],[7419,7423,1],[7958,7959,1],[7966,7967,1],[8006,8007,1],[8014,8015,1],[8024,8030,2],[8062,8063,1],[8117,8133,16],[8148,8149,1],[8156,8176,20],[8177,8181,4],[8191,8203,12],[8204,8207,1],[8234,8238,1],[8288,8303,1],[8306,8307,1],[8335,8349,14],[8350,8351,1],[8385,8399,1],[8433,8447,1],[8588,8591,1],[9258,9279,1],[9291,9311,1],[11124,11125,1],[11158,11508,350],[11509,11512,1],[11558,11560,2],[11561,11564,1],[11566,11567,1],[11624,11630,1],[11633,11646,1],[11671,11679,1],[11687,11743,8],[11870,11903,1],[11930,12020,90],[12021,12031,1],[12246,12271,1],[12352,12439,87],[12440,12544,104],[12545,12548,1],[12592,12687,95],[12774,12782,1],[12831,42125,29294],[42126,42127,1],[42183,42191,1],[42540,42559,1],[42744,42751,1],[42958,42959,1],[42962,42964,2],[42973,42993,1],[43053,43055,1],[43066,43071,1],[43128,43135,1],[43206,43213,1],[43226,43231,1],[43348,43358,1],[43389,43391,1],[43470,43482,12],[43483,43485,1],[43519,43575,56],[43576,43583,1],[43598,43599,1],[43610,43611,1],[43715,43738,1],[43767,43776,1],[43783,43784,1],[43791,43792,1],[43799,43807,1],[43815,43823,8],[43884,43887,1],[44014,44015,1],[44026,44031,1],[55204,55215,1],[55239,55242,1],[55292,63743,1],[64110,64111,1],[64218,64255,1],[64263,64274,1],[64280,64284,1],[64311,64317,6],[64319,64325,3],[64451,64466,1],[64912,64913,1],[64968,64974,1],[64976,65007,1],[65050,65055,1],[65107,65127,20],[65132,65135,1],[65141,65277,136],[65278,65280,1],[65471,65473,1],[65480,65481,1],[65488,65489,1],[65496,65497,1],[65501,65503,1],[65511,65519,8],[65520,65531,1],[65534,65535,1],[65548,65575,27],[65595,65598,3],[65614,65615,1],[65630,65663,1],[65787,65791,1],[65795,65798,1],[65844,65846,1],[65935,65949,14],[65950,65951,1],[65953,65999,1],[66046,66175,1],[66205,66207,1],[66257,66271,1],[66300,66303,1],[66340,66348,1],[66379,66383,1],[66427,66431,1],[66462,66500,38],[66501,66503,1],[66518,66559,1],[66718,66719,1],[66730,66735,1],[66772,66775,1],[66812,66815,1],[66856,66863,1],[66916,66926,1],[66939,66955,16],[66963,66966,3],[66978,66994,16],[67002,67005,3],[67006,67007,1],[67060,67071,1],[67383,67391,1],[67414,67423,1],[67432,67455,1],[67462,67505,43],[67515,67583,1],[67590,67591,1],[67593,67638,45],[67641,67643,1],[67645,67646,1],[67670,67743,73],[67744,67750,1],[67760,67807,1],[67827,67830,3],[67831,67834,1],[67868,67870,1],[67898,67902,1],[67904,67967,1],[68024,68027,1],[68048,68049,1],[68100,68103,3],[68104,68107,1],[68116,68120,4],[68150,68151,1],[68155,68158,1],[68169,68175,1],[68185,68191,1],[68256,68287,1],[68327,68330,1],[68343,68351,1],[68406,68408,1],[68438,68439,1],[68467,68471,1],[68498,68504,1],[68509,68520,1],[68528,68607,1],[68681,68735,1],[68787,68799,1],[68851,68857,1],[68904,68911,1],[68922,68927,1],[68966,68968,1],[68998,69005,1],[69008,69215,1],[69247,69290,43],[69294,69295,1],[69298,69313,1],[69317,69371,1],[69416,69423,1],[69466,69487,1],[69514,69551,1],[69580,69599,1],[69623,69631,1],[69710,69713,1],[69750,69758,1],[69821,69827,6],[69828,69839,1],[69865,69871,1],[69882,69887,1],[69941,69960,19],[69961,69967,1],[70007,70015,1],[70112,70133,21],[70134,70143,1],[70162,70210,48],[70211,70271,1],[70279,70281,2],[70286,70302,16],[70314,70319,1],[70379,70383,1],[70394,70399,1],[70404,70413,9],[70414,70417,3],[70418,70441,23],[70449,70452,3],[70458,70469,11],[70470,70473,3],[70474,70478,4],[70479,70481,2],[70482,70486,1],[70488,70492,1],[70500,70501,1],[70509,70511,1],[70517,70527,1],[70538,70540,2],[70541,70543,2],[70582,70593,11],[70595,70596,1],[70598,70603,5],[70614,70617,3],[70618,70624,1],[70627,70655,1],[70748,70754,6],[70755,70783,1],[70856,70863,1],[70874,71039,1],[71094,71095,1],[71134,71167,1],[71237,71247,1],[71258,71263,1],[71277,71295,1],[71354,71359,1],[71370,71375,1],[71396,71423,1],[71451,71452,1],[71468,71471,1],[71495,71679,1],[71740,71839,1],[71923,71934,1],[71943,71944,1],[71946,71947,1],[71956,71959,3],[71990,71993,3],[71994,72007,13],[72008,72015,1],[72026,72095,1],[72104,72105,1],[72152,72153,1],[72165,72191,1],[72264,72271,1],[72355,72367,1],[72441,72447,1],[72458,72639,1],[72674,72687,1],[72698,72703,1],[72713,72759,46],[72774,72783,1],[72813,72815,1],[72848,72849,1],[72872,72887,15],[72888,72959,1],[72967,72970,3],[73015,73017,1],[73019,73022,3],[73032,73039,1],[73050,73055,1],[73062,73065,3],[73103,73106,3],[73113,73119,1],[73130,73439,1],[73465,73471,1],[73489,73531,42],[73532,73533,1],[73563,73647,1],[73649,73663,1],[73714,73726,1],[74650,74751,1],[74863,74869,6],[74870,74879,1],[75076,77711,1],[77811,77823,1],[78896,78911,1],[78934,78943,1],[82939,82943,1],[83527,90367,1],[90426,92159,1],[92729,92735,1],[92767,92778,11],[92779,92781,1],[92863,92874,11],[92875,92879,1],[92910,92911,1],[92918,92927,1],[92998,93007,1],[93018,93026,8],[93048,93052,1],[93072,93503,1],[93562,93759,1],[93851,93951,1],[94027,94030,1],[94088,94094,1],[94112,94175,1],[94181,94191,1],[94194,94207,1],[100344,100351,1],[101590,101630,1],[101641,110575,1],[110580,110588,8],[110591,110883,292],[110884,110897,1],[110899,110927,1],[110931,110932,1],[110934,110947,1],[110952,110959,1],[111356,113663,1],[113771,113775,1],[113789,113791,1],[113801,113807,1],[113818,113819,1],[113824,117759,1],[118010,118015,1],[118452,118527,1],[118574,118575,1],[118599,118607,1],[118724,118783,1],[119030,119039,1],[119079,119080,1],[119155,119162,1],[119275,119295,1],[119366,119487,1],[119508,119519,1],[119540,119551,1],[119639,119647,1],[119673,119807,1],[119893,119965,72],[119968,119969,1],[119971,119972,1],[119975,119976,1],[119981,119994,13],[119996,120004,8],[120070,120075,5],[120076,120085,9],[120093,120122,29],[120127,120133,6],[120135,120137,1],[120145,120486,341],[120487,120780,293],[120781,121484,703],[121485,121498,1],[121504,121520,16],[121521,122623,1],[122655,122660,1],[122667,122879,1],[122887,122905,18],[122906,122914,8],[122917,122923,6],[122924,122927,1],[122990,123022,1],[123024,123135,1],[123181,123183,1],[123198,123199,1],[123210,123213,1],[123216,123535,1],[123567,123583,1],[123642,123646,1],[123648,124111,1],[124154,124367,1],[124411,124414,1],[124416,124895,1],[124903,124908,5],[124911,124927,16],[125125,125126,1],[125143,125183,1],[125260,125263,1],[125274,125277,1],[125280,126064,1],[126133,126208,1],[126270,126463,1],[126468,126496,28],[126499,126501,2],[126502,126504,2],[126515,126520,5],[126522,126524,2],[126525,126529,1],[126531,126534,1],[126536,126540,2],[126544,126547,3],[126549,126550,1],[126552,126560,2],[126563,126565,2],[126566,126571,5],[126579,126589,5],[126591,126602,11],[126620,126624,1],[126628,126634,6],[126652,126703,1],[126706,126975,1],[127020,127023,1],[127124,127135,1],[127151,127152,1],[127168,127184,16],[127222,127231,1],[127406,127461,1],[127491,127503,1],[127548,127551,1],[127561,127567,1],[127570,127583,1],[127590,127743,1],[128728,128731,1],[128749,128751,1],[128765,128767,1],[128887,128890,1],[128986,128991,1],[129004,129007,1],[129009,129023,1],[129036,129039,1],[129096,129103,1],[129114,129119,1],[129160,129167,1],[129198,129199,1],[129212,129215,1],[129218,129279,1],[129620,129631,1],[129646,129647,1],[129661,129663,1],[129674,129678,1],[129735,129741,1],[129757,129758,1],[129770,129775,1],[129785,129791,1],[129939,130042,103],[130043,131071,1],[173792,173823,1],[177978,177983,1],[178206,178207,1],[183970,183983,1],[191457,191471,1],[192094,194559,1],[195102,196607,1],[201547,201551,1],[205744,917759,1],[918e3,1114111,1]];static Cc=[[0,31,1],[127,159,1]];static Cf=[[173,1536,1363],[1537,1541,1],[1564,1757,193],[1807,2192,385],[2193,2274,81],[6158,8203,2045],[8204,8207,1],[8234,8238,1],[8288,8292,1],[8294,8303,1],[65279,65529,250],[65530,65531,1],[69821,69837,16],[78896,78911,1],[113824,113827,1],[119155,119162,1],[917505,917536,31],[917537,917631,1]];static Co=[[57344,63743,1],[983040,1048573,1],[1048576,1114109,1]];static Cs=[[55296,57343,1]];static L=[[65,90,1],[97,122,1],[170,181,11],[186,192,6],[193,214,1],[216,246,1],[248,705,1],[710,721,1],[736,740,1],[748,750,2],[880,884,1],[886,887,1],[890,893,1],[895,902,7],[904,906,1],[908,910,2],[911,929,1],[931,1013,1],[1015,1153,1],[1162,1327,1],[1329,1366,1],[1369,1376,7],[1377,1416,1],[1488,1514,1],[1519,1522,1],[1568,1610,1],[1646,1647,1],[1649,1747,1],[1749,1765,16],[1766,1774,8],[1775,1786,11],[1787,1788,1],[1791,1808,17],[1810,1839,1],[1869,1957,1],[1969,1994,25],[1995,2026,1],[2036,2037,1],[2042,2048,6],[2049,2069,1],[2074,2084,10],[2088,2112,24],[2113,2136,1],[2144,2154,1],[2160,2183,1],[2185,2190,1],[2208,2249,1],[2308,2361,1],[2365,2384,19],[2392,2401,1],[2417,2432,1],[2437,2444,1],[2447,2448,1],[2451,2472,1],[2474,2480,1],[2482,2486,4],[2487,2489,1],[2493,2510,17],[2524,2525,1],[2527,2529,1],[2544,2545,1],[2556,2565,9],[2566,2570,1],[2575,2576,1],[2579,2600,1],[2602,2608,1],[2610,2611,1],[2613,2614,1],[2616,2617,1],[2649,2652,1],[2654,2674,20],[2675,2676,1],[2693,2701,1],[2703,2705,1],[2707,2728,1],[2730,2736,1],[2738,2739,1],[2741,2745,1],[2749,2768,19],[2784,2785,1],[2809,2821,12],[2822,2828,1],[2831,2832,1],[2835,2856,1],[2858,2864,1],[2866,2867,1],[2869,2873,1],[2877,2908,31],[2909,2911,2],[2912,2913,1],[2929,2947,18],[2949,2954,1],[2958,2960,1],[2962,2965,1],[2969,2970,1],[2972,2974,2],[2975,2979,4],[2980,2984,4],[2985,2986,1],[2990,3001,1],[3024,3077,53],[3078,3084,1],[3086,3088,1],[3090,3112,1],[3114,3129,1],[3133,3160,27],[3161,3162,1],[3165,3168,3],[3169,3200,31],[3205,3212,1],[3214,3216,1],[3218,3240,1],[3242,3251,1],[3253,3257,1],[3261,3293,32],[3294,3296,2],[3297,3313,16],[3314,3332,18],[3333,3340,1],[3342,3344,1],[3346,3386,1],[3389,3406,17],[3412,3414,1],[3423,3425,1],[3450,3455,1],[3461,3478,1],[3482,3505,1],[3507,3515,1],[3517,3520,3],[3521,3526,1],[3585,3632,1],[3634,3635,1],[3648,3654,1],[3713,3714,1],[3716,3718,2],[3719,3722,1],[3724,3747,1],[3749,3751,2],[3752,3760,1],[3762,3763,1],[3773,3776,3],[3777,3780,1],[3782,3804,22],[3805,3807,1],[3840,3904,64],[3905,3911,1],[3913,3948,1],[3976,3980,1],[4096,4138,1],[4159,4176,17],[4177,4181,1],[4186,4189,1],[4193,4197,4],[4198,4206,8],[4207,4208,1],[4213,4225,1],[4238,4256,18],[4257,4293,1],[4295,4301,6],[4304,4346,1],[4348,4680,1],[4682,4685,1],[4688,4694,1],[4696,4698,2],[4699,4701,1],[4704,4744,1],[4746,4749,1],[4752,4784,1],[4786,4789,1],[4792,4798,1],[4800,4802,2],[4803,4805,1],[4808,4822,1],[4824,4880,1],[4882,4885,1],[4888,4954,1],[4992,5007,1],[5024,5109,1],[5112,5117,1],[5121,5740,1],[5743,5759,1],[5761,5786,1],[5792,5866,1],[5873,5880,1],[5888,5905,1],[5919,5937,1],[5952,5969,1],[5984,5996,1],[5998,6e3,1],[6016,6067,1],[6103,6108,5],[6176,6264,1],[6272,6276,1],[6279,6312,1],[6314,6320,6],[6321,6389,1],[6400,6430,1],[6480,6509,1],[6512,6516,1],[6528,6571,1],[6576,6601,1],[6656,6678,1],[6688,6740,1],[6823,6917,94],[6918,6963,1],[6981,6988,1],[7043,7072,1],[7086,7087,1],[7098,7141,1],[7168,7203,1],[7245,7247,1],[7258,7293,1],[7296,7306,1],[7312,7354,1],[7357,7359,1],[7401,7404,1],[7406,7411,1],[7413,7414,1],[7418,7424,6],[7425,7615,1],[7680,7957,1],[7960,7965,1],[7968,8005,1],[8008,8013,1],[8016,8023,1],[8025,8031,2],[8032,8061,1],[8064,8116,1],[8118,8124,1],[8126,8130,4],[8131,8132,1],[8134,8140,1],[8144,8147,1],[8150,8155,1],[8160,8172,1],[8178,8180,1],[8182,8188,1],[8305,8319,14],[8336,8348,1],[8450,8455,5],[8458,8467,1],[8469,8473,4],[8474,8477,1],[8484,8490,2],[8491,8493,1],[8495,8505,1],[8508,8511,1],[8517,8521,1],[8526,8579,53],[8580,11264,2684],[11265,11492,1],[11499,11502,1],[11506,11507,1],[11520,11557,1],[11559,11565,6],[11568,11623,1],[11631,11648,17],[11649,11670,1],[11680,11686,1],[11688,11694,1],[11696,11702,1],[11704,11710,1],[11712,11718,1],[11720,11726,1],[11728,11734,1],[11736,11742,1],[11823,12293,470],[12294,12337,43],[12338,12341,1],[12347,12348,1],[12353,12438,1],[12445,12447,1],[12449,12538,1],[12540,12543,1],[12549,12591,1],[12593,12686,1],[12704,12735,1],[12784,12799,1],[13312,19903,1],[19968,42124,1],[42192,42237,1],[42240,42508,1],[42512,42527,1],[42538,42539,1],[42560,42606,1],[42623,42653,1],[42656,42725,1],[42775,42783,1],[42786,42888,1],[42891,42957,1],[42960,42961,1],[42963,42965,2],[42966,42972,1],[42994,43009,1],[43011,43013,1],[43015,43018,1],[43020,43042,1],[43072,43123,1],[43138,43187,1],[43250,43255,1],[43259,43261,2],[43262,43274,12],[43275,43301,1],[43312,43334,1],[43360,43388,1],[43396,43442,1],[43471,43488,17],[43489,43492,1],[43494,43503,1],[43514,43518,1],[43520,43560,1],[43584,43586,1],[43588,43595,1],[43616,43638,1],[43642,43646,4],[43647,43695,1],[43697,43701,4],[43702,43705,3],[43706,43709,1],[43712,43714,2],[43739,43741,1],[43744,43754,1],[43762,43764,1],[43777,43782,1],[43785,43790,1],[43793,43798,1],[43808,43814,1],[43816,43822,1],[43824,43866,1],[43868,43881,1],[43888,44002,1],[44032,55203,1],[55216,55238,1],[55243,55291,1],[63744,64109,1],[64112,64217,1],[64256,64262,1],[64275,64279,1],[64285,64287,2],[64288,64296,1],[64298,64310,1],[64312,64316,1],[64318,64320,2],[64321,64323,2],[64324,64326,2],[64327,64433,1],[64467,64829,1],[64848,64911,1],[64914,64967,1],[65008,65019,1],[65136,65140,1],[65142,65276,1],[65313,65338,1],[65345,65370,1],[65382,65470,1],[65474,65479,1],[65482,65487,1],[65490,65495,1],[65498,65500,1],[65536,65547,1],[65549,65574,1],[65576,65594,1],[65596,65597,1],[65599,65613,1],[65616,65629,1],[65664,65786,1],[66176,66204,1],[66208,66256,1],[66304,66335,1],[66349,66368,1],[66370,66377,1],[66384,66421,1],[66432,66461,1],[66464,66499,1],[66504,66511,1],[66560,66717,1],[66736,66771,1],[66776,66811,1],[66816,66855,1],[66864,66915,1],[66928,66938,1],[66940,66954,1],[66956,66962,1],[66964,66965,1],[66967,66977,1],[66979,66993,1],[66995,67001,1],[67003,67004,1],[67008,67059,1],[67072,67382,1],[67392,67413,1],[67424,67431,1],[67456,67461,1],[67463,67504,1],[67506,67514,1],[67584,67589,1],[67592,67594,2],[67595,67637,1],[67639,67640,1],[67644,67647,3],[67648,67669,1],[67680,67702,1],[67712,67742,1],[67808,67826,1],[67828,67829,1],[67840,67861,1],[67872,67897,1],[67968,68023,1],[68030,68031,1],[68096,68112,16],[68113,68115,1],[68117,68119,1],[68121,68149,1],[68192,68220,1],[68224,68252,1],[68288,68295,1],[68297,68324,1],[68352,68405,1],[68416,68437,1],[68448,68466,1],[68480,68497,1],[68608,68680,1],[68736,68786,1],[68800,68850,1],[68864,68899,1],[68938,68965,1],[68975,68997,1],[69248,69289,1],[69296,69297,1],[69314,69316,1],[69376,69404,1],[69415,69424,9],[69425,69445,1],[69488,69505,1],[69552,69572,1],[69600,69622,1],[69635,69687,1],[69745,69746,1],[69749,69763,14],[69764,69807,1],[69840,69864,1],[69891,69926,1],[69956,69959,3],[69968,70002,1],[70006,70019,13],[70020,70066,1],[70081,70084,1],[70106,70108,2],[70144,70161,1],[70163,70187,1],[70207,70208,1],[70272,70278,1],[70280,70282,2],[70283,70285,1],[70287,70301,1],[70303,70312,1],[70320,70366,1],[70405,70412,1],[70415,70416,1],[70419,70440,1],[70442,70448,1],[70450,70451,1],[70453,70457,1],[70461,70480,19],[70493,70497,1],[70528,70537,1],[70539,70542,3],[70544,70581,1],[70583,70609,26],[70611,70656,45],[70657,70708,1],[70727,70730,1],[70751,70753,1],[70784,70831,1],[70852,70853,1],[70855,71040,185],[71041,71086,1],[71128,71131,1],[71168,71215,1],[71236,71296,60],[71297,71338,1],[71352,71424,72],[71425,71450,1],[71488,71494,1],[71680,71723,1],[71840,71903,1],[71935,71942,1],[71945,71948,3],[71949,71955,1],[71957,71958,1],[71960,71983,1],[71999,72001,2],[72096,72103,1],[72106,72144,1],[72161,72163,2],[72192,72203,11],[72204,72242,1],[72250,72272,22],[72284,72329,1],[72349,72368,19],[72369,72440,1],[72640,72672,1],[72704,72712,1],[72714,72750,1],[72768,72818,50],[72819,72847,1],[72960,72966,1],[72968,72969,1],[72971,73008,1],[73030,73056,26],[73057,73061,1],[73063,73064,1],[73066,73097,1],[73112,73440,328],[73441,73458,1],[73474,73476,2],[73477,73488,1],[73490,73523,1],[73648,73728,80],[73729,74649,1],[74880,75075,1],[77712,77808,1],[77824,78895,1],[78913,78918,1],[78944,82938,1],[82944,83526,1],[90368,90397,1],[92160,92728,1],[92736,92766,1],[92784,92862,1],[92880,92909,1],[92928,92975,1],[92992,92995,1],[93027,93047,1],[93053,93071,1],[93504,93548,1],[93760,93823,1],[93952,94026,1],[94032,94099,67],[94100,94111,1],[94176,94177,1],[94179,94208,29],[94209,100343,1],[100352,101589,1],[101631,101640,1],[110576,110579,1],[110581,110587,1],[110589,110590,1],[110592,110882,1],[110898,110928,30],[110929,110930,1],[110933,110948,15],[110949,110951,1],[110960,111355,1],[113664,113770,1],[113776,113788,1],[113792,113800,1],[113808,113817,1],[119808,119892,1],[119894,119964,1],[119966,119967,1],[119970,119973,3],[119974,119977,3],[119978,119980,1],[119982,119993,1],[119995,119997,2],[119998,120003,1],[120005,120069,1],[120071,120074,1],[120077,120084,1],[120086,120092,1],[120094,120121,1],[120123,120126,1],[120128,120132,1],[120134,120138,4],[120139,120144,1],[120146,120485,1],[120488,120512,1],[120514,120538,1],[120540,120570,1],[120572,120596,1],[120598,120628,1],[120630,120654,1],[120656,120686,1],[120688,120712,1],[120714,120744,1],[120746,120770,1],[120772,120779,1],[122624,122654,1],[122661,122666,1],[122928,122989,1],[123136,123180,1],[123191,123197,1],[123214,123536,322],[123537,123565,1],[123584,123627,1],[124112,124139,1],[124368,124397,1],[124400,124896,496],[124897,124902,1],[124904,124907,1],[124909,124910,1],[124912,124926,1],[124928,125124,1],[125184,125251,1],[125259,126464,1205],[126465,126467,1],[126469,126495,1],[126497,126498,1],[126500,126503,3],[126505,126514,1],[126516,126519,1],[126521,126523,2],[126530,126535,5],[126537,126541,2],[126542,126543,1],[126545,126546,1],[126548,126551,3],[126553,126561,2],[126562,126564,2],[126567,126570,1],[126572,126578,1],[126580,126583,1],[126585,126588,1],[126590,126592,2],[126593,126601,1],[126603,126619,1],[126625,126627,1],[126629,126633,1],[126635,126651,1],[131072,173791,1],[173824,177977,1],[177984,178205,1],[178208,183969,1],[183984,191456,1],[191472,192093,1],[194560,195101,1],[196608,201546,1],[201552,205743,1]];static foldL=[[837,837,1]];static Ll=[[97,122,1],[181,223,42],[224,246,1],[248,255,1],[257,311,2],[312,328,2],[329,375,2],[378,382,2],[383,384,1],[387,389,2],[392,396,4],[397,402,5],[405,409,4],[410,411,1],[414,417,3],[419,421,2],[424,426,2],[427,429,2],[432,436,4],[438,441,3],[442,445,3],[446,447,1],[454,460,3],[462,476,2],[477,495,2],[496,499,3],[501,505,4],[507,563,2],[564,569,1],[572,575,3],[576,578,2],[583,591,2],[592,659,1],[661,687,1],[881,883,2],[887,891,4],[892,893,1],[912,940,28],[941,974,1],[976,977,1],[981,983,1],[985,1007,2],[1008,1011,1],[1013,1019,3],[1020,1072,52],[1073,1119,1],[1121,1153,2],[1163,1215,2],[1218,1230,2],[1231,1327,2],[1376,1416,1],[4304,4346,1],[4349,4351,1],[5112,5117,1],[7296,7304,1],[7306,7424,118],[7425,7467,1],[7531,7543,1],[7545,7578,1],[7681,7829,2],[7830,7837,1],[7839,7935,2],[7936,7943,1],[7952,7957,1],[7968,7975,1],[7984,7991,1],[8e3,8005,1],[8016,8023,1],[8032,8039,1],[8048,8061,1],[8064,8071,1],[8080,8087,1],[8096,8103,1],[8112,8116,1],[8118,8119,1],[8126,8130,4],[8131,8132,1],[8134,8135,1],[8144,8147,1],[8150,8151,1],[8160,8167,1],[8178,8180,1],[8182,8183,1],[8458,8462,4],[8463,8467,4],[8495,8505,5],[8508,8509,1],[8518,8521,1],[8526,8580,54],[11312,11359,1],[11361,11365,4],[11366,11372,2],[11377,11379,2],[11380,11382,2],[11383,11387,1],[11393,11491,2],[11492,11500,8],[11502,11507,5],[11520,11557,1],[11559,11565,6],[42561,42605,2],[42625,42651,2],[42787,42799,2],[42800,42801,1],[42803,42865,2],[42866,42872,1],[42874,42876,2],[42879,42887,2],[42892,42894,2],[42897,42899,2],[42900,42901,1],[42903,42921,2],[42927,42933,6],[42935,42947,2],[42952,42954,2],[42957,42961,4],[42963,42971,2],[42998,43002,4],[43824,43866,1],[43872,43880,1],[43888,43967,1],[64256,64262,1],[64275,64279,1],[65345,65370,1],[66600,66639,1],[66776,66811,1],[66967,66977,1],[66979,66993,1],[66995,67001,1],[67003,67004,1],[68800,68850,1],[68976,68997,1],[71872,71903,1],[93792,93823,1],[119834,119859,1],[119886,119892,1],[119894,119911,1],[119938,119963,1],[119990,119993,1],[119995,119997,2],[119998,120003,1],[120005,120015,1],[120042,120067,1],[120094,120119,1],[120146,120171,1],[120198,120223,1],[120250,120275,1],[120302,120327,1],[120354,120379,1],[120406,120431,1],[120458,120485,1],[120514,120538,1],[120540,120545,1],[120572,120596,1],[120598,120603,1],[120630,120654,1],[120656,120661,1],[120688,120712,1],[120714,120719,1],[120746,120770,1],[120772,120777,1],[120779,122624,1845],[122625,122633,1],[122635,122654,1],[122661,122666,1],[125218,125251,1]];static foldLl=[[65,90,1],[192,214,1],[216,222,1],[256,302,2],[306,310,2],[313,327,2],[330,376,2],[377,381,2],[385,386,1],[388,390,2],[391,393,2],[394,395,1],[398,401,1],[403,404,1],[406,408,1],[412,413,1],[415,416,1],[418,422,2],[423,425,2],[428,430,2],[431,433,2],[434,435,1],[437,439,2],[440,444,4],[452,453,1],[455,456,1],[458,459,1],[461,475,2],[478,494,2],[497,498,1],[500,502,2],[503,504,1],[506,562,2],[570,571,1],[573,574,1],[577,579,2],[580,582,1],[584,590,2],[837,880,43],[882,886,4],[895,902,7],[904,906,1],[908,910,2],[911,913,2],[914,929,1],[931,939,1],[975,984,9],[986,1006,2],[1012,1015,3],[1017,1018,1],[1021,1071,1],[1120,1152,2],[1162,1216,2],[1217,1229,2],[1232,1326,2],[1329,1366,1],[4256,4293,1],[4295,4301,6],[5024,5109,1],[7305,7312,7],[7313,7354,1],[7357,7359,1],[7680,7828,2],[7838,7934,2],[7944,7951,1],[7960,7965,1],[7976,7983,1],[7992,7999,1],[8008,8013,1],[8025,8031,2],[8040,8047,1],[8072,8079,1],[8088,8095,1],[8104,8111,1],[8120,8124,1],[8136,8140,1],[8152,8155,1],[8168,8172,1],[8184,8188,1],[8486,8490,4],[8491,8498,7],[8579,11264,2685],[11265,11311,1],[11360,11362,2],[11363,11364,1],[11367,11373,2],[11374,11376,1],[11378,11381,3],[11390,11392,1],[11394,11490,2],[11499,11501,2],[11506,42560,31054],[42562,42604,2],[42624,42650,2],[42786,42798,2],[42802,42862,2],[42873,42877,2],[42878,42886,2],[42891,42893,2],[42896,42898,2],[42902,42922,2],[42923,42926,1],[42928,42932,1],[42934,42948,2],[42949,42951,1],[42953,42955,2],[42956,42960,4],[42966,42972,2],[42997,65313,22316],[65314,65338,1],[66560,66599,1],[66736,66771,1],[66928,66938,1],[66940,66954,1],[66956,66962,1],[66964,66965,1],[68736,68786,1],[68944,68965,1],[71840,71871,1],[93760,93791,1],[125184,125217,1]];static Lm=[[688,705,1],[710,721,1],[736,740,1],[748,750,2],[884,890,6],[1369,1600,231],[1765,1766,1],[2036,2037,1],[2042,2074,32],[2084,2088,4],[2249,2417,168],[3654,3782,128],[4348,6103,1755],[6211,6823,612],[7288,7293,1],[7468,7530,1],[7544,7579,35],[7580,7615,1],[8305,8319,14],[8336,8348,1],[11388,11389,1],[11631,11823,192],[12293,12337,44],[12338,12341,1],[12347,12445,98],[12446,12540,94],[12541,12542,1],[40981,42232,1251],[42233,42237,1],[42508,42623,115],[42652,42653,1],[42775,42783,1],[42864,42888,24],[42994,42996,1],[43e3,43001,1],[43471,43494,23],[43632,43741,109],[43763,43764,1],[43868,43871,1],[43881,65392,21511],[65438,65439,1],[67456,67461,1],[67463,67504,1],[67506,67514,1],[68942,68975,33],[92992,92995,1],[93504,93506,1],[93547,93548,1],[94099,94111,1],[94176,94177,1],[94179,110576,16397],[110577,110579,1],[110581,110587,1],[110589,110590,1],[122928,122989,1],[123191,123197,1],[124139,125259,1120]];static Lo=[[170,186,16],[443,448,5],[449,451,1],[660,1488,828],[1489,1514,1],[1519,1522,1],[1568,1599,1],[1601,1610,1],[1646,1647,1],[1649,1747,1],[1749,1774,25],[1775,1786,11],[1787,1788,1],[1791,1808,17],[1810,1839,1],[1869,1957,1],[1969,1994,25],[1995,2026,1],[2048,2069,1],[2112,2136,1],[2144,2154,1],[2160,2183,1],[2185,2190,1],[2208,2248,1],[2308,2361,1],[2365,2384,19],[2392,2401,1],[2418,2432,1],[2437,2444,1],[2447,2448,1],[2451,2472,1],[2474,2480,1],[2482,2486,4],[2487,2489,1],[2493,2510,17],[2524,2525,1],[2527,2529,1],[2544,2545,1],[2556,2565,9],[2566,2570,1],[2575,2576,1],[2579,2600,1],[2602,2608,1],[2610,2611,1],[2613,2614,1],[2616,2617,1],[2649,2652,1],[2654,2674,20],[2675,2676,1],[2693,2701,1],[2703,2705,1],[2707,2728,1],[2730,2736,1],[2738,2739,1],[2741,2745,1],[2749,2768,19],[2784,2785,1],[2809,2821,12],[2822,2828,1],[2831,2832,1],[2835,2856,1],[2858,2864,1],[2866,2867,1],[2869,2873,1],[2877,2908,31],[2909,2911,2],[2912,2913,1],[2929,2947,18],[2949,2954,1],[2958,2960,1],[2962,2965,1],[2969,2970,1],[2972,2974,2],[2975,2979,4],[2980,2984,4],[2985,2986,1],[2990,3001,1],[3024,3077,53],[3078,3084,1],[3086,3088,1],[3090,3112,1],[3114,3129,1],[3133,3160,27],[3161,3162,1],[3165,3168,3],[3169,3200,31],[3205,3212,1],[3214,3216,1],[3218,3240,1],[3242,3251,1],[3253,3257,1],[3261,3293,32],[3294,3296,2],[3297,3313,16],[3314,3332,18],[3333,3340,1],[3342,3344,1],[3346,3386,1],[3389,3406,17],[3412,3414,1],[3423,3425,1],[3450,3455,1],[3461,3478,1],[3482,3505,1],[3507,3515,1],[3517,3520,3],[3521,3526,1],[3585,3632,1],[3634,3635,1],[3648,3653,1],[3713,3714,1],[3716,3718,2],[3719,3722,1],[3724,3747,1],[3749,3751,2],[3752,3760,1],[3762,3763,1],[3773,3776,3],[3777,3780,1],[3804,3807,1],[3840,3904,64],[3905,3911,1],[3913,3948,1],[3976,3980,1],[4096,4138,1],[4159,4176,17],[4177,4181,1],[4186,4189,1],[4193,4197,4],[4198,4206,8],[4207,4208,1],[4213,4225,1],[4238,4352,114],[4353,4680,1],[4682,4685,1],[4688,4694,1],[4696,4698,2],[4699,4701,1],[4704,4744,1],[4746,4749,1],[4752,4784,1],[4786,4789,1],[4792,4798,1],[4800,4802,2],[4803,4805,1],[4808,4822,1],[4824,4880,1],[4882,4885,1],[4888,4954,1],[4992,5007,1],[5121,5740,1],[5743,5759,1],[5761,5786,1],[5792,5866,1],[5873,5880,1],[5888,5905,1],[5919,5937,1],[5952,5969,1],[5984,5996,1],[5998,6e3,1],[6016,6067,1],[6108,6176,68],[6177,6210,1],[6212,6264,1],[6272,6276,1],[6279,6312,1],[6314,6320,6],[6321,6389,1],[6400,6430,1],[6480,6509,1],[6512,6516,1],[6528,6571,1],[6576,6601,1],[6656,6678,1],[6688,6740,1],[6917,6963,1],[6981,6988,1],[7043,7072,1],[7086,7087,1],[7098,7141,1],[7168,7203,1],[7245,7247,1],[7258,7287,1],[7401,7404,1],[7406,7411,1],[7413,7414,1],[7418,8501,1083],[8502,8504,1],[11568,11623,1],[11648,11670,1],[11680,11686,1],[11688,11694,1],[11696,11702,1],[11704,11710,1],[11712,11718,1],[11720,11726,1],[11728,11734,1],[11736,11742,1],[12294,12348,54],[12353,12438,1],[12447,12449,2],[12450,12538,1],[12543,12549,6],[12550,12591,1],[12593,12686,1],[12704,12735,1],[12784,12799,1],[13312,19903,1],[19968,40980,1],[40982,42124,1],[42192,42231,1],[42240,42507,1],[42512,42527,1],[42538,42539,1],[42606,42656,50],[42657,42725,1],[42895,42999,104],[43003,43009,1],[43011,43013,1],[43015,43018,1],[43020,43042,1],[43072,43123,1],[43138,43187,1],[43250,43255,1],[43259,43261,2],[43262,43274,12],[43275,43301,1],[43312,43334,1],[43360,43388,1],[43396,43442,1],[43488,43492,1],[43495,43503,1],[43514,43518,1],[43520,43560,1],[43584,43586,1],[43588,43595,1],[43616,43631,1],[43633,43638,1],[43642,43646,4],[43647,43695,1],[43697,43701,4],[43702,43705,3],[43706,43709,1],[43712,43714,2],[43739,43740,1],[43744,43754,1],[43762,43777,15],[43778,43782,1],[43785,43790,1],[43793,43798,1],[43808,43814,1],[43816,43822,1],[43968,44002,1],[44032,55203,1],[55216,55238,1],[55243,55291,1],[63744,64109,1],[64112,64217,1],[64285,64287,2],[64288,64296,1],[64298,64310,1],[64312,64316,1],[64318,64320,2],[64321,64323,2],[64324,64326,2],[64327,64433,1],[64467,64829,1],[64848,64911,1],[64914,64967,1],[65008,65019,1],[65136,65140,1],[65142,65276,1],[65382,65391,1],[65393,65437,1],[65440,65470,1],[65474,65479,1],[65482,65487,1],[65490,65495,1],[65498,65500,1],[65536,65547,1],[65549,65574,1],[65576,65594,1],[65596,65597,1],[65599,65613,1],[65616,65629,1],[65664,65786,1],[66176,66204,1],[66208,66256,1],[66304,66335,1],[66349,66368,1],[66370,66377,1],[66384,66421,1],[66432,66461,1],[66464,66499,1],[66504,66511,1],[66640,66717,1],[66816,66855,1],[66864,66915,1],[67008,67059,1],[67072,67382,1],[67392,67413,1],[67424,67431,1],[67584,67589,1],[67592,67594,2],[67595,67637,1],[67639,67640,1],[67644,67647,3],[67648,67669,1],[67680,67702,1],[67712,67742,1],[67808,67826,1],[67828,67829,1],[67840,67861,1],[67872,67897,1],[67968,68023,1],[68030,68031,1],[68096,68112,16],[68113,68115,1],[68117,68119,1],[68121,68149,1],[68192,68220,1],[68224,68252,1],[68288,68295,1],[68297,68324,1],[68352,68405,1],[68416,68437,1],[68448,68466,1],[68480,68497,1],[68608,68680,1],[68864,68899,1],[68938,68941,1],[68943,69248,305],[69249,69289,1],[69296,69297,1],[69314,69316,1],[69376,69404,1],[69415,69424,9],[69425,69445,1],[69488,69505,1],[69552,69572,1],[69600,69622,1],[69635,69687,1],[69745,69746,1],[69749,69763,14],[69764,69807,1],[69840,69864,1],[69891,69926,1],[69956,69959,3],[69968,70002,1],[70006,70019,13],[70020,70066,1],[70081,70084,1],[70106,70108,2],[70144,70161,1],[70163,70187,1],[70207,70208,1],[70272,70278,1],[70280,70282,2],[70283,70285,1],[70287,70301,1],[70303,70312,1],[70320,70366,1],[70405,70412,1],[70415,70416,1],[70419,70440,1],[70442,70448,1],[70450,70451,1],[70453,70457,1],[70461,70480,19],[70493,70497,1],[70528,70537,1],[70539,70542,3],[70544,70581,1],[70583,70609,26],[70611,70656,45],[70657,70708,1],[70727,70730,1],[70751,70753,1],[70784,70831,1],[70852,70853,1],[70855,71040,185],[71041,71086,1],[71128,71131,1],[71168,71215,1],[71236,71296,60],[71297,71338,1],[71352,71424,72],[71425,71450,1],[71488,71494,1],[71680,71723,1],[71935,71942,1],[71945,71948,3],[71949,71955,1],[71957,71958,1],[71960,71983,1],[71999,72001,2],[72096,72103,1],[72106,72144,1],[72161,72163,2],[72192,72203,11],[72204,72242,1],[72250,72272,22],[72284,72329,1],[72349,72368,19],[72369,72440,1],[72640,72672,1],[72704,72712,1],[72714,72750,1],[72768,72818,50],[72819,72847,1],[72960,72966,1],[72968,72969,1],[72971,73008,1],[73030,73056,26],[73057,73061,1],[73063,73064,1],[73066,73097,1],[73112,73440,328],[73441,73458,1],[73474,73476,2],[73477,73488,1],[73490,73523,1],[73648,73728,80],[73729,74649,1],[74880,75075,1],[77712,77808,1],[77824,78895,1],[78913,78918,1],[78944,82938,1],[82944,83526,1],[90368,90397,1],[92160,92728,1],[92736,92766,1],[92784,92862,1],[92880,92909,1],[92928,92975,1],[93027,93047,1],[93053,93071,1],[93507,93546,1],[93952,94026,1],[94032,94208,176],[94209,100343,1],[100352,101589,1],[101631,101640,1],[110592,110882,1],[110898,110928,30],[110929,110930,1],[110933,110948,15],[110949,110951,1],[110960,111355,1],[113664,113770,1],[113776,113788,1],[113792,113800,1],[113808,113817,1],[122634,123136,502],[123137,123180,1],[123214,123536,322],[123537,123565,1],[123584,123627,1],[124112,124138,1],[124368,124397,1],[124400,124896,496],[124897,124902,1],[124904,124907,1],[124909,124910,1],[124912,124926,1],[124928,125124,1],[126464,126467,1],[126469,126495,1],[126497,126498,1],[126500,126503,3],[126505,126514,1],[126516,126519,1],[126521,126523,2],[126530,126535,5],[126537,126541,2],[126542,126543,1],[126545,126546,1],[126548,126551,3],[126553,126561,2],[126562,126564,2],[126567,126570,1],[126572,126578,1],[126580,126583,1],[126585,126588,1],[126590,126592,2],[126593,126601,1],[126603,126619,1],[126625,126627,1],[126629,126633,1],[126635,126651,1],[131072,173791,1],[173824,177977,1],[177984,178205,1],[178208,183969,1],[183984,191456,1],[191472,192093,1],[194560,195101,1],[196608,201546,1],[201552,205743,1]];static Lt=[[453,459,3],[498,8072,7574],[8073,8079,1],[8088,8095,1],[8104,8111,1],[8124,8140,16],[8188,8188,1]];static foldLt=[[452,454,2],[455,457,2],[458,460,2],[497,499,2],[8064,8071,1],[8080,8087,1],[8096,8103,1],[8115,8131,16],[8179,8179,1]];static Lu=[[65,90,1],[192,214,1],[216,222,1],[256,310,2],[313,327,2],[330,376,2],[377,381,2],[385,386,1],[388,390,2],[391,393,2],[394,395,1],[398,401,1],[403,404,1],[406,408,1],[412,413,1],[415,416,1],[418,422,2],[423,425,2],[428,430,2],[431,433,2],[434,435,1],[437,439,2],[440,444,4],[452,461,3],[463,475,2],[478,494,2],[497,500,3],[502,504,1],[506,562,2],[570,571,1],[573,574,1],[577,579,2],[580,582,1],[584,590,2],[880,882,2],[886,895,9],[902,904,2],[905,906,1],[908,910,2],[911,913,2],[914,929,1],[931,939,1],[975,978,3],[979,980,1],[984,1006,2],[1012,1015,3],[1017,1018,1],[1021,1071,1],[1120,1152,2],[1162,1216,2],[1217,1229,2],[1232,1326,2],[1329,1366,1],[4256,4293,1],[4295,4301,6],[5024,5109,1],[7305,7312,7],[7313,7354,1],[7357,7359,1],[7680,7828,2],[7838,7934,2],[7944,7951,1],[7960,7965,1],[7976,7983,1],[7992,7999,1],[8008,8013,1],[8025,8031,2],[8040,8047,1],[8120,8123,1],[8136,8139,1],[8152,8155,1],[8168,8172,1],[8184,8187,1],[8450,8455,5],[8459,8461,1],[8464,8466,1],[8469,8473,4],[8474,8477,1],[8484,8490,2],[8491,8493,1],[8496,8499,1],[8510,8511,1],[8517,8579,62],[11264,11311,1],[11360,11362,2],[11363,11364,1],[11367,11373,2],[11374,11376,1],[11378,11381,3],[11390,11392,1],[11394,11490,2],[11499,11501,2],[11506,42560,31054],[42562,42604,2],[42624,42650,2],[42786,42798,2],[42802,42862,2],[42873,42877,2],[42878,42886,2],[42891,42893,2],[42896,42898,2],[42902,42922,2],[42923,42926,1],[42928,42932,1],[42934,42948,2],[42949,42951,1],[42953,42955,2],[42956,42960,4],[42966,42972,2],[42997,65313,22316],[65314,65338,1],[66560,66599,1],[66736,66771,1],[66928,66938,1],[66940,66954,1],[66956,66962,1],[66964,66965,1],[68736,68786,1],[68944,68965,1],[71840,71871,1],[93760,93791,1],[119808,119833,1],[119860,119885,1],[119912,119937,1],[119964,119966,2],[119967,119973,3],[119974,119977,3],[119978,119980,1],[119982,119989,1],[120016,120041,1],[120068,120069,1],[120071,120074,1],[120077,120084,1],[120086,120092,1],[120120,120121,1],[120123,120126,1],[120128,120132,1],[120134,120138,4],[120139,120144,1],[120172,120197,1],[120224,120249,1],[120276,120301,1],[120328,120353,1],[120380,120405,1],[120432,120457,1],[120488,120512,1],[120546,120570,1],[120604,120628,1],[120662,120686,1],[120720,120744,1],[120778,125184,4406],[125185,125217,1]];static Upper=this.Lu;static foldLu=[[97,122,1],[181,223,42],[224,246,1],[248,255,1],[257,303,2],[307,311,2],[314,328,2],[331,375,2],[378,382,2],[383,384,1],[387,389,2],[392,396,4],[402,405,3],[409,411,1],[414,417,3],[419,421,2],[424,429,5],[432,436,4],[438,441,3],[445,447,2],[453,454,1],[456,457,1],[459,460,1],[462,476,2],[477,495,2],[498,499,1],[501,505,4],[507,543,2],[547,563,2],[572,575,3],[576,578,2],[583,591,2],[592,596,1],[598,599,1],[601,603,2],[604,608,4],[609,611,2],[612,614,1],[616,620,1],[623,625,2],[626,629,3],[637,640,3],[642,643,1],[647,652,1],[658,669,11],[670,837,167],[881,883,2],[887,891,4],[892,893,1],[940,943,1],[945,974,1],[976,977,1],[981,983,1],[985,1007,2],[1008,1011,1],[1013,1019,3],[1072,1119,1],[1121,1153,2],[1163,1215,2],[1218,1230,2],[1231,1327,2],[1377,1414,1],[4304,4346,1],[4349,4351,1],[5112,5117,1],[7296,7304,1],[7306,7545,239],[7549,7566,17],[7681,7829,2],[7835,7841,6],[7843,7935,2],[7936,7943,1],[7952,7957,1],[7968,7975,1],[7984,7991,1],[8e3,8005,1],[8017,8023,2],[8032,8039,1],[8048,8061,1],[8112,8113,1],[8126,8144,18],[8145,8160,15],[8161,8165,4],[8526,8580,54],[11312,11359,1],[11361,11365,4],[11366,11372,2],[11379,11382,3],[11393,11491,2],[11500,11502,2],[11507,11520,13],[11521,11557,1],[11559,11565,6],[42561,42605,2],[42625,42651,2],[42787,42799,2],[42803,42863,2],[42874,42876,2],[42879,42887,2],[42892,42897,5],[42899,42900,1],[42903,42921,2],[42933,42947,2],[42952,42954,2],[42957,42961,4],[42967,42971,2],[42998,43859,861],[43888,43967,1],[65345,65370,1],[66600,66639,1],[66776,66811,1],[66967,66977,1],[66979,66993,1],[66995,67001,1],[67003,67004,1],[68800,68850,1],[68976,68997,1],[71872,71903,1],[93792,93823,1],[125218,125251,1]];static M=[[768,879,1],[1155,1161,1],[1425,1469,1],[1471,1473,2],[1474,1476,2],[1477,1479,2],[1552,1562,1],[1611,1631,1],[1648,1750,102],[1751,1756,1],[1759,1764,1],[1767,1768,1],[1770,1773,1],[1809,1840,31],[1841,1866,1],[1958,1968,1],[2027,2035,1],[2045,2070,25],[2071,2073,1],[2075,2083,1],[2085,2087,1],[2089,2093,1],[2137,2139,1],[2199,2207,1],[2250,2273,1],[2275,2307,1],[2362,2364,1],[2366,2383,1],[2385,2391,1],[2402,2403,1],[2433,2435,1],[2492,2494,2],[2495,2500,1],[2503,2504,1],[2507,2509,1],[2519,2530,11],[2531,2558,27],[2561,2563,1],[2620,2622,2],[2623,2626,1],[2631,2632,1],[2635,2637,1],[2641,2672,31],[2673,2677,4],[2689,2691,1],[2748,2750,2],[2751,2757,1],[2759,2761,1],[2763,2765,1],[2786,2787,1],[2810,2815,1],[2817,2819,1],[2876,2878,2],[2879,2884,1],[2887,2888,1],[2891,2893,1],[2901,2903,1],[2914,2915,1],[2946,3006,60],[3007,3010,1],[3014,3016,1],[3018,3021,1],[3031,3072,41],[3073,3076,1],[3132,3134,2],[3135,3140,1],[3142,3144,1],[3146,3149,1],[3157,3158,1],[3170,3171,1],[3201,3203,1],[3260,3262,2],[3263,3268,1],[3270,3272,1],[3274,3277,1],[3285,3286,1],[3298,3299,1],[3315,3328,13],[3329,3331,1],[3387,3388,1],[3390,3396,1],[3398,3400,1],[3402,3405,1],[3415,3426,11],[3427,3457,30],[3458,3459,1],[3530,3535,5],[3536,3540,1],[3542,3544,2],[3545,3551,1],[3570,3571,1],[3633,3636,3],[3637,3642,1],[3655,3662,1],[3761,3764,3],[3765,3772,1],[3784,3790,1],[3864,3865,1],[3893,3897,2],[3902,3903,1],[3953,3972,1],[3974,3975,1],[3981,3991,1],[3993,4028,1],[4038,4139,101],[4140,4158,1],[4182,4185,1],[4190,4192,1],[4194,4196,1],[4199,4205,1],[4209,4212,1],[4226,4237,1],[4239,4250,11],[4251,4253,1],[4957,4959,1],[5906,5909,1],[5938,5940,1],[5970,5971,1],[6002,6003,1],[6068,6099,1],[6109,6155,46],[6156,6157,1],[6159,6277,118],[6278,6313,35],[6432,6443,1],[6448,6459,1],[6679,6683,1],[6741,6750,1],[6752,6780,1],[6783,6832,49],[6833,6862,1],[6912,6916,1],[6964,6980,1],[7019,7027,1],[7040,7042,1],[7073,7085,1],[7142,7155,1],[7204,7223,1],[7376,7378,1],[7380,7400,1],[7405,7412,7],[7415,7417,1],[7616,7679,1],[8400,8432,1],[11503,11505,1],[11647,11744,97],[11745,11775,1],[12330,12335,1],[12441,12442,1],[42607,42610,1],[42612,42621,1],[42654,42655,1],[42736,42737,1],[43010,43014,4],[43019,43043,24],[43044,43047,1],[43052,43136,84],[43137,43188,51],[43189,43205,1],[43232,43249,1],[43263,43302,39],[43303,43309,1],[43335,43347,1],[43392,43395,1],[43443,43456,1],[43493,43561,68],[43562,43574,1],[43587,43596,9],[43597,43643,46],[43644,43645,1],[43696,43698,2],[43699,43700,1],[43703,43704,1],[43710,43711,1],[43713,43755,42],[43756,43759,1],[43765,43766,1],[44003,44010,1],[44012,44013,1],[64286,65024,738],[65025,65039,1],[65056,65071,1],[66045,66272,227],[66422,66426,1],[68097,68099,1],[68101,68102,1],[68108,68111,1],[68152,68154,1],[68159,68325,166],[68326,68900,574],[68901,68903,1],[68969,68973,1],[69291,69292,1],[69372,69375,1],[69446,69456,1],[69506,69509,1],[69632,69634,1],[69688,69702,1],[69744,69747,3],[69748,69759,11],[69760,69762,1],[69808,69818,1],[69826,69888,62],[69889,69890,1],[69927,69940,1],[69957,69958,1],[70003,70016,13],[70017,70018,1],[70067,70080,1],[70089,70092,1],[70094,70095,1],[70188,70199,1],[70206,70209,3],[70367,70378,1],[70400,70403,1],[70459,70460,1],[70462,70468,1],[70471,70472,1],[70475,70477,1],[70487,70498,11],[70499,70502,3],[70503,70508,1],[70512,70516,1],[70584,70592,1],[70594,70597,3],[70599,70602,1],[70604,70608,1],[70610,70625,15],[70626,70709,83],[70710,70726,1],[70750,70832,82],[70833,70851,1],[71087,71093,1],[71096,71104,1],[71132,71133,1],[71216,71232,1],[71339,71351,1],[71453,71467,1],[71724,71738,1],[71984,71989,1],[71991,71992,1],[71995,71998,1],[72e3,72002,2],[72003,72145,142],[72146,72151,1],[72154,72160,1],[72164,72193,29],[72194,72202,1],[72243,72249,1],[72251,72254,1],[72263,72273,10],[72274,72283,1],[72330,72345,1],[72751,72758,1],[72760,72767,1],[72850,72871,1],[72873,72886,1],[73009,73014,1],[73018,73020,2],[73021,73023,2],[73024,73029,1],[73031,73098,67],[73099,73102,1],[73104,73105,1],[73107,73111,1],[73459,73462,1],[73472,73473,1],[73475,73524,49],[73525,73530,1],[73534,73538,1],[73562,78912,5350],[78919,78933,1],[90398,90415,1],[92912,92916,1],[92976,92982,1],[94031,94033,2],[94034,94087,1],[94095,94098,1],[94180,94192,12],[94193,113821,19628],[113822,118528,4706],[118529,118573,1],[118576,118598,1],[119141,119145,1],[119149,119154,1],[119163,119170,1],[119173,119179,1],[119210,119213,1],[119362,119364,1],[121344,121398,1],[121403,121452,1],[121461,121476,15],[121499,121503,1],[121505,121519,1],[122880,122886,1],[122888,122904,1],[122907,122913,1],[122915,122916,1],[122918,122922,1],[123023,123184,161],[123185,123190,1],[123566,123628,62],[123629,123631,1],[124140,124143,1],[124398,124399,1],[125136,125142,1],[125252,125258,1],[917760,917999,1]];static foldM=[[921,953,32],[8126,8126,1]];static Mc=[[2307,2363,56],[2366,2368,1],[2377,2380,1],[2382,2383,1],[2434,2435,1],[2494,2496,1],[2503,2504,1],[2507,2508,1],[2519,2563,44],[2622,2624,1],[2691,2750,59],[2751,2752,1],[2761,2763,2],[2764,2818,54],[2819,2878,59],[2880,2887,7],[2888,2891,3],[2892,2903,11],[3006,3007,1],[3009,3010,1],[3014,3016,1],[3018,3020,1],[3031,3073,42],[3074,3075,1],[3137,3140,1],[3202,3203,1],[3262,3264,2],[3265,3268,1],[3271,3272,1],[3274,3275,1],[3285,3286,1],[3315,3330,15],[3331,3390,59],[3391,3392,1],[3398,3400,1],[3402,3404,1],[3415,3458,43],[3459,3535,76],[3536,3537,1],[3544,3551,1],[3570,3571,1],[3902,3903,1],[3967,4139,172],[4140,4145,5],[4152,4155,3],[4156,4182,26],[4183,4194,11],[4195,4196,1],[4199,4205,1],[4227,4228,1],[4231,4236,1],[4239,4250,11],[4251,4252,1],[5909,5940,31],[6070,6078,8],[6079,6085,1],[6087,6088,1],[6435,6438,1],[6441,6443,1],[6448,6449,1],[6451,6456,1],[6681,6682,1],[6741,6743,2],[6753,6755,2],[6756,6765,9],[6766,6770,1],[6916,6965,49],[6971,6973,2],[6974,6977,1],[6979,6980,1],[7042,7073,31],[7078,7079,1],[7082,7143,61],[7146,7148,1],[7150,7154,4],[7155,7204,49],[7205,7211,1],[7220,7221,1],[7393,7415,22],[12334,12335,1],[43043,43044,1],[43047,43136,89],[43137,43188,51],[43189,43203,1],[43346,43347,1],[43395,43444,49],[43445,43450,5],[43451,43454,3],[43455,43456,1],[43567,43568,1],[43571,43572,1],[43597,43643,46],[43645,43755,110],[43758,43759,1],[43765,44003,238],[44004,44006,2],[44007,44009,2],[44010,44012,2],[69632,69634,2],[69762,69808,46],[69809,69810,1],[69815,69816,1],[69932,69957,25],[69958,70018,60],[70067,70069,1],[70079,70080,1],[70094,70188,94],[70189,70190,1],[70194,70195,1],[70197,70368,171],[70369,70370,1],[70402,70403,1],[70462,70463,1],[70465,70468,1],[70471,70472,1],[70475,70477,1],[70487,70498,11],[70499,70584,85],[70585,70586,1],[70594,70597,3],[70599,70602,1],[70604,70605,1],[70607,70709,102],[70710,70711,1],[70720,70721,1],[70725,70832,107],[70833,70834,1],[70841,70843,2],[70844,70846,1],[70849,71087,238],[71088,71089,1],[71096,71099,1],[71102,71216,114],[71217,71218,1],[71227,71228,1],[71230,71340,110],[71342,71343,1],[71350,71454,104],[71456,71457,1],[71462,71724,262],[71725,71726,1],[71736,71984,248],[71985,71989,1],[71991,71992,1],[71997,72e3,3],[72002,72145,143],[72146,72147,1],[72156,72159,1],[72164,72249,85],[72279,72280,1],[72343,72751,408],[72766,72873,107],[72881,72884,3],[73098,73102,1],[73107,73108,1],[73110,73461,351],[73462,73475,13],[73524,73525,1],[73534,73535,1],[73537,90410,16873],[90411,90412,1],[94033,94087,1],[94192,94193,1],[119141,119142,1],[119149,119154,1]];static Me=[[1160,1161,1],[6846,8413,1567],[8414,8416,1],[8418,8420,1],[42608,42610,1]];static Mn=[[768,879,1],[1155,1159,1],[1425,1469,1],[1471,1473,2],[1474,1476,2],[1477,1479,2],[1552,1562,1],[1611,1631,1],[1648,1750,102],[1751,1756,1],[1759,1764,1],[1767,1768,1],[1770,1773,1],[1809,1840,31],[1841,1866,1],[1958,1968,1],[2027,2035,1],[2045,2070,25],[2071,2073,1],[2075,2083,1],[2085,2087,1],[2089,2093,1],[2137,2139,1],[2199,2207,1],[2250,2273,1],[2275,2306,1],[2362,2364,2],[2369,2376,1],[2381,2385,4],[2386,2391,1],[2402,2403,1],[2433,2492,59],[2497,2500,1],[2509,2530,21],[2531,2558,27],[2561,2562,1],[2620,2625,5],[2626,2631,5],[2632,2635,3],[2636,2637,1],[2641,2672,31],[2673,2677,4],[2689,2690,1],[2748,2753,5],[2754,2757,1],[2759,2760,1],[2765,2786,21],[2787,2810,23],[2811,2815,1],[2817,2876,59],[2879,2881,2],[2882,2884,1],[2893,2901,8],[2902,2914,12],[2915,2946,31],[3008,3021,13],[3072,3076,4],[3132,3134,2],[3135,3136,1],[3142,3144,1],[3146,3149,1],[3157,3158,1],[3170,3171,1],[3201,3260,59],[3263,3270,7],[3276,3277,1],[3298,3299,1],[3328,3329,1],[3387,3388,1],[3393,3396,1],[3405,3426,21],[3427,3457,30],[3530,3538,8],[3539,3540,1],[3542,3633,91],[3636,3642,1],[3655,3662,1],[3761,3764,3],[3765,3772,1],[3784,3790,1],[3864,3865,1],[3893,3897,2],[3953,3966,1],[3968,3972,1],[3974,3975,1],[3981,3991,1],[3993,4028,1],[4038,4141,103],[4142,4144,1],[4146,4151,1],[4153,4154,1],[4157,4158,1],[4184,4185,1],[4190,4192,1],[4209,4212,1],[4226,4229,3],[4230,4237,7],[4253,4957,704],[4958,4959,1],[5906,5908,1],[5938,5939,1],[5970,5971,1],[6002,6003,1],[6068,6069,1],[6071,6077,1],[6086,6089,3],[6090,6099,1],[6109,6155,46],[6156,6157,1],[6159,6277,118],[6278,6313,35],[6432,6434,1],[6439,6440,1],[6450,6457,7],[6458,6459,1],[6679,6680,1],[6683,6742,59],[6744,6750,1],[6752,6754,2],[6757,6764,1],[6771,6780,1],[6783,6832,49],[6833,6845,1],[6847,6862,1],[6912,6915,1],[6964,6966,2],[6967,6970,1],[6972,6978,6],[7019,7027,1],[7040,7041,1],[7074,7077,1],[7080,7081,1],[7083,7085,1],[7142,7144,2],[7145,7149,4],[7151,7153,1],[7212,7219,1],[7222,7223,1],[7376,7378,1],[7380,7392,1],[7394,7400,1],[7405,7412,7],[7416,7417,1],[7616,7679,1],[8400,8412,1],[8417,8421,4],[8422,8432,1],[11503,11505,1],[11647,11744,97],[11745,11775,1],[12330,12333,1],[12441,12442,1],[42607,42612,5],[42613,42621,1],[42654,42655,1],[42736,42737,1],[43010,43014,4],[43019,43045,26],[43046,43052,6],[43204,43205,1],[43232,43249,1],[43263,43302,39],[43303,43309,1],[43335,43345,1],[43392,43394,1],[43443,43446,3],[43447,43449,1],[43452,43453,1],[43493,43561,68],[43562,43566,1],[43569,43570,1],[43573,43574,1],[43587,43596,9],[43644,43696,52],[43698,43700,1],[43703,43704,1],[43710,43711,1],[43713,43756,43],[43757,43766,9],[44005,44008,3],[44013,64286,20273],[65024,65039,1],[65056,65071,1],[66045,66272,227],[66422,66426,1],[68097,68099,1],[68101,68102,1],[68108,68111,1],[68152,68154,1],[68159,68325,166],[68326,68900,574],[68901,68903,1],[68969,68973,1],[69291,69292,1],[69372,69375,1],[69446,69456,1],[69506,69509,1],[69633,69688,55],[69689,69702,1],[69744,69747,3],[69748,69759,11],[69760,69761,1],[69811,69814,1],[69817,69818,1],[69826,69888,62],[69889,69890,1],[69927,69931,1],[69933,69940,1],[70003,70016,13],[70017,70070,53],[70071,70078,1],[70089,70092,1],[70095,70191,96],[70192,70193,1],[70196,70198,2],[70199,70206,7],[70209,70367,158],[70371,70378,1],[70400,70401,1],[70459,70460,1],[70464,70502,38],[70503,70508,1],[70512,70516,1],[70587,70592,1],[70606,70610,2],[70625,70626,1],[70712,70719,1],[70722,70724,1],[70726,70750,24],[70835,70840,1],[70842,70847,5],[70848,70850,2],[70851,71090,239],[71091,71093,1],[71100,71101,1],[71103,71104,1],[71132,71133,1],[71219,71226,1],[71229,71231,2],[71232,71339,107],[71341,71344,3],[71345,71349,1],[71351,71453,102],[71455,71458,3],[71459,71461,1],[71463,71467,1],[71727,71735,1],[71737,71738,1],[71995,71996,1],[71998,72003,5],[72148,72151,1],[72154,72155,1],[72160,72193,33],[72194,72202,1],[72243,72248,1],[72251,72254,1],[72263,72273,10],[72274,72278,1],[72281,72283,1],[72330,72342,1],[72344,72345,1],[72752,72758,1],[72760,72765,1],[72767,72850,83],[72851,72871,1],[72874,72880,1],[72882,72883,1],[72885,72886,1],[73009,73014,1],[73018,73020,2],[73021,73023,2],[73024,73029,1],[73031,73104,73],[73105,73109,4],[73111,73459,348],[73460,73472,12],[73473,73526,53],[73527,73530,1],[73536,73538,2],[73562,78912,5350],[78919,78933,1],[90398,90409,1],[90413,90415,1],[92912,92916,1],[92976,92982,1],[94031,94095,64],[94096,94098,1],[94180,113821,19641],[113822,118528,4706],[118529,118573,1],[118576,118598,1],[119143,119145,1],[119163,119170,1],[119173,119179,1],[119210,119213,1],[119362,119364,1],[121344,121398,1],[121403,121452,1],[121461,121476,15],[121499,121503,1],[121505,121519,1],[122880,122886,1],[122888,122904,1],[122907,122913,1],[122915,122916,1],[122918,122922,1],[123023,123184,161],[123185,123190,1],[123566,123628,62],[123629,123631,1],[124140,124143,1],[124398,124399,1],[125136,125142,1],[125252,125258,1],[917760,917999,1]];static foldMn=[[921,953,32],[8126,8126,1]];static N=[[48,57,1],[178,179,1],[185,188,3],[189,190,1],[1632,1641,1],[1776,1785,1],[1984,1993,1],[2406,2415,1],[2534,2543,1],[2548,2553,1],[2662,2671,1],[2790,2799,1],[2918,2927,1],[2930,2935,1],[3046,3058,1],[3174,3183,1],[3192,3198,1],[3302,3311,1],[3416,3422,1],[3430,3448,1],[3558,3567,1],[3664,3673,1],[3792,3801,1],[3872,3891,1],[4160,4169,1],[4240,4249,1],[4969,4988,1],[5870,5872,1],[6112,6121,1],[6128,6137,1],[6160,6169,1],[6470,6479,1],[6608,6618,1],[6784,6793,1],[6800,6809,1],[6992,7001,1],[7088,7097,1],[7232,7241,1],[7248,7257,1],[8304,8308,4],[8309,8313,1],[8320,8329,1],[8528,8578,1],[8581,8585,1],[9312,9371,1],[9450,9471,1],[10102,10131,1],[11517,12295,778],[12321,12329,1],[12344,12346,1],[12690,12693,1],[12832,12841,1],[12872,12879,1],[12881,12895,1],[12928,12937,1],[12977,12991,1],[42528,42537,1],[42726,42735,1],[43056,43061,1],[43216,43225,1],[43264,43273,1],[43472,43481,1],[43504,43513,1],[43600,43609,1],[44016,44025,1],[65296,65305,1],[65799,65843,1],[65856,65912,1],[65930,65931,1],[66273,66299,1],[66336,66339,1],[66369,66378,9],[66513,66517,1],[66720,66729,1],[67672,67679,1],[67705,67711,1],[67751,67759,1],[67835,67839,1],[67862,67867,1],[68028,68029,1],[68032,68047,1],[68050,68095,1],[68160,68168,1],[68221,68222,1],[68253,68255,1],[68331,68335,1],[68440,68447,1],[68472,68479,1],[68521,68527,1],[68858,68863,1],[68912,68921,1],[68928,68937,1],[69216,69246,1],[69405,69414,1],[69457,69460,1],[69573,69579,1],[69714,69743,1],[69872,69881,1],[69942,69951,1],[70096,70105,1],[70113,70132,1],[70384,70393,1],[70736,70745,1],[70864,70873,1],[71248,71257,1],[71360,71369,1],[71376,71395,1],[71472,71483,1],[71904,71922,1],[72016,72025,1],[72688,72697,1],[72784,72812,1],[73040,73049,1],[73120,73129,1],[73552,73561,1],[73664,73684,1],[74752,74862,1],[90416,90425,1],[92768,92777,1],[92864,92873,1],[93008,93017,1],[93019,93025,1],[93552,93561,1],[93824,93846,1],[118e3,118009,1],[119488,119507,1],[119520,119539,1],[119648,119672,1],[120782,120831,1],[123200,123209,1],[123632,123641,1],[124144,124153,1],[124401,124410,1],[125127,125135,1],[125264,125273,1],[126065,126123,1],[126125,126127,1],[126129,126132,1],[126209,126253,1],[126255,126269,1],[127232,127244,1],[130032,130041,1]];static Nd=[[48,57,1],[1632,1641,1],[1776,1785,1],[1984,1993,1],[2406,2415,1],[2534,2543,1],[2662,2671,1],[2790,2799,1],[2918,2927,1],[3046,3055,1],[3174,3183,1],[3302,3311,1],[3430,3439,1],[3558,3567,1],[3664,3673,1],[3792,3801,1],[3872,3881,1],[4160,4169,1],[4240,4249,1],[6112,6121,1],[6160,6169,1],[6470,6479,1],[6608,6617,1],[6784,6793,1],[6800,6809,1],[6992,7001,1],[7088,7097,1],[7232,7241,1],[7248,7257,1],[42528,42537,1],[43216,43225,1],[43264,43273,1],[43472,43481,1],[43504,43513,1],[43600,43609,1],[44016,44025,1],[65296,65305,1],[66720,66729,1],[68912,68921,1],[68928,68937,1],[69734,69743,1],[69872,69881,1],[69942,69951,1],[70096,70105,1],[70384,70393,1],[70736,70745,1],[70864,70873,1],[71248,71257,1],[71360,71369,1],[71376,71395,1],[71472,71481,1],[71904,71913,1],[72016,72025,1],[72688,72697,1],[72784,72793,1],[73040,73049,1],[73120,73129,1],[73552,73561,1],[90416,90425,1],[92768,92777,1],[92864,92873,1],[93008,93017,1],[93552,93561,1],[118e3,118009,1],[120782,120831,1],[123200,123209,1],[123632,123641,1],[124144,124153,1],[124401,124410,1],[125264,125273,1],[130032,130041,1]];static Nl=[[5870,5872,1],[8544,8578,1],[8581,8584,1],[12295,12321,26],[12322,12329,1],[12344,12346,1],[42726,42735,1],[65856,65908,1],[66369,66378,9],[66513,66517,1],[74752,74862,1]];static No=[[178,179,1],[185,188,3],[189,190,1],[2548,2553,1],[2930,2935,1],[3056,3058,1],[3192,3198,1],[3416,3422,1],[3440,3448,1],[3882,3891,1],[4969,4988,1],[6128,6137,1],[6618,8304,1686],[8308,8313,1],[8320,8329,1],[8528,8543,1],[8585,9312,727],[9313,9371,1],[9450,9471,1],[10102,10131,1],[11517,12690,1173],[12691,12693,1],[12832,12841,1],[12872,12879,1],[12881,12895,1],[12928,12937,1],[12977,12991,1],[43056,43061,1],[65799,65843,1],[65909,65912,1],[65930,65931,1],[66273,66299,1],[66336,66339,1],[67672,67679,1],[67705,67711,1],[67751,67759,1],[67835,67839,1],[67862,67867,1],[68028,68029,1],[68032,68047,1],[68050,68095,1],[68160,68168,1],[68221,68222,1],[68253,68255,1],[68331,68335,1],[68440,68447,1],[68472,68479,1],[68521,68527,1],[68858,68863,1],[69216,69246,1],[69405,69414,1],[69457,69460,1],[69573,69579,1],[69714,69733,1],[70113,70132,1],[71482,71483,1],[71914,71922,1],[72794,72812,1],[73664,73684,1],[93019,93025,1],[93824,93846,1],[119488,119507,1],[119520,119539,1],[119648,119672,1],[125127,125135,1],[126065,126123,1],[126125,126127,1],[126129,126132,1],[126209,126253,1],[126255,126269,1],[127232,127244,1]];static P=[[33,35,1],[37,42,1],[44,47,1],[58,59,1],[63,64,1],[91,93,1],[95,123,28],[125,161,36],[167,171,4],[182,183,1],[187,191,4],[894,903,9],[1370,1375,1],[1417,1418,1],[1470,1472,2],[1475,1478,3],[1523,1524,1],[1545,1546,1],[1548,1549,1],[1563,1565,2],[1566,1567,1],[1642,1645,1],[1748,1792,44],[1793,1805,1],[2039,2041,1],[2096,2110,1],[2142,2404,262],[2405,2416,11],[2557,2678,121],[2800,3191,391],[3204,3572,368],[3663,3674,11],[3675,3844,169],[3845,3858,1],[3860,3898,38],[3899,3901,1],[3973,4048,75],[4049,4052,1],[4057,4058,1],[4170,4175,1],[4347,4960,613],[4961,4968,1],[5120,5742,622],[5787,5788,1],[5867,5869,1],[5941,5942,1],[6100,6102,1],[6104,6106,1],[6144,6154,1],[6468,6469,1],[6686,6687,1],[6816,6822,1],[6824,6829,1],[6990,6991,1],[7002,7008,1],[7037,7039,1],[7164,7167,1],[7227,7231,1],[7294,7295,1],[7360,7367,1],[7379,8208,829],[8209,8231,1],[8240,8259,1],[8261,8273,1],[8275,8286,1],[8317,8318,1],[8333,8334,1],[8968,8971,1],[9001,9002,1],[10088,10101,1],[10181,10182,1],[10214,10223,1],[10627,10648,1],[10712,10715,1],[10748,10749,1],[11513,11516,1],[11518,11519,1],[11632,11776,144],[11777,11822,1],[11824,11855,1],[11858,11869,1],[12289,12291,1],[12296,12305,1],[12308,12319,1],[12336,12349,13],[12448,12539,91],[42238,42239,1],[42509,42511,1],[42611,42622,11],[42738,42743,1],[43124,43127,1],[43214,43215,1],[43256,43258,1],[43260,43310,50],[43311,43359,48],[43457,43469,1],[43486,43487,1],[43612,43615,1],[43742,43743,1],[43760,43761,1],[44011,64830,20819],[64831,65040,209],[65041,65049,1],[65072,65106,1],[65108,65121,1],[65123,65128,5],[65130,65131,1],[65281,65283,1],[65285,65290,1],[65292,65295,1],[65306,65307,1],[65311,65312,1],[65339,65341,1],[65343,65371,28],[65373,65375,2],[65376,65381,1],[65792,65794,1],[66463,66512,49],[66927,67671,744],[67871,67903,32],[68176,68184,1],[68223,68336,113],[68337,68342,1],[68409,68415,1],[68505,68508,1],[68974,69293,319],[69461,69465,1],[69510,69513,1],[69703,69709,1],[69819,69820,1],[69822,69825,1],[69952,69955,1],[70004,70005,1],[70085,70088,1],[70093,70107,14],[70109,70111,1],[70200,70205,1],[70313,70612,299],[70613,70615,2],[70616,70731,115],[70732,70735,1],[70746,70747,1],[70749,70854,105],[71105,71127,1],[71233,71235,1],[71264,71276,1],[71353,71484,131],[71485,71486,1],[71739,72004,265],[72005,72006,1],[72162,72255,93],[72256,72262,1],[72346,72348,1],[72350,72354,1],[72448,72457,1],[72673,72769,96],[72770,72773,1],[72816,72817,1],[73463,73464,1],[73539,73551,1],[73727,74864,1137],[74865,74868,1],[77809,77810,1],[92782,92783,1],[92917,92983,66],[92984,92987,1],[92996,93549,553],[93550,93551,1],[93847,93850,1],[94178,113823,19645],[121479,121483,1],[124415,125278,863],[125279,125279,1]];static Pc=[[95,8255,8160],[8256,8276,20],[65075,65076,1],[65101,65103,1],[65343,65343,1]];static Pd=[[45,1418,1373],[1470,5120,3650],[6150,8208,2058],[8209,8213,1],[11799,11802,3],[11834,11835,1],[11840,11869,29],[12316,12336,20],[12448,65073,52625],[65074,65112,38],[65123,65293,170],[68974,69293,319]];static Pe=[[41,93,52],[125,3899,3774],[3901,5788,1887],[8262,8318,56],[8334,8969,635],[8971,9002,31],[10089,10101,2],[10182,10215,33],[10217,10223,2],[10628,10648,2],[10713,10715,2],[10749,11811,1062],[11813,11817,2],[11862,11868,2],[12297,12305,2],[12309,12315,2],[12318,12319,1],[64830,65048,218],[65078,65092,2],[65096,65114,18],[65116,65118,2],[65289,65341,52],[65373,65379,3]];static Pf=[[187,8217,8030],[8221,8250,29],[11779,11781,2],[11786,11789,3],[11805,11809,4]];static Pi=[[171,8216,8045],[8219,8220,1],[8223,8249,26],[11778,11780,2],[11785,11788,3],[11804,11808,4]];static Po=[[33,35,1],[37,39,1],[42,46,2],[47,58,11],[59,63,4],[64,92,28],[161,167,6],[182,183,1],[191,894,703],[903,1370,467],[1371,1375,1],[1417,1472,55],[1475,1478,3],[1523,1524,1],[1545,1546,1],[1548,1549,1],[1563,1565,2],[1566,1567,1],[1642,1645,1],[1748,1792,44],[1793,1805,1],[2039,2041,1],[2096,2110,1],[2142,2404,262],[2405,2416,11],[2557,2678,121],[2800,3191,391],[3204,3572,368],[3663,3674,11],[3675,3844,169],[3845,3858,1],[3860,3973,113],[4048,4052,1],[4057,4058,1],[4170,4175,1],[4347,4960,613],[4961,4968,1],[5742,5867,125],[5868,5869,1],[5941,5942,1],[6100,6102,1],[6104,6106,1],[6144,6149,1],[6151,6154,1],[6468,6469,1],[6686,6687,1],[6816,6822,1],[6824,6829,1],[6990,6991,1],[7002,7008,1],[7037,7039,1],[7164,7167,1],[7227,7231,1],[7294,7295,1],[7360,7367,1],[7379,8214,835],[8215,8224,9],[8225,8231,1],[8240,8248,1],[8251,8254,1],[8257,8259,1],[8263,8273,1],[8275,8277,2],[8278,8286,1],[11513,11516,1],[11518,11519,1],[11632,11776,144],[11777,11782,5],[11783,11784,1],[11787,11790,3],[11791,11798,1],[11800,11801,1],[11803,11806,3],[11807,11818,11],[11819,11822,1],[11824,11833,1],[11836,11839,1],[11841,11843,2],[11844,11855,1],[11858,11860,1],[12289,12291,1],[12349,12539,190],[42238,42239,1],[42509,42511,1],[42611,42622,11],[42738,42743,1],[43124,43127,1],[43214,43215,1],[43256,43258,1],[43260,43310,50],[43311,43359,48],[43457,43469,1],[43486,43487,1],[43612,43615,1],[43742,43743,1],[43760,43761,1],[44011,65040,21029],[65041,65046,1],[65049,65072,23],[65093,65094,1],[65097,65100,1],[65104,65106,1],[65108,65111,1],[65119,65121,1],[65128,65130,2],[65131,65281,150],[65282,65283,1],[65285,65287,1],[65290,65294,2],[65295,65306,11],[65307,65311,4],[65312,65340,28],[65377,65380,3],[65381,65792,411],[65793,65794,1],[66463,66512,49],[66927,67671,744],[67871,67903,32],[68176,68184,1],[68223,68336,113],[68337,68342,1],[68409,68415,1],[68505,68508,1],[69461,69465,1],[69510,69513,1],[69703,69709,1],[69819,69820,1],[69822,69825,1],[69952,69955,1],[70004,70005,1],[70085,70088,1],[70093,70107,14],[70109,70111,1],[70200,70205,1],[70313,70612,299],[70613,70615,2],[70616,70731,115],[70732,70735,1],[70746,70747,1],[70749,70854,105],[71105,71127,1],[71233,71235,1],[71264,71276,1],[71353,71484,131],[71485,71486,1],[71739,72004,265],[72005,72006,1],[72162,72255,93],[72256,72262,1],[72346,72348,1],[72350,72354,1],[72448,72457,1],[72673,72769,96],[72770,72773,1],[72816,72817,1],[73463,73464,1],[73539,73551,1],[73727,74864,1137],[74865,74868,1],[77809,77810,1],[92782,92783,1],[92917,92983,66],[92984,92987,1],[92996,93549,553],[93550,93551,1],[93847,93850,1],[94178,113823,19645],[121479,121483,1],[124415,125278,863],[125279,125279,1]];static Ps=[[40,91,51],[123,3898,3775],[3900,5787,1887],[8218,8222,4],[8261,8317,56],[8333,8968,635],[8970,9001,31],[10088,10100,2],[10181,10214,33],[10216,10222,2],[10627,10647,2],[10712,10714,2],[10748,11810,1062],[11812,11816,2],[11842,11861,19],[11863,11867,2],[12296,12304,2],[12308,12314,2],[12317,64831,52514],[65047,65077,30],[65079,65091,2],[65095,65113,18],[65115,65117,2],[65288,65339,51],[65371,65375,4],[65378,65378,1]];static S=[[36,43,7],[60,62,1],[94,96,2],[124,126,2],[162,166,1],[168,169,1],[172,174,2],[175,177,1],[180,184,4],[215,247,32],[706,709,1],[722,735,1],[741,747,1],[749,751,2],[752,767,1],[885,900,15],[901,1014,113],[1154,1421,267],[1422,1423,1],[1542,1544,1],[1547,1550,3],[1551,1758,207],[1769,1789,20],[1790,2038,248],[2046,2047,1],[2184,2546,362],[2547,2554,7],[2555,2801,246],[2928,3059,131],[3060,3066,1],[3199,3407,208],[3449,3647,198],[3841,3843,1],[3859,3861,2],[3862,3863,1],[3866,3871,1],[3892,3896,2],[4030,4037,1],[4039,4044,1],[4046,4047,1],[4053,4056,1],[4254,4255,1],[5008,5017,1],[5741,6107,366],[6464,6622,158],[6623,6655,1],[7009,7018,1],[7028,7036,1],[8125,8127,2],[8128,8129,1],[8141,8143,1],[8157,8159,1],[8173,8175,1],[8189,8190,1],[8260,8274,14],[8314,8316,1],[8330,8332,1],[8352,8384,1],[8448,8449,1],[8451,8454,1],[8456,8457,1],[8468,8470,2],[8471,8472,1],[8478,8483,1],[8485,8489,2],[8494,8506,12],[8507,8512,5],[8513,8516,1],[8522,8525,1],[8527,8586,59],[8587,8592,5],[8593,8967,1],[8972,9e3,1],[9003,9257,1],[9280,9290,1],[9372,9449,1],[9472,10087,1],[10132,10180,1],[10183,10213,1],[10224,10626,1],[10649,10711,1],[10716,10747,1],[10750,11123,1],[11126,11157,1],[11159,11263,1],[11493,11498,1],[11856,11857,1],[11904,11929,1],[11931,12019,1],[12032,12245,1],[12272,12287,1],[12292,12306,14],[12307,12320,13],[12342,12343,1],[12350,12351,1],[12443,12444,1],[12688,12689,1],[12694,12703,1],[12736,12773,1],[12783,12800,17],[12801,12830,1],[12842,12871,1],[12880,12896,16],[12897,12927,1],[12938,12976,1],[12992,13311,1],[19904,19967,1],[42128,42182,1],[42752,42774,1],[42784,42785,1],[42889,42890,1],[43048,43051,1],[43062,43065,1],[43639,43641,1],[43867,43882,15],[43883,64297,20414],[64434,64450,1],[64832,64847,1],[64975,65020,45],[65021,65023,1],[65122,65124,2],[65125,65126,1],[65129,65284,155],[65291,65308,17],[65309,65310,1],[65342,65344,2],[65372,65374,2],[65504,65510,1],[65512,65518,1],[65532,65533,1],[65847,65855,1],[65913,65929,1],[65932,65934,1],[65936,65948,1],[65952,66e3,48],[66001,66044,1],[67703,67704,1],[68296,69006,710],[69007,71487,2480],[73685,73713,1],[92988,92991,1],[92997,113820,20823],[117760,117999,1],[118016,118451,1],[118608,118723,1],[118784,119029,1],[119040,119078,1],[119081,119140,1],[119146,119148,1],[119171,119172,1],[119180,119209,1],[119214,119274,1],[119296,119361,1],[119365,119552,187],[119553,119638,1],[120513,120539,26],[120571,120597,26],[120629,120655,26],[120687,120713,26],[120745,120771,26],[120832,121343,1],[121399,121402,1],[121453,121460,1],[121462,121475,1],[121477,121478,1],[123215,123647,432],[126124,126128,4],[126254,126704,450],[126705,126976,271],[126977,127019,1],[127024,127123,1],[127136,127150,1],[127153,127167,1],[127169,127183,1],[127185,127221,1],[127245,127405,1],[127462,127490,1],[127504,127547,1],[127552,127560,1],[127568,127569,1],[127584,127589,1],[127744,128727,1],[128732,128748,1],[128752,128764,1],[128768,128886,1],[128891,128985,1],[128992,129003,1],[129008,129024,16],[129025,129035,1],[129040,129095,1],[129104,129113,1],[129120,129159,1],[129168,129197,1],[129200,129211,1],[129216,129217,1],[129280,129619,1],[129632,129645,1],[129648,129660,1],[129664,129673,1],[129679,129734,1],[129742,129756,1],[129759,129769,1],[129776,129784,1],[129792,129938,1],[129940,130031,1]];static Sc=[[36,162,126],[163,165,1],[1423,1547,124],[2046,2047,1],[2546,2547,1],[2555,2801,246],[3065,3647,582],[6107,8352,2245],[8353,8384,1],[43064,65020,21956],[65129,65284,155],[65504,65505,1],[65509,65510,1],[73693,73696,1],[123647,126128,2481]];static Sk=[[94,96,2],[168,175,7],[180,184,4],[706,709,1],[722,735,1],[741,747,1],[749,751,2],[752,767,1],[885,900,15],[901,2184,1283],[8125,8127,2],[8128,8129,1],[8141,8143,1],[8157,8159,1],[8173,8175,1],[8189,8190,1],[12443,12444,1],[42752,42774,1],[42784,42785,1],[42889,42890,1],[43867,43882,15],[43883,64434,20551],[64435,64450,1],[65342,65344,2],[65507,127995,62488],[127996,127999,1]];static Sm=[[43,60,17],[61,62,1],[124,126,2],[172,177,5],[215,247,32],[1014,1542,528],[1543,1544,1],[8260,8274,14],[8314,8316,1],[8330,8332,1],[8472,8512,40],[8513,8516,1],[8523,8592,69],[8593,8596,1],[8602,8603,1],[8608,8614,3],[8622,8654,32],[8655,8658,3],[8660,8692,32],[8693,8959,1],[8992,8993,1],[9084,9115,31],[9116,9139,1],[9180,9185,1],[9655,9665,10],[9720,9727,1],[9839,10176,337],[10177,10180,1],[10183,10213,1],[10224,10239,1],[10496,10626,1],[10649,10711,1],[10716,10747,1],[10750,11007,1],[11056,11076,1],[11079,11084,1],[64297,65122,825],[65124,65126,1],[65291,65308,17],[65309,65310,1],[65372,65374,2],[65506,65513,7],[65514,65516,1],[69006,69007,1],[120513,120539,26],[120571,120597,26],[120629,120655,26],[120687,120713,26],[120745,120771,26],[126704,126705,1]];static So=[[166,169,3],[174,176,2],[1154,1421,267],[1422,1550,128],[1551,1758,207],[1769,1789,20],[1790,2038,248],[2554,2928,374],[3059,3064,1],[3066,3199,133],[3407,3449,42],[3841,3843,1],[3859,3861,2],[3862,3863,1],[3866,3871,1],[3892,3896,2],[4030,4037,1],[4039,4044,1],[4046,4047,1],[4053,4056,1],[4254,4255,1],[5008,5017,1],[5741,6464,723],[6622,6655,1],[7009,7018,1],[7028,7036,1],[8448,8449,1],[8451,8454,1],[8456,8457,1],[8468,8470,2],[8471,8478,7],[8479,8483,1],[8485,8489,2],[8494,8506,12],[8507,8522,15],[8524,8525,1],[8527,8586,59],[8587,8597,10],[8598,8601,1],[8604,8607,1],[8609,8610,1],[8612,8613,1],[8615,8621,1],[8623,8653,1],[8656,8657,1],[8659,8661,2],[8662,8691,1],[8960,8967,1],[8972,8991,1],[8994,9e3,1],[9003,9083,1],[9085,9114,1],[9140,9179,1],[9186,9257,1],[9280,9290,1],[9372,9449,1],[9472,9654,1],[9656,9664,1],[9666,9719,1],[9728,9838,1],[9840,10087,1],[10132,10175,1],[10240,10495,1],[11008,11055,1],[11077,11078,1],[11085,11123,1],[11126,11157,1],[11159,11263,1],[11493,11498,1],[11856,11857,1],[11904,11929,1],[11931,12019,1],[12032,12245,1],[12272,12287,1],[12292,12306,14],[12307,12320,13],[12342,12343,1],[12350,12351,1],[12688,12689,1],[12694,12703,1],[12736,12773,1],[12783,12800,17],[12801,12830,1],[12842,12871,1],[12880,12896,16],[12897,12927,1],[12938,12976,1],[12992,13311,1],[19904,19967,1],[42128,42182,1],[43048,43051,1],[43062,43063,1],[43065,43639,574],[43640,43641,1],[64832,64847,1],[64975,65021,46],[65022,65023,1],[65508,65512,4],[65517,65518,1],[65532,65533,1],[65847,65855,1],[65913,65929,1],[65932,65934,1],[65936,65948,1],[65952,66e3,48],[66001,66044,1],[67703,67704,1],[68296,71487,3191],[73685,73692,1],[73697,73713,1],[92988,92991,1],[92997,113820,20823],[117760,117999,1],[118016,118451,1],[118608,118723,1],[118784,119029,1],[119040,119078,1],[119081,119140,1],[119146,119148,1],[119171,119172,1],[119180,119209,1],[119214,119274,1],[119296,119361,1],[119365,119552,187],[119553,119638,1],[120832,121343,1],[121399,121402,1],[121453,121460,1],[121462,121475,1],[121477,121478,1],[123215,126124,2909],[126254,126976,722],[126977,127019,1],[127024,127123,1],[127136,127150,1],[127153,127167,1],[127169,127183,1],[127185,127221,1],[127245,127405,1],[127462,127490,1],[127504,127547,1],[127552,127560,1],[127568,127569,1],[127584,127589,1],[127744,127994,1],[128e3,128727,1],[128732,128748,1],[128752,128764,1],[128768,128886,1],[128891,128985,1],[128992,129003,1],[129008,129024,16],[129025,129035,1],[129040,129095,1],[129104,129113,1],[129120,129159,1],[129168,129197,1],[129200,129211,1],[129216,129217,1],[129280,129619,1],[129632,129645,1],[129648,129660,1],[129664,129673,1],[129679,129734,1],[129742,129756,1],[129759,129769,1],[129776,129784,1],[129792,129938,1],[129940,130031,1]];static Z=[[32,160,128],[5760,8192,2432],[8193,8202,1],[8232,8233,1],[8239,8287,48],[12288,12288,1]];static Zl=[[8232,8232,1]];static Zp=[[8233,8233,1]];static Zs=[[32,160,128],[5760,8192,2432],[8193,8202,1],[8239,8287,48],[12288,12288,1]];static Adlam=[[125184,125259,1],[125264,125273,1],[125278,125279,1]];static Ahom=[[71424,71450,1],[71453,71467,1],[71472,71494,1]];static Anatolian_Hieroglyphs=[[82944,83526,1]];static Arabic=[[1536,1540,1],[1542,1547,1],[1549,1562,1],[1564,1566,1],[1568,1599,1],[1601,1610,1],[1622,1647,1],[1649,1756,1],[1758,1791,1],[1872,1919,1],[2160,2190,1],[2192,2193,1],[2199,2273,1],[2275,2303,1],[64336,64450,1],[64467,64829,1],[64832,64911,1],[64914,64967,1],[64975,65008,33],[65009,65023,1],[65136,65140,1],[65142,65276,1],[69216,69246,1],[69314,69316,1],[69372,69375,1],[126464,126467,1],[126469,126495,1],[126497,126498,1],[126500,126503,3],[126505,126514,1],[126516,126519,1],[126521,126523,2],[126530,126535,5],[126537,126541,2],[126542,126543,1],[126545,126546,1],[126548,126551,3],[126553,126561,2],[126562,126564,2],[126567,126570,1],[126572,126578,1],[126580,126583,1],[126585,126588,1],[126590,126592,2],[126593,126601,1],[126603,126619,1],[126625,126627,1],[126629,126633,1],[126635,126651,1],[126704,126705,1]];static Armenian=[[1329,1366,1],[1369,1418,1],[1421,1423,1],[64275,64279,1]];static Avestan=[[68352,68405,1],[68409,68415,1]];static Balinese=[[6912,6988,1],[6990,7039,1]];static Bamum=[[42656,42743,1],[92160,92728,1]];static Bassa_Vah=[[92880,92909,1],[92912,92917,1]];static Batak=[[7104,7155,1],[7164,7167,1]];static Bengali=[[2432,2435,1],[2437,2444,1],[2447,2448,1],[2451,2472,1],[2474,2480,1],[2482,2486,4],[2487,2489,1],[2492,2500,1],[2503,2504,1],[2507,2510,1],[2519,2524,5],[2525,2527,2],[2528,2531,1],[2534,2558,1]];static Bhaiksuki=[[72704,72712,1],[72714,72758,1],[72760,72773,1],[72784,72812,1]];static Bopomofo=[[746,747,1],[12549,12591,1],[12704,12735,1]];static Brahmi=[[69632,69709,1],[69714,69749,1],[69759,69759,1]];static Braille=[[10240,10495,1]];static Buginese=[[6656,6683,1],[6686,6687,1]];static Buhid=[[5952,5971,1]];static Canadian_Aboriginal=[[5120,5759,1],[6320,6389,1],[72368,72383,1]];static Carian=[[66208,66256,1]];static Caucasian_Albanian=[[66864,66915,1],[66927,66927,1]];static Chakma=[[69888,69940,1],[69942,69959,1]];static Cham=[[43520,43574,1],[43584,43597,1],[43600,43609,1],[43612,43615,1]];static Cherokee=[[5024,5109,1],[5112,5117,1],[43888,43967,1]];static Chorasmian=[[69552,69579,1]];static Common=[[0,64,1],[91,96,1],[123,169,1],[171,185,1],[187,191,1],[215,247,32],[697,735,1],[741,745,1],[748,767,1],[884,894,10],[901,903,2],[1541,1548,7],[1563,1567,4],[1600,1757,157],[2274,2404,130],[2405,3647,1242],[4053,4056,1],[4347,5867,1520],[5868,5869,1],[5941,5942,1],[6146,6147,1],[6149,7379,1230],[7393,7401,8],[7402,7404,1],[7406,7411,1],[7413,7415,1],[7418,8192,774],[8193,8203,1],[8206,8292,1],[8294,8304,1],[8308,8318,1],[8320,8334,1],[8352,8384,1],[8448,8485,1],[8487,8489,1],[8492,8497,1],[8499,8525,1],[8527,8543,1],[8585,8587,1],[8592,9257,1],[9280,9290,1],[9312,10239,1],[10496,11123,1],[11126,11157,1],[11159,11263,1],[11776,11869,1],[12272,12292,1],[12294,12296,2],[12297,12320,1],[12336,12343,1],[12348,12351,1],[12443,12444,1],[12448,12539,91],[12540,12688,148],[12689,12703,1],[12736,12773,1],[12783,12832,49],[12833,12895,1],[12927,13007,1],[13055,13144,89],[13145,13311,1],[19904,19967,1],[42752,42785,1],[42888,42890,1],[43056,43065,1],[43310,43471,161],[43867,43882,15],[43883,64830,20947],[64831,65040,209],[65041,65049,1],[65072,65106,1],[65108,65126,1],[65128,65131,1],[65279,65281,2],[65282,65312,1],[65339,65344,1],[65371,65381,1],[65392,65438,46],[65439,65504,65],[65505,65510,1],[65512,65518,1],[65529,65533,1],[65792,65794,1],[65799,65843,1],[65847,65855,1],[65936,65948,1],[66e3,66044,1],[66273,66299,1],[113824,113827,1],[117760,118009,1],[118016,118451,1],[118608,118723,1],[118784,119029,1],[119040,119078,1],[119081,119142,1],[119146,119162,1],[119171,119172,1],[119180,119209,1],[119214,119274,1],[119488,119507,1],[119520,119539,1],[119552,119638,1],[119648,119672,1],[119808,119892,1],[119894,119964,1],[119966,119967,1],[119970,119973,3],[119974,119977,3],[119978,119980,1],[119982,119993,1],[119995,119997,2],[119998,120003,1],[120005,120069,1],[120071,120074,1],[120077,120084,1],[120086,120092,1],[120094,120121,1],[120123,120126,1],[120128,120132,1],[120134,120138,4],[120139,120144,1],[120146,120485,1],[120488,120779,1],[120782,120831,1],[126065,126132,1],[126209,126269,1],[126976,127019,1],[127024,127123,1],[127136,127150,1],[127153,127167,1],[127169,127183,1],[127185,127221,1],[127232,127405,1],[127462,127487,1],[127489,127490,1],[127504,127547,1],[127552,127560,1],[127568,127569,1],[127584,127589,1],[127744,128727,1],[128732,128748,1],[128752,128764,1],[128768,128886,1],[128891,128985,1],[128992,129003,1],[129008,129024,16],[129025,129035,1],[129040,129095,1],[129104,129113,1],[129120,129159,1],[129168,129197,1],[129200,129211,1],[129216,129217,1],[129280,129619,1],[129632,129645,1],[129648,129660,1],[129664,129673,1],[129679,129734,1],[129742,129756,1],[129759,129769,1],[129776,129784,1],[129792,129938,1],[129940,130041,1],[917505,917536,31],[917537,917631,1]];static foldCommon=[[924,956,32]];static Coptic=[[994,1007,1],[11392,11507,1],[11513,11519,1]];static Cuneiform=[[73728,74649,1],[74752,74862,1],[74864,74868,1],[74880,75075,1]];static Cypriot=[[67584,67589,1],[67592,67594,2],[67595,67637,1],[67639,67640,1],[67644,67647,3]];static Cypro_Minoan=[[77712,77810,1]];static Cyrillic=[[1024,1156,1],[1159,1327,1],[7296,7306,1],[7467,7544,77],[11744,11775,1],[42560,42655,1],[65070,65071,1],[122928,122989,1],[123023,123023,1]];static Deseret=[[66560,66639,1]];static Devanagari=[[2304,2384,1],[2389,2403,1],[2406,2431,1],[43232,43263,1],[72448,72457,1]];static Dives_Akuru=[[71936,71942,1],[71945,71948,3],[71949,71955,1],[71957,71958,1],[71960,71989,1],[71991,71992,1],[71995,72006,1],[72016,72025,1]];static Dogra=[[71680,71739,1]];static Duployan=[[113664,113770,1],[113776,113788,1],[113792,113800,1],[113808,113817,1],[113820,113823,1]];static Egyptian_Hieroglyphs=[[77824,78933,1],[78944,82938,1]];static Elbasan=[[66816,66855,1]];static Elymaic=[[69600,69622,1]];static Ethiopic=[[4608,4680,1],[4682,4685,1],[4688,4694,1],[4696,4698,2],[4699,4701,1],[4704,4744,1],[4746,4749,1],[4752,4784,1],[4786,4789,1],[4792,4798,1],[4800,4802,2],[4803,4805,1],[4808,4822,1],[4824,4880,1],[4882,4885,1],[4888,4954,1],[4957,4988,1],[4992,5017,1],[11648,11670,1],[11680,11686,1],[11688,11694,1],[11696,11702,1],[11704,11710,1],[11712,11718,1],[11720,11726,1],[11728,11734,1],[11736,11742,1],[43777,43782,1],[43785,43790,1],[43793,43798,1],[43808,43814,1],[43816,43822,1],[124896,124902,1],[124904,124907,1],[124909,124910,1],[124912,124926,1]];static Garay=[[68928,68965,1],[68969,68997,1],[69006,69007,1]];static Georgian=[[4256,4293,1],[4295,4301,6],[4304,4346,1],[4348,4351,1],[7312,7354,1],[7357,7359,1],[11520,11557,1],[11559,11565,6]];static Glagolitic=[[11264,11359,1],[122880,122886,1],[122888,122904,1],[122907,122913,1],[122915,122916,1],[122918,122922,1]];static Gothic=[[66352,66378,1]];static Grantha=[[70400,70403,1],[70405,70412,1],[70415,70416,1],[70419,70440,1],[70442,70448,1],[70450,70451,1],[70453,70457,1],[70460,70468,1],[70471,70472,1],[70475,70477,1],[70480,70487,7],[70493,70499,1],[70502,70508,1],[70512,70516,1]];static Greek=[[880,883,1],[885,887,1],[890,893,1],[895,900,5],[902,904,2],[905,906,1],[908,910,2],[911,929,1],[931,993,1],[1008,1023,1],[7462,7466,1],[7517,7521,1],[7526,7530,1],[7615,7936,321],[7937,7957,1],[7960,7965,1],[7968,8005,1],[8008,8013,1],[8016,8023,1],[8025,8031,2],[8032,8061,1],[8064,8116,1],[8118,8132,1],[8134,8147,1],[8150,8155,1],[8157,8175,1],[8178,8180,1],[8182,8190,1],[8486,43877,35391],[65856,65934,1],[65952,119296,53344],[119297,119365,1]];static foldGreek=[[181,837,656]];static Gujarati=[[2689,2691,1],[2693,2701,1],[2703,2705,1],[2707,2728,1],[2730,2736,1],[2738,2739,1],[2741,2745,1],[2748,2757,1],[2759,2761,1],[2763,2765,1],[2768,2784,16],[2785,2787,1],[2790,2801,1],[2809,2815,1]];static Gunjala_Gondi=[[73056,73061,1],[73063,73064,1],[73066,73102,1],[73104,73105,1],[73107,73112,1],[73120,73129,1]];static Gurmukhi=[[2561,2563,1],[2565,2570,1],[2575,2576,1],[2579,2600,1],[2602,2608,1],[2610,2611,1],[2613,2614,1],[2616,2617,1],[2620,2622,2],[2623,2626,1],[2631,2632,1],[2635,2637,1],[2641,2649,8],[2650,2652,1],[2654,2662,8],[2663,2678,1]];static Gurung_Khema=[[90368,90425,1]];static Han=[[11904,11929,1],[11931,12019,1],[12032,12245,1],[12293,12295,2],[12321,12329,1],[12344,12347,1],[13312,19903,1],[19968,40959,1],[63744,64109,1],[64112,64217,1],[94178,94179,1],[94192,94193,1],[131072,173791,1],[173824,177977,1],[177984,178205,1],[178208,183969,1],[183984,191456,1],[191472,192093,1],[194560,195101,1],[196608,201546,1],[201552,205743,1]];static Hangul=[[4352,4607,1],[12334,12335,1],[12593,12686,1],[12800,12830,1],[12896,12926,1],[43360,43388,1],[44032,55203,1],[55216,55238,1],[55243,55291,1],[65440,65470,1],[65474,65479,1],[65482,65487,1],[65490,65495,1],[65498,65500,1]];static Hanifi_Rohingya=[[68864,68903,1],[68912,68921,1]];static Hanunoo=[[5920,5940,1]];static Hatran=[[67808,67826,1],[67828,67829,1],[67835,67839,1]];static Hebrew=[[1425,1479,1],[1488,1514,1],[1519,1524,1],[64285,64310,1],[64312,64316,1],[64318,64320,2],[64321,64323,2],[64324,64326,2],[64327,64335,1]];static Hiragana=[[12353,12438,1],[12445,12447,1],[110593,110879,1],[110898,110928,30],[110929,110930,1],[127488,127488,1]];static Imperial_Aramaic=[[67648,67669,1],[67671,67679,1]];static Inherited=[[768,879,1],[1157,1158,1],[1611,1621,1],[1648,2385,737],[2386,2388,1],[6832,6862,1],[7376,7378,1],[7380,7392,1],[7394,7400,1],[7405,7412,7],[7416,7417,1],[7616,7679,1],[8204,8205,1],[8400,8432,1],[12330,12333,1],[12441,12442,1],[65024,65039,1],[65056,65069,1],[66045,66272,227],[70459,118528,48069],[118529,118573,1],[118576,118598,1],[119143,119145,1],[119163,119170,1],[119173,119179,1],[119210,119213,1],[917760,917999,1]];static foldInherited=[[921,953,32],[8126,8126,1]];static Inscriptional_Pahlavi=[[68448,68466,1],[68472,68479,1]];static Inscriptional_Parthian=[[68416,68437,1],[68440,68447,1]];static Javanese=[[43392,43469,1],[43472,43481,1],[43486,43487,1]];static Kaithi=[[69760,69826,1],[69837,69837,1]];static Kannada=[[3200,3212,1],[3214,3216,1],[3218,3240,1],[3242,3251,1],[3253,3257,1],[3260,3268,1],[3270,3272,1],[3274,3277,1],[3285,3286,1],[3293,3294,1],[3296,3299,1],[3302,3311,1],[3313,3315,1]];static Katakana=[[12449,12538,1],[12541,12543,1],[12784,12799,1],[13008,13054,1],[13056,13143,1],[65382,65391,1],[65393,65437,1],[110576,110579,1],[110581,110587,1],[110589,110590,1],[110592,110880,288],[110881,110882,1],[110933,110948,15],[110949,110951,1]];static Kawi=[[73472,73488,1],[73490,73530,1],[73534,73562,1]];static Kayah_Li=[[43264,43309,1],[43311,43311,1]];static Kharoshthi=[[68096,68099,1],[68101,68102,1],[68108,68115,1],[68117,68119,1],[68121,68149,1],[68152,68154,1],[68159,68168,1],[68176,68184,1]];static Khitan_Small_Script=[[94180,101120,6940],[101121,101589,1],[101631,101631,1]];static Khmer=[[6016,6109,1],[6112,6121,1],[6128,6137,1],[6624,6655,1]];static Khojki=[[70144,70161,1],[70163,70209,1]];static Khudawadi=[[70320,70378,1],[70384,70393,1]];static Kirat_Rai=[[93504,93561,1]];static Lao=[[3713,3714,1],[3716,3718,2],[3719,3722,1],[3724,3747,1],[3749,3751,2],[3752,3773,1],[3776,3780,1],[3782,3784,2],[3785,3790,1],[3792,3801,1],[3804,3807,1]];static Latin=[[65,90,1],[97,122,1],[170,186,16],[192,214,1],[216,246,1],[248,696,1],[736,740,1],[7424,7461,1],[7468,7516,1],[7522,7525,1],[7531,7543,1],[7545,7614,1],[7680,7935,1],[8305,8319,14],[8336,8348,1],[8490,8491,1],[8498,8526,28],[8544,8584,1],[11360,11391,1],[42786,42887,1],[42891,42957,1],[42960,42961,1],[42963,42965,2],[42966,42972,1],[42994,43007,1],[43824,43866,1],[43868,43876,1],[43878,43881,1],[64256,64262,1],[65313,65338,1],[65345,65370,1],[67456,67461,1],[67463,67504,1],[67506,67514,1],[122624,122654,1],[122661,122666,1]];static Lepcha=[[7168,7223,1],[7227,7241,1],[7245,7247,1]];static Limbu=[[6400,6430,1],[6432,6443,1],[6448,6459,1],[6464,6468,4],[6469,6479,1]];static Linear_A=[[67072,67382,1],[67392,67413,1],[67424,67431,1]];static Linear_B=[[65536,65547,1],[65549,65574,1],[65576,65594,1],[65596,65597,1],[65599,65613,1],[65616,65629,1],[65664,65786,1]];static Lisu=[[42192,42239,1],[73648,73648,1]];static Lycian=[[66176,66204,1]];static Lydian=[[67872,67897,1],[67903,67903,1]];static Mahajani=[[69968,70006,1]];static Makasar=[[73440,73464,1]];static Malayalam=[[3328,3340,1],[3342,3344,1],[3346,3396,1],[3398,3400,1],[3402,3407,1],[3412,3427,1],[3430,3455,1]];static Mandaic=[[2112,2139,1],[2142,2142,1]];static Manichaean=[[68288,68326,1],[68331,68342,1]];static Marchen=[[72816,72847,1],[72850,72871,1],[72873,72886,1]];static Masaram_Gondi=[[72960,72966,1],[72968,72969,1],[72971,73014,1],[73018,73020,2],[73021,73023,2],[73024,73031,1],[73040,73049,1]];static Medefaidrin=[[93760,93850,1]];static Meetei_Mayek=[[43744,43766,1],[43968,44013,1],[44016,44025,1]];static Mende_Kikakui=[[124928,125124,1],[125127,125142,1]];static Meroitic_Cursive=[[68e3,68023,1],[68028,68047,1],[68050,68095,1]];static Meroitic_Hieroglyphs=[[67968,67999,1]];static Miao=[[93952,94026,1],[94031,94087,1],[94095,94111,1]];static Modi=[[71168,71236,1],[71248,71257,1]];static Mongolian=[[6144,6145,1],[6148,6150,2],[6151,6169,1],[6176,6264,1],[6272,6314,1],[71264,71276,1]];static Mro=[[92736,92766,1],[92768,92777,1],[92782,92783,1]];static Multani=[[70272,70278,1],[70280,70282,2],[70283,70285,1],[70287,70301,1],[70303,70313,1]];static Myanmar=[[4096,4255,1],[43488,43518,1],[43616,43647,1],[71376,71395,1]];static Nabataean=[[67712,67742,1],[67751,67759,1]];static Nag_Mundari=[[124112,124153,1]];static Nandinagari=[[72096,72103,1],[72106,72151,1],[72154,72164,1]];static New_Tai_Lue=[[6528,6571,1],[6576,6601,1],[6608,6618,1],[6622,6623,1]];static Newa=[[70656,70747,1],[70749,70753,1]];static Nko=[[1984,2042,1],[2045,2047,1]];static Nushu=[[94177,110960,16783],[110961,111355,1]];static Nyiakeng_Puachue_Hmong=[[123136,123180,1],[123184,123197,1],[123200,123209,1],[123214,123215,1]];static Ogham=[[5760,5788,1]];static Ol_Chiki=[[7248,7295,1]];static Ol_Onal=[[124368,124410,1],[124415,124415,1]];static Old_Hungarian=[[68736,68786,1],[68800,68850,1],[68858,68863,1]];static Old_Italic=[[66304,66339,1],[66349,66351,1]];static Old_North_Arabian=[[68224,68255,1]];static Old_Permic=[[66384,66426,1]];static Old_Persian=[[66464,66499,1],[66504,66517,1]];static Old_Sogdian=[[69376,69415,1]];static Old_South_Arabian=[[68192,68223,1]];static Old_Turkic=[[68608,68680,1]];static Old_Uyghur=[[69488,69513,1]];static Oriya=[[2817,2819,1],[2821,2828,1],[2831,2832,1],[2835,2856,1],[2858,2864,1],[2866,2867,1],[2869,2873,1],[2876,2884,1],[2887,2888,1],[2891,2893,1],[2901,2903,1],[2908,2909,1],[2911,2915,1],[2918,2935,1]];static Osage=[[66736,66771,1],[66776,66811,1]];static Osmanya=[[66688,66717,1],[66720,66729,1]];static Pahawh_Hmong=[[92928,92997,1],[93008,93017,1],[93019,93025,1],[93027,93047,1],[93053,93071,1]];static Palmyrene=[[67680,67711,1]];static Pau_Cin_Hau=[[72384,72440,1]];static Phags_Pa=[[43072,43127,1]];static Phoenician=[[67840,67867,1],[67871,67871,1]];static Psalter_Pahlavi=[[68480,68497,1],[68505,68508,1],[68521,68527,1]];static Rejang=[[43312,43347,1],[43359,43359,1]];static Runic=[[5792,5866,1],[5870,5880,1]];static Samaritan=[[2048,2093,1],[2096,2110,1]];static Saurashtra=[[43136,43205,1],[43214,43225,1]];static Sharada=[[70016,70111,1]];static Shavian=[[66640,66687,1]];static Siddham=[[71040,71093,1],[71096,71133,1]];static SignWriting=[[120832,121483,1],[121499,121503,1],[121505,121519,1]];static Sinhala=[[3457,3459,1],[3461,3478,1],[3482,3505,1],[3507,3515,1],[3517,3520,3],[3521,3526,1],[3530,3535,5],[3536,3540,1],[3542,3544,2],[3545,3551,1],[3558,3567,1],[3570,3572,1],[70113,70132,1]];static Sogdian=[[69424,69465,1]];static Sora_Sompeng=[[69840,69864,1],[69872,69881,1]];static Soyombo=[[72272,72354,1]];static Sundanese=[[7040,7103,1],[7360,7367,1]];static Sunuwar=[[72640,72673,1],[72688,72697,1]];static Syloti_Nagri=[[43008,43052,1]];static Syriac=[[1792,1805,1],[1807,1866,1],[1869,1871,1],[2144,2154,1]];static Tagalog=[[5888,5909,1],[5919,5919,1]];static Tagbanwa=[[5984,5996,1],[5998,6e3,1],[6002,6003,1]];static Tai_Le=[[6480,6509,1],[6512,6516,1]];static Tai_Tham=[[6688,6750,1],[6752,6780,1],[6783,6793,1],[6800,6809,1],[6816,6829,1]];static Tai_Viet=[[43648,43714,1],[43739,43743,1]];static Takri=[[71296,71353,1],[71360,71369,1]];static Tamil=[[2946,2947,1],[2949,2954,1],[2958,2960,1],[2962,2965,1],[2969,2970,1],[2972,2974,2],[2975,2979,4],[2980,2984,4],[2985,2986,1],[2990,3001,1],[3006,3010,1],[3014,3016,1],[3018,3021,1],[3024,3031,7],[3046,3066,1],[73664,73713,1],[73727,73727,1]];static Tangsa=[[92784,92862,1],[92864,92873,1]];static Tangut=[[94176,94208,32],[94209,100343,1],[100352,101119,1],[101632,101640,1]];static Telugu=[[3072,3084,1],[3086,3088,1],[3090,3112,1],[3114,3129,1],[3132,3140,1],[3142,3144,1],[3146,3149,1],[3157,3158,1],[3160,3162,1],[3165,3168,3],[3169,3171,1],[3174,3183,1],[3191,3199,1]];static Thaana=[[1920,1969,1]];static Thai=[[3585,3642,1],[3648,3675,1]];static Tibetan=[[3840,3911,1],[3913,3948,1],[3953,3991,1],[3993,4028,1],[4030,4044,1],[4046,4052,1],[4057,4058,1]];static Tifinagh=[[11568,11623,1],[11631,11632,1],[11647,11647,1]];static Tirhuta=[[70784,70855,1],[70864,70873,1]];static Todhri=[[67008,67059,1]];static Toto=[[123536,123566,1]];static Tulu_Tigalari=[[70528,70537,1],[70539,70542,3],[70544,70581,1],[70583,70592,1],[70594,70597,3],[70599,70602,1],[70604,70613,1],[70615,70616,1],[70625,70626,1]];static Ugaritic=[[66432,66461,1],[66463,66463,1]];static Vai=[[42240,42539,1]];static Vithkuqi=[[66928,66938,1],[66940,66954,1],[66956,66962,1],[66964,66965,1],[66967,66977,1],[66979,66993,1],[66995,67001,1],[67003,67004,1]];static Wancho=[[123584,123641,1],[123647,123647,1]];static Warang_Citi=[[71840,71922,1],[71935,71935,1]];static Yezidi=[[69248,69289,1],[69291,69293,1],[69296,69297,1]];static Yi=[[40960,42124,1],[42128,42182,1]];static Zanabazar_Square=[[72192,72263,1]];static CATEGORIES=(()=>new Map([["C",a.C],["Cc",a.Cc],["Cf",a.Cf],["Co",a.Co],["Cs",a.Cs],["L",a.L],["Ll",a.Ll],["Lm",a.Lm],["Lo",a.Lo],["Lt",a.Lt],["Lu",a.Lu],["M",a.M],["Mc",a.Mc],["Me",a.Me],["Mn",a.Mn],["N",a.N],["Nd",a.Nd],["Nl",a.Nl],["No",a.No],["P",a.P],["Pc",a.Pc],["Pd",a.Pd],["Pe",a.Pe],["Pf",a.Pf],["Pi",a.Pi],["Po",a.Po],["Ps",a.Ps],["S",a.S],["Sc",a.Sc],["Sk",a.Sk],["Sm",a.Sm],["So",a.So],["Z",a.Z],["Zl",a.Zl],["Zp",a.Zp],["Zs",a.Zs]]))();static SCRIPTS=(()=>new Map([["Adlam",a.Adlam],["Ahom",a.Ahom],["Anatolian_Hieroglyphs",a.Anatolian_Hieroglyphs],["Arabic",a.Arabic],["Armenian",a.Armenian],["Avestan",a.Avestan],["Balinese",a.Balinese],["Bamum",a.Bamum],["Bassa_Vah",a.Bassa_Vah],["Batak",a.Batak],["Bengali",a.Bengali],["Bhaiksuki",a.Bhaiksuki],["Bopomofo",a.Bopomofo],["Brahmi",a.Brahmi],["Braille",a.Braille],["Buginese",a.Buginese],["Buhid",a.Buhid],["Canadian_Aboriginal",a.Canadian_Aboriginal],["Carian",a.Carian],["Caucasian_Albanian",a.Caucasian_Albanian],["Chakma",a.Chakma],["Cham",a.Cham],["Cherokee",a.Cherokee],["Chorasmian",a.Chorasmian],["Common",a.Common],["Coptic",a.Coptic],["Cuneiform",a.Cuneiform],["Cypriot",a.Cypriot],["Cypro_Minoan",a.Cypro_Minoan],["Cyrillic",a.Cyrillic],["Deseret",a.Deseret],["Devanagari",a.Devanagari],["Dives_Akuru",a.Dives_Akuru],["Dogra",a.Dogra],["Duployan",a.Duployan],["Egyptian_Hieroglyphs",a.Egyptian_Hieroglyphs],["Elbasan",a.Elbasan],["Elymaic",a.Elymaic],["Ethiopic",a.Ethiopic],["Garay",a.Garay],["Georgian",a.Georgian],["Glagolitic",a.Glagolitic],["Gothic",a.Gothic],["Grantha",a.Grantha],["Greek",a.Greek],["Gujarati",a.Gujarati],["Gunjala_Gondi",a.Gunjala_Gondi],["Gurmukhi",a.Gurmukhi],["Gurung_Khema",a.Gurung_Khema],["Han",a.Han],["Hangul",a.Hangul],["Hanifi_Rohingya",a.Hanifi_Rohingya],["Hanunoo",a.Hanunoo],["Hatran",a.Hatran],["Hebrew",a.Hebrew],["Hiragana",a.Hiragana],["Imperial_Aramaic",a.Imperial_Aramaic],["Inherited",a.Inherited],["Inscriptional_Pahlavi",a.Inscriptional_Pahlavi],["Inscriptional_Parthian",a.Inscriptional_Parthian],["Javanese",a.Javanese],["Kaithi",a.Kaithi],["Kannada",a.Kannada],["Katakana",a.Katakana],["Kawi",a.Kawi],["Kayah_Li",a.Kayah_Li],["Kharoshthi",a.Kharoshthi],["Khitan_Small_Script",a.Khitan_Small_Script],["Khmer",a.Khmer],["Khojki",a.Khojki],["Khudawadi",a.Khudawadi],["Kirat_Rai",a.Kirat_Rai],["Lao",a.Lao],["Latin",a.Latin],["Lepcha",a.Lepcha],["Limbu",a.Limbu],["Linear_A",a.Linear_A],["Linear_B",a.Linear_B],["Lisu",a.Lisu],["Lycian",a.Lycian],["Lydian",a.Lydian],["Mahajani",a.Mahajani],["Makasar",a.Makasar],["Malayalam",a.Malayalam],["Mandaic",a.Mandaic],["Manichaean",a.Manichaean],["Marchen",a.Marchen],["Masaram_Gondi",a.Masaram_Gondi],["Medefaidrin",a.Medefaidrin],["Meetei_Mayek",a.Meetei_Mayek],["Mende_Kikakui",a.Mende_Kikakui],["Meroitic_Cursive",a.Meroitic_Cursive],["Meroitic_Hieroglyphs",a.Meroitic_Hieroglyphs],["Miao",a.Miao],["Modi",a.Modi],["Mongolian",a.Mongolian],["Mro",a.Mro],["Multani",a.Multani],["Myanmar",a.Myanmar],["Nabataean",a.Nabataean],["Nag_Mundari",a.Nag_Mundari],["Nandinagari",a.Nandinagari],["New_Tai_Lue",a.New_Tai_Lue],["Newa",a.Newa],["Nko",a.Nko],["Nushu",a.Nushu],["Nyiakeng_Puachue_Hmong",a.Nyiakeng_Puachue_Hmong],["Ogham",a.Ogham],["Ol_Chiki",a.Ol_Chiki],["Ol_Onal",a.Ol_Onal],["Old_Hungarian",a.Old_Hungarian],["Old_Italic",a.Old_Italic],["Old_North_Arabian",a.Old_North_Arabian],["Old_Permic",a.Old_Permic],["Old_Persian",a.Old_Persian],["Old_Sogdian",a.Old_Sogdian],["Old_South_Arabian",a.Old_South_Arabian],["Old_Turkic",a.Old_Turkic],["Old_Uyghur",a.Old_Uyghur],["Oriya",a.Oriya],["Osage",a.Osage],["Osmanya",a.Osmanya],["Pahawh_Hmong",a.Pahawh_Hmong],["Palmyrene",a.Palmyrene],["Pau_Cin_Hau",a.Pau_Cin_Hau],["Phags_Pa",a.Phags_Pa],["Phoenician",a.Phoenician],["Psalter_Pahlavi",a.Psalter_Pahlavi],["Rejang",a.Rejang],["Runic",a.Runic],["Samaritan",a.Samaritan],["Saurashtra",a.Saurashtra],["Sharada",a.Sharada],["Shavian",a.Shavian],["Siddham",a.Siddham],["SignWriting",a.SignWriting],["Sinhala",a.Sinhala],["Sogdian",a.Sogdian],["Sora_Sompeng",a.Sora_Sompeng],["Soyombo",a.Soyombo],["Sundanese",a.Sundanese],["Sunuwar",a.Sunuwar],["Syloti_Nagri",a.Syloti_Nagri],["Syriac",a.Syriac],["Tagalog",a.Tagalog],["Tagbanwa",a.Tagbanwa],["Tai_Le",a.Tai_Le],["Tai_Tham",a.Tai_Tham],["Tai_Viet",a.Tai_Viet],["Takri",a.Takri],["Tamil",a.Tamil],["Tangsa",a.Tangsa],["Tangut",a.Tangut],["Telugu",a.Telugu],["Thaana",a.Thaana],["Thai",a.Thai],["Tibetan",a.Tibetan],["Tifinagh",a.Tifinagh],["Tirhuta",a.Tirhuta],["Todhri",a.Todhri],["Toto",a.Toto],["Tulu_Tigalari",a.Tulu_Tigalari],["Ugaritic",a.Ugaritic],["Vai",a.Vai],["Vithkuqi",a.Vithkuqi],["Wancho",a.Wancho],["Warang_Citi",a.Warang_Citi],["Yezidi",a.Yezidi],["Yi",a.Yi],["Zanabazar_Square",a.Zanabazar_Square]]))();static FOLD_CATEGORIES=(()=>new Map([["L",a.foldL],["Ll",a.foldLl],["Lt",a.foldLt],["Lu",a.foldLu],["M",a.foldM],["Mn",a.foldMn]]))();static FOLD_SCRIPT=(()=>new Map([["Common",a.foldCommon],["Greek",a.foldGreek],["Inherited",a.foldInherited]]))()}class r{static MAX_RUNE=1114111;static MAX_ASCII=127;static MAX_LATIN1=255;static MAX_BMP=65535;static MIN_FOLD=65;static MAX_FOLD=125251;static is32(t,e){let s=0,i=t.length;for(;ss[1]))return!(e0&&e>=t[0][0]&&this.is32(t,e)}static isUpper(t){if(t<=this.MAX_LATIN1){const e=String.fromCodePoint(t);return e.toUpperCase()===e&&e.toLowerCase()!==e}return this.is(a.Upper,t)}static isPrint(t){return t<=this.MAX_LATIN1?t>=32&&t<127||t>=161&&173!==t:this.is(a.L,t)||this.is(a.M,t)||this.is(a.N,t)||this.is(a.P,t)||this.is(a.S,t)}static simpleFold(t){if(a.CASE_ORBIT.has(t))return a.CASE_ORBIT.get(t);const e=n.toLowerCase(t);return e!==t?e:n.toUpperCase(t)}static equalsIgnoreCase(t,e){if(t<0||e<0||t===e)return!0;if(t<=this.MAX_ASCII&&e<=this.MAX_ASCII)return n.CODES.get("A")<=t&&t<=n.CODES.get("Z")&&(t|=32),n.CODES.get("A")<=e&&e<=n.CODES.get("Z")&&(e|=32),t===e;for(let s=this.simpleFold(t);s!==t;s=this.simpleFold(s))if(s===e)return!0;return!1}}class o{static METACHARACTERS="\\.+*?()|[]{}^$";static EMPTY_BEGIN_LINE=1;static EMPTY_END_LINE=2;static EMPTY_BEGIN_TEXT=4;static EMPTY_END_TEXT=8;static EMPTY_WORD_BOUNDARY=16;static EMPTY_NO_WORD_BOUNDARY=32;static EMPTY_ALL=-1;static emptyInts(){return[]}static isalnum(t){return n.CODES.get("0")<=t&&t<=n.CODES.get("9")||n.CODES.get("a")<=t&&t<=n.CODES.get("z")||n.CODES.get("A")<=t&&t<=n.CODES.get("Z")}static unhex(t){return n.CODES.get("0")<=t&&t<=n.CODES.get("9")?t-n.CODES.get("0"):n.CODES.get("a")<=t&&t<=n.CODES.get("f")?t-n.CODES.get("a")+10:n.CODES.get("A")<=t&&t<=n.CODES.get("F")?t-n.CODES.get("A")+10:-1}static escapeRune(t){let e="";if(r.isPrint(t))this.METACHARACTERS.indexOf(String.fromCodePoint(t))>=0&&(e+="\\"),e+=String.fromCodePoint(t);else switch(t){case n.CODES.get('"'):e+='\\"';break;case n.CODES.get("\\"):e+="\\\\";break;case n.CODES.get("\t"):e+="\\t";break;case n.CODES.get("\n"):e+="\\n";break;case n.CODES.get("\r"):e+="\\r";break;case n.CODES.get("\b"):e+="\\b";break;case n.CODES.get("\f"):e+="\\f";break;default:{let s=t.toString(16);t<256?(e+="\\x",1===s.length&&(e+="0"),e+=s):e+=`\\x{${s}}`;break}}return e}static stringToRunes(t){return String(t).split("").map((t=>t.codePointAt(0)))}static runeToString(t){return String.fromCodePoint(t)}static isWordRune(t){return n.CODES.get("a")<=t&&t<=n.CODES.get("z")||n.CODES.get("A")<=t&&t<=n.CODES.get("Z")||n.CODES.get("0")<=t&&t<=n.CODES.get("9")||t===n.CODES.get("_")}static emptyOpContext(t,e){let s=0;return t<0&&(s|=this.EMPTY_BEGIN_TEXT|this.EMPTY_BEGIN_LINE),t===n.CODES.get("\n")&&(s|=this.EMPTY_BEGIN_LINE),e<0&&(s|=this.EMPTY_END_TEXT|this.EMPTY_END_LINE),e===n.CODES.get("\n")&&(s|=this.EMPTY_END_LINE),this.isWordRune(t)!==this.isWordRune(e)?s|=this.EMPTY_WORD_BOUNDARY:s|=this.EMPTY_NO_WORD_BOUNDARY,s}static quoteMeta(t){return t.split("").map((t=>this.METACHARACTERS.indexOf(t)>=0?`\\${t}`:t)).join("")}static charCount(t){return t>r.MAX_BMP?2:1}static stringToUtf8ByteArray(t){if(globalThis.TextEncoder)return Array.from((new TextEncoder).encode(t));{let e=[],s=0;for(let i=0;i>6|192,e[s++]=63&n|128):55296==(64512&n)&&i+1>18|240,e[s++]=n>>12&63|128,e[s++]=n>>6&63|128,e[s++]=63&n|128):(e[s++]=n>>12|224,e[s++]=n>>6&63|128,e[s++]=63&n|128)}return e}}static utf8ByteArrayToString(t){if(globalThis.TextDecoder)return new TextDecoder("utf-8").decode(new Uint8Array(t));{let e=[],s=0,i=0;for(;s191&&n<224){let a=t[s++];e[i++]=String.fromCharCode((31&n)<<6|63&a)}else if(n>239&&n<365){let a=((7&n)<<18|(63&t[s++])<<12|(63&t[s++])<<6|63&t[s++])-65536;e[i++]=String.fromCharCode(55296+(a>>10)),e[i++]=String.fromCharCode(56320+(1023&a))}else{let a=t[s++],r=t[s++];e[i++]=String.fromCharCode((15&n)<<12|(63&a)<<6|63&r)}}return e.join("")}}}const h=(t=[],e=0)=>{const s={};for(let i=0;ih(["UTF_16","UTF_8"]))();getEncoding(){throw Error("not implemented")}isUTF8Encoding(){return this.getEncoding()===c.Encoding.UTF_8}isUTF16Encoding(){return this.getEncoding()===c.Encoding.UTF_16}}class l extends c{constructor(t=null){super(),this.bytes=t}getEncoding(){return c.Encoding.UTF_8}asCharSequence(){return o.utf8ByteArrayToString(this.bytes)}asBytes(){return this.bytes}length(){return this.bytes.length}}class u extends c{constructor(t=null){super(),this.charSequence=t}getEncoding(){return c.Encoding.UTF_16}asCharSequence(){return this.charSequence}asBytes(){return this.charSequence.toString().split("").map((t=>t.codePointAt(0)))}length(){return this.charSequence.length}}class p{static utf16(t){return new u(t)}static utf8(t){return Array.isArray(t)?new l(t):new l(o.stringToUtf8ByteArray(t))}}class g extends Error{constructor(t){super(t),this.name="RE2JSException"}}class E extends g{constructor(t,e=null){let s=`error parsing regexp: ${t}`;e&&(s+=`: \`${e}\``),super(s),this.name="RE2JSSyntaxException",this.message=s,this.error=t,this.input=e}getDescription(){return this.error}getPattern(){return this.input}}class f extends g{constructor(t){super(t),this.name="RE2JSCompileException"}}class A extends g{constructor(t){super(t),this.name="RE2JSGroupException"}}class _ extends g{constructor(t){super(t),this.name="RE2JSFlagsException"}}class C{static quoteReplacement(t){return t.indexOf("\\")<0&&t.indexOf("$")<0?t:t.split("").map((t=>{const e=t.codePointAt(0);return e===n.CODES["\\"]||e===n.CODES.$?`\\${t}`:t})).join("")}constructor(t,e){if(null===t)throw new Error("pattern is null");this.patternInput=t;const s=this.patternInput.re2();this.patternGroupCount=s.numberOfCapturingGroups(),this.groups=[],this.namedGroups=s.namedGroups,this.numberOfInstructions=s.numberOfInstructions(),e instanceof c?this.resetMatcherInput(e):Array.isArray(e)?this.resetMatcherInput(p.utf8(e)):this.resetMatcherInput(p.utf16(e))}pattern(){return this.patternInput}reset(){return this.matcherInputLength=this.matcherInput.length(),this.appendPos=0,this.hasMatch=!1,this.hasGroups=!1,this.anchorFlag=0,this}resetMatcherInput(t){if(null===t)throw new Error("input is null");return this.matcherInput=t,this.reset(),this}start(t=0){if("string"==typeof t){const e=this.namedGroups[t];if(!Number.isFinite(e))throw new A(`group '${t}' not found`);t=e}return this.loadGroup(t),this.groups[2*t]}end(t=0){if("string"==typeof t){const e=this.namedGroups[t];if(!Number.isFinite(e))throw new A(`group '${t}' not found`);t=e}return this.loadGroup(t),this.groups[2*t+1]}programSize(){return this.numberOfInstructions}group(t=0){if("string"==typeof t){const e=this.namedGroups[t];if(!Number.isFinite(e))throw new A(`group '${t}' not found`);t=e}const e=this.start(t),s=this.end(t);return e<0&&s<0?null:this.substring(e,s)}groupCount(){return this.patternGroupCount}loadGroup(t){if(t<0||t>this.patternGroupCount)throw new A(`Group index out of bounds: ${t}`);if(!this.hasMatch)throw new A("perhaps no match attempted");if(0===t||this.hasGroups)return;let e=this.groups[1]+1;e>this.matcherInputLength&&(e=this.matcherInputLength);const s=this.patternInput.re2().matchMachineInput(this.matcherInput,this.groups[0],e,this.anchorFlag,1+this.patternGroupCount);if(!s[0])throw new A("inconsistency in matching group data");this.groups=s[1],this.hasGroups=!0}matches(){return this.genMatch(0,i.ANCHOR_BOTH)}lookingAt(){return this.genMatch(0,i.ANCHOR_START)}find(t=null){if(null!==t){if(t<0||t>this.matcherInputLength)throw new A(`start index out of bounds: ${t}`);return this.reset(),this.genMatch(t,0)}return t=0,this.hasMatch&&(t=this.groups[1],this.groups[0]===this.groups[1]&&t++),this.genMatch(t,i.UNANCHORED)}genMatch(t,e){const s=this.patternInput.re2().matchMachineInput(this.matcherInput,t,this.matcherInputLength,e,1);return!!s[0]&&(this.groups=s[1],this.hasMatch=!0,this.hasGroups=!1,this.anchorFlag=e,!0)}substring(t,e){return this.matcherInput.isUTF8Encoding()?o.utf8ByteArrayToString(this.matcherInput.asBytes().slice(t,e)):this.matcherInput.asCharSequence().substring(t,e).toString()}inputLength(){return this.matcherInputLength}appendReplacement(t,e=!1){let s="";const i=this.start(),n=this.end();return this.appendPosn.CODES.get("9")||10*o+r-n.CODES.get("0")>this.patternGroupCount));a++)o=10*o+r-n.CODES.get("0");if(o>this.patternGroupCount)throw new A(`n > number of groups: ${o}`);const h=this.group(o);null!==h&&(e+=h),s=a,a--;continue}if(r===n.CODES.get("{")){sn.CODES.get("9")||10*o+r-n.CODES.get("0")>this.patternGroupCount));a++)o=10*o+r-n.CODES.get("0");if(o>this.patternGroupCount){e+=`$${o}`,s=a,a--;continue}const h=this.group(o);null!==h&&(e+=h),s=a,a--;continue}if(r===n.CODES.get("<")){s")&&t.codePointAt(i)!==n.CODES.get(" ");)i++;if(i===t.length||t.codePointAt(i)!==n.CODES.get(">")){e+=t.substring(a-1,i+1),s=i+1;continue}const r=t.substring(a+1,i);Object.prototype.hasOwnProperty.call(this.namedGroups,r)?e+=this.group(r):e+=`$<${r}>`,s=i+1}}return s=this.end)return O.EOF();let e=255&this.bytes[t++];return 128&e?192==(224&e)?(e&=31,t>=this.end?O.EOF():(e=e<<6|63&this.bytes[t++],e<<3|2)):224==(240&e)?(e&=15,t+1>=this.end?O.EOF():(e=e<<6|63&this.bytes[t++],e=e<<6|63&this.bytes[t++],e<<3|3)):(e&=7,t+2>=this.end?O.EOF():(e=e<<6|63&this.bytes[t++],e=e<<6|63&this.bytes[t++],e=e<<6|63&this.bytes[t++],e<<3|4)):e<<3|1}index(t,e){e+=this.start;const s=this.indexOf(this.bytes,t.prefixUTF8,e);return s<0?s:s-e}context(t){let e=-1;if((t+=this.start)>this.start&&t<=this.end){let s=t-1;if(e=this.bytes[s--],e>=128){let i=t-4;for(i=i&&128==(192&this.bytes[s]);)s--;s>3}}const s=t>3:-1;return o.emptyOpContext(e,s)}indexOf(t,e,s=0){let i=e.length;if(0===i)return-1;let n=t.length;for(let a=s;a<=n-i;a++)for(let s=0;s0&&t<=this.charSequence.length?this.charSequence.codePointAt(t-1):-1,s=t ${this.out}, ${this.arg}`;case T.ALT_MATCH:return`altmatch -> ${this.out}, ${this.arg}`;case T.CAPTURE:return`cap ${this.arg} -> ${this.out}`;case T.EMPTY_WIDTH:return`empty ${this.arg} -> ${this.out}`;case T.MATCH:return"match";case T.FAIL:return"fail";case T.NOP:return`nop -> ${this.out}`;case T.RUNE:return null===this.runes?"rune ":["rune ",T.escapeRunes(this.runes),this.arg&i.FOLD_CASE?"/i":""," -> ",this.out].join("");case T.RUNE1:return`rune1 ${T.escapeRunes(this.runes)} -> ${this.out}`;case T.RUNE_ANY:return`any -> ${this.out}`;case T.RUNE_ANY_NOT_NL:return`anynotnl -> ${this.out}`;default:throw new Error("unhandled case in Inst.toString")}}}class R{constructor(){this.inst=null,this.cap=[]}}class N{constructor(){this.sparse=[],this.densePcs=[],this.denseThreads=[],this.size=0}contains(t){const e=this.sparse[t];return ethis.matchcap.length?this.initNewCap(t):this.resetCap(t)}resetCap(t){for(let e=0;e0?(this.poolSize--,e=this.pool[this.poolSize]):e=new R,e.inst=t,e}freeQueue(t,e=0){const s=t.size-e,i=this.poolSize+s;this.pool.length>3,u=7&c,p=-1,g=0;for(c!==O.EOF()&&(c=t.step(e+u),p=c>>3,g=7&c),a=0===e?o.emptyOpContext(-1,l):t.context(e);;){if(r.isEmpty()){if(n&o.EMPTY_BEGIN_TEXT&&0!==e)break;if(this.matched)break;if(0!==this.re2.prefix.length&&p!==this.re2.prefixRune&&t.canCheckPrefix()){const s=t.index(this.re2,e);if(s<0)break;e+=s,c=t.step(e),l=c>>3,u=7&c,c=t.step(e+u),p=c>>3,g=7&c}}this.matched||0!==e&&s!==i.UNANCHORED||(this.ncap>0&&(this.matchcap[0]=e),this.add(r,this.prog.start,e,this.matchcap,a,null));const E=e+u;if(a=t.context(E),this.step(r,h,e,E,l,a,s,e===t.endPos()),0===u)break;if(0===this.ncap&&this.matched)break;e+=u,l=p,u=g,-1!==l&&(c=t.step(e+u),p=c>>3,g=7&c);const f=r;r=h,h=f}return this.freeQueue(h),this.matched}step(t,e,s,a,r,o,h,c){const l=this.re2.longest;for(let u=0;u0&&this.matchcap[0]0&&(!l||!this.matched||this.matchcap[1]0&&a.cap!==i&&(a.cap=i.slice(0,this.ncap)),t.denseThreads[r]=a,a=null;break;default:throw new Error("unhandled")}return a}}class L{static Op=(()=>h(["NO_MATCH","EMPTY_MATCH","LITERAL","CHAR_CLASS","ANY_CHAR_NOT_NL","ANY_CHAR","BEGIN_LINE","END_LINE","BEGIN_TEXT","END_TEXT","WORD_BOUNDARY","NO_WORD_BOUNDARY","CAPTURE","STAR","PLUS","QUEST","REPEAT","CONCAT","ALTERNATE","LEFT_PAREN","VERTICAL_BAR"]))();static isPseudoOp(t){return t>=L.Op.LEFT_PAREN}static emptySubs(){return[]}static quoteIfHyphen(t){return t===n.CODES.get("-")?"\\":""}static fromRegexp(t){const e=new L(t.op);return e.flags=t.flags,e.subs=t.subs,e.runes=t.runes,e.cap=t.cap,e.min=t.min,e.max=t.max,e.name=t.name,e.namedGroups=t.namedGroups,e}constructor(t){this.op=t,this.flags=0,this.subs=L.emptySubs(),this.runes=[],this.min=0,this.max=0,this.cap=0,this.name=null,this.namedGroups={}}reinit(){this.flags=0,this.subs=L.emptySubs(),this.runes=[],this.cap=0,this.min=0,this.max=0,this.name=null,this.namedGroups={}}toString(){return this.appendTo()}appendTo(){let t="";switch(this.op){case L.Op.NO_MATCH:t+="[^\\x00-\\x{10FFFF}]";break;case L.Op.EMPTY_MATCH:t+="(?:)";break;case L.Op.STAR:case L.Op.PLUS:case L.Op.QUEST:case L.Op.REPEAT:{const e=this.subs[0];switch(e.op>L.Op.CAPTURE||e.op===L.Op.LITERAL&&e.runes.length>1?t+=`(?:${e.appendTo()})`:t+=e.appendTo(),this.op){case L.Op.STAR:t+="*";break;case L.Op.PLUS:t+="+";break;case L.Op.QUEST:t+="?";break;case L.Op.REPEAT:t+=`{${this.min}`,this.min!==this.max&&(t+=",",this.max>=0&&(t+=this.max)),t+="}"}this.flags&i.NON_GREEDY&&(t+="?");break}case L.Op.CONCAT:for(let e of this.subs)e.op===L.Op.ALTERNATE?t+=`(?:${e.appendTo()})`:t+=e.appendTo();break;case L.Op.ALTERNATE:{let e="";for(let s of this.subs)t+=e,e="|",t+=s.appendTo();break}case L.Op.LITERAL:this.flags&i.FOLD_CASE&&(t+="(?i:");for(let e of this.runes)t+=o.escapeRune(e);this.flags&i.FOLD_CASE&&(t+=")");break;case L.Op.ANY_CHAR_NOT_NL:t+="(?-s:.)";break;case L.Op.ANY_CHAR:t+="(?s:.)";break;case L.Op.CAPTURE:null===this.name||0===this.name.length?t+="(":t+=`(?P<${this.name}>`,this.subs[0].op!==L.Op.EMPTY_MATCH&&(t+=this.subs[0].appendTo()),t+=")";break;case L.Op.BEGIN_TEXT:t+="\\A";break;case L.Op.END_TEXT:this.flags&i.WAS_DOLLAR?t+="(?-m:$)":t+="\\z";break;case L.Op.BEGIN_LINE:t+="^";break;case L.Op.END_LINE:t+="$";break;case L.Op.WORD_BOUNDARY:t+="\\b";break;case L.Op.NO_WORD_BOUNDARY:t+="\\B";break;case L.Op.CHAR_CLASS:if(this.runes.length%2!=0){t+="[invalid char class]";break}if(t+="[",0===this.runes.length)t+="^\\x00-\\x{10FFFF}";else if(0===this.runes[0]&&this.runes[this.runes.length-1]===r.MAX_RUNE){t+="^";for(let e=1;e>1];return 1&t?e.arg:e.out}patch(t,e){for(;0!==t;){const s=this.inst[t>>1];1&t?(t=s.arg,s.arg=e):(t=s.out,s.out=e)}}append(t,e){if(0===t)return e;if(0===e)return t;let s=t;for(;;){const t=this.next(s);if(0===t)break;s=t}const i=this.inst[s>>1];return 1&s?i.arg=e:i.out=e,t}toString(){let t="";for(let e=0;e0){s=[];for(let i=0;it.min){let i=k.simplify1(L.Op.QUEST,t.flags,e,null);for(let s=t.min+1;s0&&(s+=" ");const e=t[i],n=t[i+1];s+=e===n?`0x${e.toString(16)}`:`0x${e.toString(16)}-0x${n.toString(16)}`}return s+="]",s}static cmp(t,e,s,i){const n=t[e]-s;return 0!==n?n:i-t[e+1]}static qsortIntPair(t,e,s){const i=(e+s)/2&-2,n=t[i],a=t[i+1];let r=e,o=s;for(;r<=o;){for(;re&&Q.cmp(t,o,n,a)>0;)o-=2;if(r<=o){if(r!==o){let e=t[r];t[r]=t[o],t[o]=e,e=t[r+1],t[r+1]=t[o+1],t[o+1]=e}r+=2,o-=2}}ethis.r[t-1]&&(this.r[t-1]=i);continue}this.r[t]=s,this.r[t+1]=i,t+=2}return this.len=t,this}appendLiteral(t,e){return e&i.FOLD_CASE?this.appendFoldedRange(t,t):this.appendRange(t,t)}appendRange(t,e){if(this.len>0)for(let s=2;s<=4;s+=2)if(this.len>=s){const i=this.r[this.len-s],n=this.r[this.len-s+1];if(t<=n+1&&i<=e+1)return tn&&(this.r[this.len-s+1]=e),this}return this.r[this.len++]=t,this.r[this.len++]=e,this}appendFoldedRange(t,e){if(t<=r.MIN_FOLD&&e>=r.MAX_FOLD)return this.appendRange(t,e);if(er.MAX_FOLD)return this.appendRange(t,e);tr.MAX_FOLD&&(this.appendRange(r.MAX_FOLD+1,e),e=r.MAX_FOLD);for(let s=t;s<=e;s++){this.appendRange(s,s);for(let t=r.simpleFold(s);t!==s;t=r.simpleFold(t))this.appendRange(t,t)}return this}appendClass(t){for(let e=0;er.MAX_FOLD)return t;let e=t;const s=t;for(t=r.simpleFold(t);t!==s;t=r.simpleFold(t))e>t&&(e=t);return e}static leadingRegexp(t){if(t.op===L.Op.EMPTY_MATCH)return null;if(t.op===L.Op.CONCAT&&t.subs.length>0){const e=t.subs[0];return e.op===L.Op.EMPTY_MATCH?null:e}return t}static literalRegexp(t,e){const s=new L(L.Op.LITERAL);return s.flags=e,s.runes=o.stringToRunes(t),s}static parse(t,e){return new et(t,e).parseInternal()}static parseRepeat(t){const e=t.pos();if(!t.more()||!t.lookingAt("{"))return-1;t.skip(1);const s=et.parseInt(t);if(-1===s)return-1;if(!t.more())return-1;let i;if(t.lookingAt(",")){if(t.skip(1),!t.more())return-1;if(t.lookingAt("}"))i=-1;else if(-1===(i=et.parseInt(t)))return-1}else i=s;if(!t.more()||!t.lookingAt("}"))return-1;if(t.skip(1),s<0||s>1e3||-2===i||i>1e3||i>=0&&s>i)throw new E(et.ERR_INVALID_REPEAT_SIZE,t.from(e));return s<<16|i&r.MAX_BMP}static isValidCaptureName(t){if(0===t.length)return!1;for(let e=0;e=n.CODES.get("0")&&t.peek()<=n.CODES.get("9");)t.skip(1);const s=t.from(e);return 0===s.length||s.length>1&&s.codePointAt(0)===n.CODES.get("0")?-1:s.length>8?-2:parseFloat(s,10)}static isCharClass(t){return t.op===L.Op.LITERAL&&1===t.runes.length||t.op===L.Op.CHAR_CLASS||t.op===L.Op.ANY_CHAR_NOT_NL||t.op===L.Op.ANY_CHAR}static matchRune(t,e){switch(t.op){case L.Op.LITERAL:return 1===t.runes.length&&t.runes[0]===e;case L.Op.CHAR_CLASS:for(let s=0;sn.CODES.get("7"))break;case n.CODES.get("0"):{let e=s-n.CODES.get("0");for(let s=1;s<3&&!(!t.more()||t.peek()n.CODES.get("7"));s++)e=8*e+t.peek()-n.CODES.get("0"),t.skip(1);return e}case n.CODES.get("x"):{if(!t.more())break;if(s=t.pop(),s===n.CODES.get("{")){let e=0,i=0;for(;;){if(!t.more())break t;if(s=t.pop(),s===n.CODES.get("}"))break;const a=o.unhex(s);if(a<0)break t;if(i=16*i+a,i>r.MAX_RUNE)break t;e++}if(0===e)break t;return i}const e=o.unhex(s);if(!t.more())break;s=t.pop();const i=o.unhex(s);if(e<0||i<0)break;return 16*e+i}case n.CODES.get("a"):return n.CODES.get("");case n.CODES.get("f"):return n.CODES.get("\f");case n.CODES.get("n"):return n.CODES.get("\n");case n.CODES.get("r"):return n.CODES.get("\r");case n.CODES.get("t"):return n.CODES.get("\t");case n.CODES.get("v"):return n.CODES.get("\v");default:if(s<=r.MAX_ASCII&&!o.isalnum(s))return s}throw new E(et.ERR_INVALID_ESCAPE,t.from(e))}static parseClassChar(t,e){if(!t.more())throw new E(et.ERR_MISSING_BRACKET,t.from(e));return t.lookingAt("\\")?et.parseEscape(t):t.pop()}static concatRunes(t,e){return[...t,...e]}constructor(t,e=0){this.wholeRegexp=t,this.flags=e,this.numCap=0,this.namedGroups={},this.stack=[],this.free=null,this.numRegexp=0,this.numRunes=0,this.repeats=0,this.height=null,this.size=null}newRegexp(t){let e=this.free;return null!==e&&null!==e.subs&&e.subs.length>0?(this.free=e.subs[0],e.reinit(),e.op=t):(e=new L(t),this.numRegexp+=1),e}reuse(t){null!==this.height&&Object.prototype.hasOwnProperty.call(this.height,t)&&delete this.height[t],null!==t.subs&&t.subs.length>0&&(t.subs[0]=this.free),this.free=t}checkLimits(t){if(this.numRunes>et.MAX_RUNES)throw new E(et.ERR_LARGE);this.checkSize(t),this.checkHeight(t)}checkSize(t){if(null===this.size){if(0===this.repeats&&(this.repeats=1),t.op===L.Op.REPEAT){let e=t.max;-1===e&&(e=t.min),e<=0&&(e=1),e>et.MAX_SIZE/this.repeats?this.repeats=et.MAX_SIZE:this.repeats*=e}if(this.numRegexpet.MAX_SIZE)throw new E(et.ERR_LARGE)}calcSize(t,e=!1){if(!e&&Object.prototype.hasOwnProperty.call(this.size,t))return this.size[t];let s=0;switch(t.op){case L.Op.LITERAL:s=t.runes.length;break;case L.Op.CAPTURE:case L.Op.STAR:s=2+this.calcSize(t.subs[0]);break;case L.Op.PLUS:case L.Op.QUEST:s=1+this.calcSize(t.subs[0]);break;case L.Op.CONCAT:for(let e of t.subs)s+=this.calcSize(e);break;case L.Op.ALTERNATE:for(let e of t.subs)s+=this.calcSize(e);t.subs.length>1&&(s=s+t.subs.length-1);break;case L.Op.REPEAT:{let e=this.calcSize(t.subs[0]);if(-1===t.max){s=0===t.min?2+e:1+t.min*e;break}s=t.max*e+(t.max-t.min);break}}return s=Math.max(1,s),this.size[t]=s,s}checkHeight(t){if(!(this.numRegexpet.MAX_HEIGHT)throw new E(et.ERR_NESTING_DEPTH)}}calcHeight(t,e=!1){if(!e&&Object.prototype.hasOwnProperty.call(this.height,t))return this.height[t];let s=1;for(let e of t.subs){const t=this.calcHeight(e);s<1+t&&(s=1+t)}return this.height[t]=s,s}pop(){return this.stack.pop()}popToPseudo(){const t=this.stack.length;let e=t;for(;e>0&&!L.isPseudoOp(this.stack[e-1].op);)e--;const s=this.stack.slice(e,t);return this.stack=this.stack.slice(0,e),s}push(t){if(this.numRunes+=t.runes.length,t.op===L.Op.CHAR_CLASS&&2===t.runes.length&&t.runes[0]===t.runes[1]){if(this.maybeConcat(t.runes[0],-2&this.flags))return null;t.op=L.Op.LITERAL,t.runes=[t.runes[0]],t.flags=-2&this.flags}else if(t.op===L.Op.CHAR_CLASS&&4===t.runes.length&&t.runes[0]===t.runes[1]&&t.runes[2]===t.runes[3]&&r.simpleFold(t.runes[0])===t.runes[2]&&r.simpleFold(t.runes[2])===t.runes[0]||t.op===L.Op.CHAR_CLASS&&2===t.runes.length&&t.runes[0]+1===t.runes[1]&&r.simpleFold(t.runes[0])===t.runes[1]&&r.simpleFold(t.runes[1])===t.runes[0]){if(this.maybeConcat(t.runes[0],this.flags|i.FOLD_CASE))return null;t.op=L.Op.LITERAL,t.runes=[t.runes[0]],t.flags=this.flags|i.FOLD_CASE}else this.maybeConcat(-1,0);return this.stack.push(t),this.checkLimits(t),t}maybeConcat(t,e){const s=this.stack.length;if(s<2)return!1;const n=this.stack[s-1],a=this.stack[s-2];return n.op===L.Op.LITERAL&&a.op===L.Op.LITERAL&&(n.flags&i.FOLD_CASE)==(a.flags&i.FOLD_CASE)&&(a.runes=et.concatRunes(a.runes,n.runes),t>=0?(n.runes=[t],n.flags=e,!0):(this.pop(),this.reuse(n),!1))}newLiteral(t,e){const s=this.newRegexp(L.Op.LITERAL);return s.flags=e,e&i.FOLD_CASE&&(t=et.minFoldRune(t)),s.runes=[t],s}literal(t){this.push(this.newLiteral(t,this.flags))}op(t){const e=this.newRegexp(t);return e.flags=this.flags,this.push(e)}repeat(t,e,s,n,a,r){let o=this.flags;if(o&i.PERL_X&&(a.more()&&a.lookingAt("?")&&(a.skip(1),o^=i.NON_GREEDY),-1!==r))throw new E(et.ERR_INVALID_REPEAT_OP,a.from(r));const h=this.stack.length;if(0===h)throw new E(et.ERR_MISSING_REPEAT_ARGUMENT,a.from(n));const c=this.stack[h-1];if(L.isPseudoOp(c.op))throw new E(et.ERR_MISSING_REPEAT_ARGUMENT,a.from(n));const l=this.newRegexp(t);if(l.min=e,l.max=s,l.flags=o,l.subs=[c],this.stack[h-1]=l,this.checkLimits(l),t===L.Op.REPEAT&&(e>=2||s>=2)&&!this.repeatIsValid(l,1e3))throw new E(et.ERR_INVALID_REPEAT_SIZE,a.from(n))}repeatIsValid(t,e){if(t.op===L.Op.REPEAT){let s=t.max;if(0===s)return!0;if(s<0&&(s=t.min),s>e)return!1;s>0&&(e=Math.trunc(e/s))}for(let s of t.subs)if(!this.repeatIsValid(s,e))return!1;return!0}concat(){this.maybeConcat(-1,0);const t=this.popToPseudo();return 0===t.length?this.push(this.newRegexp(L.Op.EMPTY_MATCH)):this.push(this.collapse(t,L.Op.CONCAT))}alternate(){const t=this.popToPseudo();return t.length>0&&this.cleanAlt(t[t.length-1]),0===t.length?this.push(this.newRegexp(L.Op.NO_MATCH)):this.push(this.collapse(t,L.Op.ALTERNATE))}cleanAlt(t){t.op===L.Op.CHAR_CLASS&&(t.runes=new Q(t.runes).cleanClass().toArray(),2===t.runes.length&&0===t.runes[0]&&t.runes[1]===r.MAX_RUNE?(t.runes=[],t.op=L.Op.ANY_CHAR):4===t.runes.length&&0===t.runes[0]&&t.runes[1]===n.CODES.get("\n")-1&&t.runes[2]===n.CODES.get("\n")+1&&t.runes[3]===r.MAX_RUNE&&(t.runes=[],t.op=L.Op.ANY_CHAR_NOT_NL))}collapse(t,e){if(1===t.length)return t[0];let s=0;for(let i of t)s+=i.op===e?i.subs.length:1;let i=new Array(s).fill(null),n=0;for(let s of t)s.op===e?(i.splice(n,s.subs.length,...s.subs),n+=s.subs.length,this.reuse(s)):i[n++]=s;let a=this.newRegexp(e);if(a.subs=i,e===L.Op.ALTERNATE&&(a.subs=this.factor(a.subs),1===a.subs.length)){const t=a;a=a.subs[0],this.reuse(t)}return a}factor(t){if(t.length<2)return t;let e=0,s=t.length,n=0,a=null,r=0,o=0,h=0;for(let c=0;c<=s;c++){let l=null,u=0,p=0;if(c0&&(s=s.subs[0]),s.op===L.Op.LITERAL&&(l=s.runes,u=s.runes.length,p=s.flags&i.FOLD_CASE),p===o){let t=0;for(;t0){r=t;continue}}}if(c===h);else if(c===h+1)t[n++]=t[e+h];else{const s=this.newRegexp(L.Op.LITERAL);s.flags=o,s.runes=a.slice(0,r);for(let s=h;s0){const s=this.removeLeadingString(t.subs[0],e);if(t.subs[0]=s,s.op===L.Op.EMPTY_MATCH)switch(this.reuse(s),t.subs.length){case 0:case 1:t.op=L.Op.EMPTY_MATCH,t.subs=null;break;case 2:{const e=t;t=t.subs[1],this.reuse(e);break}default:t.subs=t.subs.slice(1,t.subs.length)}return t}return t.op===L.Op.LITERAL&&(t.runes=t.runes.slice(e,t.runes.length),0===t.runes.length&&(t.op=L.Op.EMPTY_MATCH)),t}removeLeadingRegexp(t,e){if(t.op===L.Op.CONCAT&&t.subs.length>0){switch(e&&this.reuse(t.subs[0]),t.subs=t.subs.slice(1,t.subs.length),t.subs.length){case 0:t.op=L.Op.EMPTY_MATCH,t.subs=L.emptySubs();break;case 1:{const e=t;t=t.subs[0],this.reuse(e);break}}return t}return e&&this.reuse(t),this.newRegexp(L.Op.EMPTY_MATCH)}parseInternal(){if(this.flags&i.LITERAL)return et.literalRegexp(this.wholeRegexp,this.flags);let t=-1,e=-1,s=-1;const a=new tt(this.wholeRegexp);for(;a.more();){let h=-1;t:switch(a.peek()){case n.CODES.get("("):if(this.flags&i.PERL_X&&a.lookingAt("(?")){this.parsePerlFlags(a);break}this.op(L.Op.LEFT_PAREN).cap=++this.numCap,a.skip(1);break;case n.CODES.get("|"):this.parseVerticalBar(),a.skip(1);break;case n.CODES.get(")"):this.parseRightParen(),a.skip(1);break;case n.CODES.get("^"):this.flags&i.ONE_LINE?this.op(L.Op.BEGIN_TEXT):this.op(L.Op.BEGIN_LINE),a.skip(1);break;case n.CODES.get("$"):this.flags&i.ONE_LINE?this.op(L.Op.END_TEXT).flags|=i.WAS_DOLLAR:this.op(L.Op.END_LINE),a.skip(1);break;case n.CODES.get("."):this.flags&i.DOT_NL?this.op(L.Op.ANY_CHAR):this.op(L.Op.ANY_CHAR_NOT_NL),a.skip(1);break;case n.CODES.get("["):this.parseClass(a);break;case n.CODES.get("*"):case n.CODES.get("+"):case n.CODES.get("?"):{h=a.pos();let i=null;switch(a.pop()){case n.CODES.get("*"):i=L.Op.STAR;break;case n.CODES.get("+"):i=L.Op.PLUS;break;case n.CODES.get("?"):i=L.Op.QUEST}this.repeat(i,e,s,h,a,t);break}case n.CODES.get("{"):{h=a.pos();const i=et.parseRepeat(a);if(i<0){a.rewindTo(h),this.literal(a.pop());break}e=i>>16,s=(i&r.MAX_BMP)<<16>>16,this.repeat(L.Op.REPEAT,e,s,h,a,t);break}case n.CODES.get("\\"):{const t=a.pos();if(a.skip(1),this.flags&i.PERL_X&&a.more()){switch(a.pop()){case n.CODES.get("A"):this.op(L.Op.BEGIN_TEXT);break t;case n.CODES.get("b"):this.op(L.Op.WORD_BOUNDARY);break t;case n.CODES.get("B"):this.op(L.Op.NO_WORD_BOUNDARY);break t;case n.CODES.get("C"):throw new E(et.ERR_INVALID_ESCAPE,"\\C");case n.CODES.get("Q"):{let t=a.rest();const e=t.indexOf("\\E");e>=0&&(t=t.substring(0,e)),a.skipString(t),a.skipString("\\E");let s=0;for(;s");if(i<0)throw new E(et.ERR_INVALID_NAMED_CAPTURE,s);const n=s.substring(e,i);if(t.skipString(n),t.skip(e+1),!et.isValidCaptureName(n))throw new E(et.ERR_INVALID_NAMED_CAPTURE,s.substring(0,i+1));const a=this.op(L.Op.LEFT_PAREN);if(a.cap=++this.numCap,this.namedGroups[n])throw new E(et.ERR_DUPLICATE_NAMED_CAPTURE,n);return this.namedGroups[n]=this.numCap,void(a.name=n)}t.skip(2);let a=this.flags,r=1,o=!1;t:for(;t.more();){const e=t.pop();switch(e){case n.CODES.get("i"):a|=i.FOLD_CASE,o=!0;break;case n.CODES.get("m"):a&=-17,o=!0;break;case n.CODES.get("s"):a|=i.DOT_NL,o=!0;break;case n.CODES.get("U"):a|=i.NON_GREEDY,o=!0;break;case n.CODES.get("-"):if(r<0)break t;r=-1,a=~a,o=!1;break;case n.CODES.get(":"):case n.CODES.get(")"):if(r<0){if(!o)break t;a=~a}return e===n.CODES.get(":")&&this.op(L.Op.LEFT_PAREN),void(this.flags=a);default:break t}}throw new E(et.ERR_INVALID_PERL_OP,t.from(e))}parseVerticalBar(){this.concat(),this.swapVerticalBar()||this.op(L.Op.VERTICAL_BAR)}swapVerticalBar(){const t=this.stack.length;if(t>=3&&this.stack[t-2].op===L.Op.VERTICAL_BAR&&et.isCharClass(this.stack[t-1])&&et.isCharClass(this.stack[t-3])){let e=this.stack[t-1],s=this.stack[t-3];if(e.op>s.op){const i=s;s=e,e=i,this.stack[t-3]=s}return et.mergeCharClass(s,e),this.reuse(e),this.pop(),!0}if(t>=2){const e=this.stack[t-1],s=this.stack[t-2];if(s.op===L.Op.VERTICAL_BAR)return t>=3&&this.cleanAlt(this.stack[t-3]),this.stack[t-2]=e,this.stack[t-1]=s,!0}return!1}parseRightParen(){this.concat(),this.swapVerticalBar()&&this.pop(),this.alternate();if(this.stack.length<2)throw new E(et.ERR_UNEXPECTED_PAREN,this.wholeRegexp);const t=this.pop(),e=this.pop();if(e.op!==L.Op.LEFT_PAREN)throw new E(et.ERR_UNEXPECTED_PAREN,this.wholeRegexp);this.flags=e.flags,0===e.cap?this.push(t):(e.op=L.Op.CAPTURE,e.subs=[t],this.push(e))}parsePerlClassEscape(t,e){const s=t.pos();if(!(this.flags&i.PERL_X&&t.more()&&t.pop()===n.CODES.get("\\")&&t.more()))return!1;t.pop();const a=t.from(s),r=y.has(a)?y.get(a):null;return null!==r&&(e.appendGroup(r,!!(this.flags&i.FOLD_CASE)),!0)}parseNamedClass(t,e){const s=t.rest(),n=s.indexOf(":]");if(n<0)return!1;const a=s.substring(0,n+2);t.skipString(a);const r=j.has(a)?j.get(a):null;if(null===r)throw new E(et.ERR_INVALID_CHAR_RANGE,a);return e.appendGroup(r,!!(this.flags&i.FOLD_CASE)),!0}parseUnicodeClass(t,e){const s=t.pos();if(!(this.flags&i.UNICODE_GROUPS)||!t.lookingAt("\\p")&&!t.lookingAt("\\P"))return!1;t.skip(1);let a,r=1,h=t.pop();if(h===n.CODES.get("P")&&(r=-1),!t.more())throw t.rewindTo(s),new E(et.ERR_INVALID_CHAR_RANGE,t.rest());if(h=t.pop(),h!==n.CODES.get("{"))a=o.runeToString(h);else{const e=t.rest(),i=e.indexOf("}");if(i<0)throw t.rewindTo(s),new E(et.ERR_INVALID_CHAR_RANGE,t.rest());a=e.substring(0,i),t.skipString(a),t.skip(1)}0!==a.length&&a.codePointAt(0)===n.CODES.get("^")&&(r=0-r,a=a.substring(1));const c=et.unicodeTable(a);if(null===c)throw new E(et.ERR_INVALID_CHAR_RANGE,t.from(s));const l=c.first,u=c.second;if(this.flags&i.FOLD_CASE&&null!==u){const t=(new Q).appendTable(l).appendTable(u).cleanClass().toArray();e.appendClassWithSign(t,r)}else e.appendTableWithSign(l,r);return!0}parseClass(t){const e=t.pos();t.skip(1);const s=this.newRegexp(L.Op.CHAR_CLASS);s.flags=this.flags;const a=new Q;let r=1;t.more()&&t.lookingAt("^")&&(r=-1,t.skip(1),this.flags&i.CLASS_NL||a.appendRange(n.CODES.get("\n"),n.CODES.get("\n")));let o=!0;for(;!t.more()||t.peek()!==n.CODES.get("]")||o;){if(t.more()&&t.lookingAt("-")&&!(this.flags&i.PERL_X)&&!o){const s=t.rest();if("-"===s||!s.startsWith("-]"))throw t.rewindTo(e),new E(et.ERR_INVALID_CHAR_RANGE,t.rest())}o=!1;const s=t.pos();if(t.lookingAt("[:")){if(this.parseNamedClass(t,a))continue;t.rewindTo(s)}if(this.parseUnicodeClass(t,a))continue;if(this.parsePerlClassEscape(t,a))continue;t.rewindTo(s);const n=et.parseClassChar(t,e);let r=n;if(t.more()&&t.lookingAt("-"))if(t.skip(1),t.more()&&t.lookingAt("]"))t.skip(-1);else if(r=et.parseClassChar(t,e),r0&&(r.prefixRune=r.prefix.codePointAt(0)),r.namedGroups=i.namedGroups,r}static match(t,e){return it.compile(t).match(e)}constructor(t,e,s=0,i=0){this.expr=t,this.prog=e,this.numSubexp=s,this.longest=i,this.cond=e.startCond(),this.prefix=null,this.prefixUTF8=null,this.prefixComplete=!1,this.prefixRune=0,this.pooled=new st}numberOfCapturingGroups(){return this.numSubexp}numberOfInstructions(){return this.prog.numInst()}get(){let t;do{t=this.pooled.get()}while(t&&!this.pooled.compareAndSet(t,t.next));return t}reset(){this.pooled.set(null)}put(t,e){let s=this.pooled.get();do{s=this.pooled.get(),!e&&s&&(t=b.fromMachine(t),e=!0),t.next!==s&&(t.next=s)}while(!this.pooled.compareAndSet(s,t))}toString(){return this.expr}doExecute(t,e,s,i){let n=this.get(),a=!1;n?null!==n.next&&(n=b.fromMachine(n),a=!0):(n=b.fromRE2(this),a=!0),n.init(i);const r=n.match(t,e,s)?n.submatches():null;return this.put(n,a),r}match(t){return null!==this.doExecute(S.fromUTF16(t),0,i.UNANCHORED,0)}matchWithGroup(t,e,s,i,n){return t instanceof c||(t=p.utf16(t)),this.matchMachineInput(t,e,s,i,n)}matchMachineInput(t,e,s,i,n){if(e>s)return[!1,null];const a=t.isUTF16Encoding()?S.fromUTF16(t.asCharSequence(),0,s):S.fromUTF8(t.asBytes(),0,s),r=this.doExecute(a,e,i,2*n);return null===r?[!1,null]:[!0,r]}matchUTF8(t){return null!==this.doExecute(S.fromUTF8(t),0,i.UNANCHORED,0)}replaceAll(t,e){return this.replaceAllFunc(t,(()=>e),2*t.length+1)}replaceFirst(t,e){return this.replaceAllFunc(t,(()=>e),1)}replaceAllFunc(t,e,s){let n=0,a=0,r="";const o=S.fromUTF16(t);let h=0;for(;a<=t.length;){const c=this.doExecute(o,a,i.UNANCHORED,2);if(null===c||0===c.length)break;r+=t.substring(n,c[0]),(c[1]>n||0===c[0])&&(r+=e(t.substring(c[0],c[1])),h++),n=c[1];const l=7&o.step(a);if(a+l>c[1]?a+=l:a+1>c[1]?a++:a=c[1],h>=s)break}return r+=t.substring(n),r}pad(t){if(null===t)return null;let e=2*(1+this.numSubexp);if(t.lengtht){let n=[];const a=t.endPos();e<0&&(e=a+1);let r=0,o=0,h=-1;for(;o=0&&(s[i]=t.slice(e[2*i],e[2*i+1]));return s}findUTF8SubmatchIndex(t){return this.pad(this.doExecute(S.fromUTF8(t),0,i.UNANCHORED,this.prog.numCap))}findSubmatch(t){const e=this.doExecute(S.fromUTF16(t),0,i.UNANCHORED,this.prog.numCap);if(null===e)return null;const s=new Array(1+this.numSubexp).fill(null);for(let i=0;i=0&&(s[i]=t.substring(e[2*i],e[2*i+1]));return s}findSubmatchIndex(t){return this.pad(this.doExecute(S.fromUTF16(t),0,i.UNANCHORED,this.prog.numCap))}findAllUTF8(t,e){const s=this.allMatches(S.fromUTF8(t),e,(e=>t.slice(e[0],e[1])));return 0===s.length?null:s}findAllUTF8Index(t,e){const s=this.allMatches(S.fromUTF8(t),e,(t=>t.slice(0,2)));return 0===s.length?null:s}findAll(t,e){const s=this.allMatches(S.fromUTF16(t),e,(e=>t.substring(e[0],e[1])));return 0===s.length?null:s}findAllIndex(t,e){const s=this.allMatches(S.fromUTF16(t),e,(t=>t.slice(0,2)));return 0===s.length?null:s}findAllUTF8Submatch(t,e){const s=this.allMatches(S.fromUTF8(t),e,(e=>{let s=new Array(e.length/2|0).fill(null);for(let i=0;i=0&&(s[i]=t.slice(e[2*i],e[2*i+1]));return s}));return 0===s.length?null:s}findAllUTF8SubmatchIndex(t,e){const s=this.allMatches(S.fromUTF8(t),e);return 0===s.length?null:s}findAllSubmatch(t,e){const s=this.allMatches(S.fromUTF16(t),e,(e=>{let s=new Array(e.length/2|0).fill(null);for(let i=0;i=0&&(s[i]=t.substring(e[2*i],e[2*i+1]));return s}));return 0===s.length?null:s}findAllSubmatchIndex(t,e){const s=this.allMatches(S.fromUTF16(t),e);return 0===s.length?null:s}}class nt{static isUpperCaseAlpha(t){return"A"<=t&&t<="Z"}static isHexadecimal(t){return"0"<=t&&t<="9"||"A"<=t&&t<="F"||"a"<=t&&t<="f"}static getUtf8CharSize(t){const e=t.charCodeAt(0);return e<128?1:e<2048?2:e<65536?3:4}static translate(t){if("string"!=typeof t)return t;let e="",s=!1,i=t.length;0===i&&(e="(?:)",s=!0);let n=0;for(;n>4).toString(16).toUpperCase(),e+=(i.charCodeAt(0)-64&15).toString(16).toUpperCase(),n+=3,s=!0;continue}}e+="\\c",n+=2;continue;case"u":if(n+2=i||"="!==t[n+3]&&"!"!==t[n+3])){e+="(?P<",n+=3,s=!0;continue}}let r=nt.getUtf8CharSize(a);e+=t.substring(n,n+r),n+=r}return s?e:t}}class at{static CASE_INSENSITIVE=1;static DOTALL=2;static MULTILINE=4;static DISABLE_UNICODE_GROUPS=8;static LONGEST_MATCH=16;static quote(t){return o.quoteMeta(t)}static translateRegExp(t){return nt.translate(t)}static compile(t,e=0){let s=t;if(e&at.CASE_INSENSITIVE&&(s=`(?i)${s}`),e&at.DOTALL&&(s=`(?s)${s}`),e&at.MULTILINE&&(s=`(?m)${s}`),e&~(at.MULTILINE|at.DOTALL|at.CASE_INSENSITIVE|at.DISABLE_UNICODE_GROUPS|at.LONGEST_MATCH))throw new _("Flags should only be a combination of MULTILINE, DOTALL, CASE_INSENSITIVE, DISABLE_UNICODE_GROUPS, LONGEST_MATCH");let n=i.PERL;e&at.DISABLE_UNICODE_GROUPS&&(n&=-129);const a=new at(t,e);return a.re2Input=it.compileImpl(s,n,!!(e&at.LONGEST_MATCH)),a}static matches(t,e){return at.compile(t).matcher(e).matches()}static initTest(t,e,s){if(null==t)throw new Error("pattern is null");if(null==s)throw new Error("re2 is null");const i=new at(t,e);return i.re2Input=s,i}constructor(t,e){this.patternInput=t,this.flagsInput=e}reset(){this.re2Input.reset()}flags(){return this.flagsInput}pattern(){return this.patternInput}re2(){return this.re2Input}matches(t){return this.matcher(t).matches()}matcher(t){return Array.isArray(t)&&(t=p.utf8(t)),new C(this,t)}split(t,e=0){const s=this.matcher(t),i=[];let n=0,a=0;for(;s.find();)if(0!==a||0!==s.end()){if(e>0&&i.length===e-1)break;if(a===s.start()){if(0===e){n+=1,a=s.end();continue}}else for(;n>0;)i.push(""),n-=1;i.push(s.substring(a,s.start())),a=s.end()}else a=s.end();if(0===e&&a!==s.inputLength()){for(;n>0;)i.push(""),n-=1;i.push(s.substring(a,s.inputLength()))}return 0===e&&0!==i.length||i.push(s.substring(a,s.inputLength())),i}toString(){return this.patternInput}programSize(){return this.re2Input.numberOfInstructions()}groupCount(){return this.re2Input.numberOfCapturingGroups()}namedGroups(){return this.re2Input.namedGroups}equals(t){return this===t||null!==t&&this.constructor===t.constructor&&(this.flagsInput===t.flagsInput&&this.patternInput===t.patternInput)}}}}]); +//# sourceMappingURL=470.js.map?_cache=3204c8fc47e32152da72 \ No newline at end of file diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/470.js.LICENSE.txt b/compose/grafana/plugins/grafana-lokiexplore-app/470.js.LICENSE.txt new file mode 100644 index 0000000..0fac0b7 --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/470.js.LICENSE.txt @@ -0,0 +1,10 @@ +/*! + * re2js + * RE2JS is the JavaScript port of RE2, a regular expression engine that provides linear time matching + * + * @version v1.1.0 + * @author Alexey Vasiliev + * @homepage https://github.com/le0pard/re2js#readme + * @repository github:le0pard/re2js + * @license MIT + */ diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/470.js.map b/compose/grafana/plugins/grafana-lokiexplore-app/470.js.map new file mode 100644 index 0000000..6409185 --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/470.js.map @@ -0,0 +1 @@ +{"version":3,"file":"470.js?_cache=3204c8fc47e32152da72","mappings":";8RAWA,MAAMA,EAEJC,iBAAmB,EAEnBA,eAAiB,EAEjBA,gBAAkB,EAElBA,cAAgB,EAGhBA,gBAAkB,GAElBA,kBAAoB,GAapBA,cAAgB,GAEhBA,sBAAwB,IAExBA,kBAAoB,IACpBA,gBAAkB,KAAOD,EAASE,SAAWF,EAASG,OAApC,GAElBF,YAAc,KAAOD,EAASE,SAAWF,EAASI,SAAWJ,EAASK,OAASL,EAASM,eAA1E,GAEdL,aAAe,EAEfA,kBAAoB,EACpBA,oBAAsB,EACtBA,mBAAqB,EAMvB,MAAMM,EAEJN,aAAe,KAAO,IAAIO,IAAI,CAAC,CAAC,IAAQ,GAAI,CAAC,KAAM,GAAI,CAAC,KAAM,GAAI,CAAC,KAAM,IAAK,CAAC,KAAM,IAAK,CAAC,KAAM,IAAK,CAAC,KAAM,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,KAAM,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,OAAvqB,GAIf,kBAAOC,CAAYC,GACjB,MAAMC,EAAIC,OAAOC,cAAcH,GAAWD,cAC1C,GAAIE,EAAEG,OAAS,EACb,OAAOJ,EAET,MAAMK,EAAUH,OAAOC,cAAcF,EAAEK,YAAY,IAAIC,cACvD,OAAIF,EAAQD,OAAS,GAAKC,EAAQC,YAAY,KAAON,EAC5CA,EAEFC,EAAEK,YAAY,EACvB,CAIA,kBAAOC,CAAYP,GACjB,MAAMC,EAAIC,OAAOC,cAAcH,GAAWO,cAC1C,GAAIN,EAAEG,OAAS,EACb,OAAOJ,EAET,MAAMK,EAAUH,OAAOC,cAAcF,EAAEK,YAAY,IAAIP,cACvD,OAAIM,EAAQD,OAAS,GAAKC,EAAQC,YAAY,KAAON,EAC5CA,EAEFC,EAAEK,YAAY,EACvB,EAMF,MAAME,EACJjB,kBAAoB,KAAO,IAAIO,IAAI,CAAC,CAAC,GAAI,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,IAAK,CAAC,GAAI,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,IAAK,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,IAAK,MAAO,CAAC,KAAM,KAAM,CAAC,KAAM,MAAO,CAAC,KAAM,MAAO,CAAC,IAAK,OAAQ,CAAC,MAAO,KAAM,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,IAAK,OAAQ,CAAC,MAAO,KAAM,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,MAAQ,CAAC,KAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,MAAO,OAAQ,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAAS,CAAC,OAAQ,UAA7/V,GACpBP,SAAW,CAAC,CAAC,EAAG,GAAI,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,KAAM,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,MAAQ,QAAS,IACxoXA,UAAY,CAAC,CAAC,EAAG,GAAI,GAAI,CAAC,IAAK,IAAK,IACpCA,UAAY,CAAC,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IACjWA,UAAY,CAAC,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,QAAS,GAAI,CAAC,QAAS,QAAS,IACzEA,UAAY,CAAC,CAAC,MAAO,MAAO,IAC5BA,SAAW,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,IAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,MAAO,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAC/lXA,aAAe,CAAC,CAAC,IAAK,IAAK,IAC3BA,UAAY,CAAC,CAAC,GAAI,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,IAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,MAAO,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAC95FA,cAAgB,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,IAClhEA,UAAY,CAAC,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,KAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,OACpkCA,UAAY,CAAC,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,IAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAC5lSA,UAAY,CAAC,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IACjIA,cAAgB,CAAC,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAC/JA,UAAY,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,MAAO,CAAC,OAAQ,OAAQ,IAC1pFA,aAAekB,KAAKC,GACpBnB,cAAgB,CAAC,CAAC,GAAI,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,KAAM,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,IAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,IACh/DA,SAAW,CAAC,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,KAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,MAAO,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAC3jLA,aAAe,CAAC,CAAC,IAAK,IAAK,IAAK,CAAC,KAAM,KAAM,IAC7CA,UAAY,CAAC,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,KAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IACl/FA,UAAY,CAAC,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,IACnGA,UAAY,CAAC,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,MAAO,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAC5sLA,cAAgB,CAAC,CAAC,IAAK,IAAK,IAAK,CAAC,KAAM,KAAM,IAC9CA,SAAW,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IACllFA,UAAY,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAChyCA,UAAY,CAAC,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IACrNA,UAAY,CAAC,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAC9zCA,SAAW,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,IAAK,IAAK,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,IAC7nGA,UAAY,CAAC,CAAC,GAAI,KAAM,MAAO,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IACtGA,UAAY,CAAC,CAAC,GAAI,KAAM,MAAO,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,MACrPA,UAAY,CAAC,CAAC,GAAI,GAAI,IAAK,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAChcA,UAAY,CAAC,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IACvGA,UAAY,CAAC,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IACxHA,UAAY,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,KAAM,CAAC,IAAK,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,IAC7lGA,UAAY,CAAC,CAAC,GAAI,GAAI,IAAK,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAC3fA,SAAW,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,IAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,KAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAC/zHA,UAAY,CAAC,CAAC,GAAI,IAAK,KAAM,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,OAClSA,UAAY,CAAC,CAAC,GAAI,GAAI,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,IAAK,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,IACldA,UAAY,CAAC,CAAC,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,IAC75BA,UAAY,CAAC,CAAC,IAAK,IAAK,GAAI,CAAC,IAAK,IAAK,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,IAAK,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,IAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,KAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,MAAO,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,OAAQ,OAAQ,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,MAAO,CAAC,OAAQ,OAAQ,KAAM,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,MAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,IAAK,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,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CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,MAAO,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,KAAM,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,KAAM,GAAI,CAAC,KAAM,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,OAAQ,CAAC,MAAO,MAAO,KAAM,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,IAAK,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,KAAO,MAAO,GAAI,CAAC,MAAO,MAAO,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,CAAC,OAAQ,OAAQ,GAAI,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","sources":["webpack://grafana-lokiexplore-app/../node_modules/re2js/build/index.esm.js"],"sourcesContent":["/*!\n * re2js\n * RE2JS is the JavaScript port of RE2, a regular expression engine that provides linear time matching\n *\n * @version v1.1.0\n * @author Alexey Vasiliev\n * @homepage https://github.com/le0pard/re2js#readme\n * @repository github:le0pard/re2js\n * @license MIT\n */\n//// Parser flags.\nclass RE2Flags {\n // Fold case during matching (case-insensitive).\n static FOLD_CASE = 0x01;\n // Treat pattern as a literal string instead of a regexp.\n static LITERAL = 0x02;\n // Allow character classes like [^a-z] and [[:space:]] to match newline.\n static CLASS_NL = 0x04;\n // Allow '.' to match newline.\n static DOT_NL = 0x08;\n // Treat ^ and $ as only matching at beginning and end of text, not\n // around embedded newlines. (Perl's default).\n static ONE_LINE = 0x10;\n // Make repetition operators default to non-greedy.\n static NON_GREEDY = 0x20;\n // allow Perl extensions:\n // non-capturing parens - (?: )\n // non-greedy operators - *? +? ?? {}?\n // flag edits - (?i) (?-i) (?i: )\n // i - FoldCase\n // m - !OneLine\n // s - DotNL\n // U - NonGreedy\n // line ends: \\A \\z\n // \\Q and \\E to disable/enable metacharacters\n // (?Pexpr) for named captures\n // \\C (any byte) is not supported.\n static PERL_X = 0x40;\n // Allow \\p{Han}, \\P{Han} for Unicode group and negation.\n static UNICODE_GROUPS = 0x80;\n // Regexp END_TEXT was $, not \\z. Internal use only.\n static WAS_DOLLAR = 0x100;\n static MATCH_NL = (() => RE2Flags.CLASS_NL | RE2Flags.DOT_NL)();\n // As close to Perl as possible.\n static PERL = (() => RE2Flags.CLASS_NL | RE2Flags.ONE_LINE | RE2Flags.PERL_X | RE2Flags.UNICODE_GROUPS)();\n // POSIX syntax.\n static POSIX = 0;\n //// Anchors\n static UNANCHORED = 0;\n static ANCHOR_START = 1;\n static ANCHOR_BOTH = 2;\n}\n\n/**\n * Various constants and helper for unicode codepoints.\n */\nclass Codepoint {\n // codePointAt(0)\n static CODES = (() => new Map([['\\x07', 7], ['\\b', 8], ['\\t', 9], ['\\n', 10], ['\\v', 11], ['\\f', 12], ['\\r', 13], [' ', 32], ['\"', 34], ['$', 36], ['&', 38], ['(', 40], [')', 41], ['*', 42], ['+', 43], ['-', 45], ['.', 46], ['0', 48], ['1', 49], ['2', 50], ['3', 51], ['4', 52], ['5', 53], ['6', 54], ['7', 55], ['8', 56], ['9', 57], [':', 58], ['<', 60], ['>', 62], ['?', 63], ['A', 65], ['B', 66], ['C', 67], ['F', 70], ['P', 80], ['Q', 81], ['U', 85], ['Z', 90], ['[', 91], ['\\\\', 92], [']', 93], ['^', 94], ['_', 95], ['a', 97], ['b', 98], ['f', 102], ['i', 105], ['m', 109], ['n', 110], ['r', 114], ['s', 115], ['t', 116], ['v', 118], ['x', 120], ['z', 122], ['{', 123], ['|', 124], ['}', 125]]))();\n\n // convert unicode codepoint to upper case codepoint\n // return same codepoint, if cannot do it (or codepoint not have upper variation)\n static toUpperCase(codepoint) {\n const s = String.fromCodePoint(codepoint).toUpperCase();\n if (s.length > 1) {\n return codepoint;\n }\n const sOrigin = String.fromCodePoint(s.codePointAt(0)).toLowerCase();\n if (sOrigin.length > 1 || sOrigin.codePointAt(0) !== codepoint) {\n return codepoint;\n }\n return s.codePointAt(0);\n }\n\n // convert unicode codepoint to lower case codepoint\n // return same codepoint, if cannot do it (or codepoint not have lower variation)\n static toLowerCase(codepoint) {\n const s = String.fromCodePoint(codepoint).toLowerCase();\n if (s.length > 1) {\n return codepoint;\n }\n const sOrigin = String.fromCodePoint(s.codePointAt(0)).toUpperCase();\n if (sOrigin.length > 1 || sOrigin.codePointAt(0) !== codepoint) {\n return codepoint;\n }\n return s.codePointAt(0);\n }\n}\n\n// GENERATED BY tools/scripts/genUnicodeTable.js; DO NOT EDIT.\n// yarn node ./tools/scripts/genUnicodeTable.js > src/UnicodeTables.js\n\nclass UnicodeTables {\n static CASE_ORBIT = (() => new Map([[75, 107], [107, 8490], [8490, 75], [83, 115], [115, 383], [383, 83], [181, 924], [924, 956], [956, 181], [197, 229], [229, 8491], [8491, 197], [452, 453], [453, 454], [454, 452], [455, 456], [456, 457], [457, 455], [458, 459], [459, 460], [460, 458], [497, 498], [498, 499], [499, 497], [837, 921], [921, 953], [953, 8126], [8126, 837], [914, 946], [946, 976], [976, 914], [917, 949], [949, 1013], [1013, 917], [920, 952], [952, 977], [977, 1012], [1012, 920], [922, 954], [954, 1008], [1008, 922], [928, 960], [960, 982], [982, 928], [929, 961], [961, 1009], [1009, 929], [931, 962], [962, 963], [963, 931], [934, 966], [966, 981], [981, 934], [937, 969], [969, 8486], [8486, 937], [1042, 1074], [1074, 7296], [7296, 1042], [1044, 1076], [1076, 7297], [7297, 1044], [1054, 1086], [1086, 7298], [7298, 1054], [1057, 1089], [1089, 7299], [7299, 1057], [1058, 1090], [1090, 7300], [7300, 7301], [7301, 1058], [1066, 1098], [1098, 7302], [7302, 1066], [1122, 1123], [1123, 7303], [7303, 1122], [7304, 42570], [42570, 42571], [42571, 7304], [7305, 7306], [7306, 7305], [7776, 7777], [7777, 7835], [7835, 7776], [223, 7838], [7838, 223], [8064, 8072], [8072, 8064], [8065, 8073], [8073, 8065], [8066, 8074], [8074, 8066], [8067, 8075], [8075, 8067], [8068, 8076], [8076, 8068], [8069, 8077], [8077, 8069], [8070, 8078], [8078, 8070], [8071, 8079], [8079, 8071], [8080, 8088], [8088, 8080], [8081, 8089], [8089, 8081], [8082, 8090], [8090, 8082], [8083, 8091], [8091, 8083], [8084, 8092], [8092, 8084], [8085, 8093], [8093, 8085], [8086, 8094], [8094, 8086], [8087, 8095], [8095, 8087], [8096, 8104], [8104, 8096], [8097, 8105], [8105, 8097], [8098, 8106], [8106, 8098], [8099, 8107], [8107, 8099], [8100, 8108], [8108, 8100], [8101, 8109], [8109, 8101], [8102, 8110], [8110, 8102], [8103, 8111], [8111, 8103], [8115, 8124], [8124, 8115], [8131, 8140], [8140, 8131], [912, 8147], [8147, 912], [944, 8163], [8163, 944], [8179, 8188], [8188, 8179], [612, 42955], [42955, 612], [42956, 42957], [42957, 42956], [42970, 42971], [42971, 42970], [411, 42972], [42972, 411], [64261, 64262], [64262, 64261], [66560, 66600], [66600, 66560], [66561, 66601], [66601, 66561], [66562, 66602], [66602, 66562], [66563, 66603], [66603, 66563], [66564, 66604], [66604, 66564], [66565, 66605], [66605, 66565], [66566, 66606], [66606, 66566], [66567, 66607], [66607, 66567], [66568, 66608], [66608, 66568], [66569, 66609], [66609, 66569], [66570, 66610], [66610, 66570], [66571, 66611], [66611, 66571], [66572, 66612], [66612, 66572], [66573, 66613], [66613, 66573], [66574, 66614], [66614, 66574], [66575, 66615], [66615, 66575], [66576, 66616], [66616, 66576], [66577, 66617], [66617, 66577], [66578, 66618], [66618, 66578], [66579, 66619], [66619, 66579], [66580, 66620], [66620, 66580], [66581, 66621], [66621, 66581], [66582, 66622], [66622, 66582], [66583, 66623], [66623, 66583], [66584, 66624], [66624, 66584], [66585, 66625], [66625, 66585], [66586, 66626], [66626, 66586], [66587, 66627], [66627, 66587], [66588, 66628], [66628, 66588], [66589, 66629], [66629, 66589], [66590, 66630], [66630, 66590], [66591, 66631], [66631, 66591], [66592, 66632], [66632, 66592], [66593, 66633], [66633, 66593], [66594, 66634], [66634, 66594], [66595, 66635], [66635, 66595], [66596, 66636], [66636, 66596], [66597, 66637], [66637, 66597], [66598, 66638], [66638, 66598], [66599, 66639], [66639, 66599], [66736, 66776], [66776, 66736], [66737, 66777], [66777, 66737], [66738, 66778], [66778, 66738], [66739, 66779], [66779, 66739], [66740, 66780], [66780, 66740], [66741, 66781], [66781, 66741], [66742, 66782], [66782, 66742], [66743, 66783], [66783, 66743], [66744, 66784], [66784, 66744], [66745, 66785], [66785, 66745], [66746, 66786], [66786, 66746], [66747, 66787], [66787, 66747], [66748, 66788], [66788, 66748], [66749, 66789], [66789, 66749], [66750, 66790], [66790, 66750], [66751, 66791], [66791, 66751], [66752, 66792], [66792, 66752], [66753, 66793], [66793, 66753], [66754, 66794], [66794, 66754], [66755, 66795], [66795, 66755], [66756, 66796], [66796, 66756], [66757, 66797], [66797, 66757], [66758, 66798], [66798, 66758], [66759, 66799], [66799, 66759], [66760, 66800], [66800, 66760], [66761, 66801], [66801, 66761], [66762, 66802], [66802, 66762], [66763, 66803], [66803, 66763], [66764, 66804], [66804, 66764], [66765, 66805], [66805, 66765], [66766, 66806], [66806, 66766], [66767, 66807], [66807, 66767], [66768, 66808], [66808, 66768], [66769, 66809], [66809, 66769], [66770, 66810], [66810, 66770], [66771, 66811], [66811, 66771], [66928, 66967], [66967, 66928], [66929, 66968], [66968, 66929], [66930, 66969], [66969, 66930], [66931, 66970], [66970, 66931], [66932, 66971], [66971, 66932], [66933, 66972], [66972, 66933], [66934, 66973], [66973, 66934], [66935, 66974], [66974, 66935], [66936, 66975], [66975, 66936], [66937, 66976], [66976, 66937], [66938, 66977], [66977, 66938], [66940, 66979], [66979, 66940], [66941, 66980], [66980, 66941], [66942, 66981], [66981, 66942], [66943, 66982], [66982, 66943], [66944, 66983], [66983, 66944], [66945, 66984], [66984, 66945], [66946, 66985], [66985, 66946], [66947, 66986], [66986, 66947], [66948, 66987], [66987, 66948], [66949, 66988], [66988, 66949], [66950, 66989], [66989, 66950], [66951, 66990], [66990, 66951], [66952, 66991], [66991, 66952], [66953, 66992], [66992, 66953], [66954, 66993], [66993, 66954], [66956, 66995], [66995, 66956], [66957, 66996], [66996, 66957], [66958, 66997], [66997, 66958], [66959, 66998], [66998, 66959], [66960, 66999], [66999, 66960], [66961, 67000], [67000, 66961], [66962, 67001], [67001, 66962], [66964, 67003], [67003, 66964], [66965, 67004], [67004, 66965], [68736, 68800], [68800, 68736], [68737, 68801], [68801, 68737], [68738, 68802], [68802, 68738], [68739, 68803], [68803, 68739], [68740, 68804], [68804, 68740], [68741, 68805], [68805, 68741], [68742, 68806], [68806, 68742], [68743, 68807], [68807, 68743], [68744, 68808], [68808, 68744], [68745, 68809], [68809, 68745], [68746, 68810], [68810, 68746], [68747, 68811], [68811, 68747], [68748, 68812], [68812, 68748], [68749, 68813], [68813, 68749], [68750, 68814], [68814, 68750], [68751, 68815], [68815, 68751], [68752, 68816], [68816, 68752], [68753, 68817], [68817, 68753], [68754, 68818], [68818, 68754], [68755, 68819], [68819, 68755], [68756, 68820], [68820, 68756], [68757, 68821], [68821, 68757], [68758, 68822], [68822, 68758], [68759, 68823], [68823, 68759], [68760, 68824], [68824, 68760], [68761, 68825], [68825, 68761], [68762, 68826], [68826, 68762], [68763, 68827], [68827, 68763], [68764, 68828], [68828, 68764], [68765, 68829], [68829, 68765], [68766, 68830], [68830, 68766], [68767, 68831], [68831, 68767], [68768, 68832], [68832, 68768], [68769, 68833], [68833, 68769], [68770, 68834], [68834, 68770], [68771, 68835], [68835, 68771], [68772, 68836], [68836, 68772], [68773, 68837], [68837, 68773], [68774, 68838], [68838, 68774], [68775, 68839], [68839, 68775], [68776, 68840], [68840, 68776], [68777, 68841], [68841, 68777], [68778, 68842], [68842, 68778], [68779, 68843], [68843, 68779], [68780, 68844], [68844, 68780], [68781, 68845], [68845, 68781], [68782, 68846], [68846, 68782], [68783, 68847], [68847, 68783], [68784, 68848], [68848, 68784], [68785, 68849], [68849, 68785], [68786, 68850], [68850, 68786], [68944, 68976], [68976, 68944], [68945, 68977], [68977, 68945], [68946, 68978], [68978, 68946], [68947, 68979], [68979, 68947], [68948, 68980], [68980, 68948], [68949, 68981], [68981, 68949], [68950, 68982], [68982, 68950], [68951, 68983], [68983, 68951], [68952, 68984], [68984, 68952], [68953, 68985], [68985, 68953], [68954, 68986], [68986, 68954], [68955, 68987], [68987, 68955], [68956, 68988], [68988, 68956], [68957, 68989], [68989, 68957], [68958, 68990], [68990, 68958], [68959, 68991], [68991, 68959], [68960, 68992], [68992, 68960], [68961, 68993], [68993, 68961], [68962, 68994], [68994, 68962], [68963, 68995], [68995, 68963], [68964, 68996], [68996, 68964], [68965, 68997], [68997, 68965], [71840, 71872], [71872, 71840], [71841, 71873], [71873, 71841], [71842, 71874], [71874, 71842], [71843, 71875], [71875, 71843], [71844, 71876], [71876, 71844], [71845, 71877], [71877, 71845], [71846, 71878], [71878, 71846], [71847, 71879], [71879, 71847], [71848, 71880], [71880, 71848], [71849, 71881], [71881, 71849], [71850, 71882], [71882, 71850], [71851, 71883], [71883, 71851], [71852, 71884], [71884, 71852], [71853, 71885], [71885, 71853], [71854, 71886], [71886, 71854], [71855, 71887], [71887, 71855], [71856, 71888], [71888, 71856], [71857, 71889], [71889, 71857], [71858, 71890], [71890, 71858], [71859, 71891], [71891, 71859], [71860, 71892], [71892, 71860], [71861, 71893], [71893, 71861], [71862, 71894], [71894, 71862], [71863, 71895], [71895, 71863], [71864, 71896], [71896, 71864], [71865, 71897], [71897, 71865], [71866, 71898], [71898, 71866], [71867, 71899], [71899, 71867], [71868, 71900], [71900, 71868], [71869, 71901], [71901, 71869], [71870, 71902], [71902, 71870], [71871, 71903], [71903, 71871], [93760, 93792], [93792, 93760], [93761, 93793], [93793, 93761], [93762, 93794], [93794, 93762], [93763, 93795], [93795, 93763], [93764, 93796], [93796, 93764], [93765, 93797], [93797, 93765], [93766, 93798], [93798, 93766], [93767, 93799], [93799, 93767], [93768, 93800], [93800, 93768], [93769, 93801], [93801, 93769], [93770, 93802], [93802, 93770], [93771, 93803], [93803, 93771], [93772, 93804], [93804, 93772], [93773, 93805], [93805, 93773], [93774, 93806], [93806, 93774], [93775, 93807], [93807, 93775], [93776, 93808], [93808, 93776], [93777, 93809], [93809, 93777], [93778, 93810], [93810, 93778], [93779, 93811], [93811, 93779], [93780, 93812], [93812, 93780], [93781, 93813], [93813, 93781], [93782, 93814], [93814, 93782], [93783, 93815], [93815, 93783], [93784, 93816], [93816, 93784], [93785, 93817], [93817, 93785], [93786, 93818], [93818, 93786], [93787, 93819], [93819, 93787], [93788, 93820], [93820, 93788], [93789, 93821], [93821, 93789], [93790, 93822], [93822, 93790], [93791, 93823], [93823, 93791], [125184, 125218], [125218, 125184], [125185, 125219], [125219, 125185], [125186, 125220], [125220, 125186], [125187, 125221], [125221, 125187], [125188, 125222], [125222, 125188], [125189, 125223], [125223, 125189], [125190, 125224], [125224, 125190], [125191, 125225], [125225, 125191], [125192, 125226], [125226, 125192], [125193, 125227], [125227, 125193], [125194, 125228], [125228, 125194], [125195, 125229], [125229, 125195], [125196, 125230], [125230, 125196], [125197, 125231], [125231, 125197], [125198, 125232], [125232, 125198], [125199, 125233], [125233, 125199], [125200, 125234], [125234, 125200], [125201, 125235], [125235, 125201], [125202, 125236], [125236, 125202], [125203, 125237], [125237, 125203], [125204, 125238], [125238, 125204], [125205, 125239], [125239, 125205], [125206, 125240], [125240, 125206], [125207, 125241], [125241, 125207], [125208, 125242], [125242, 125208], [125209, 125243], [125243, 125209], [125210, 125244], [125244, 125210], [125211, 125245], [125245, 125211], [125212, 125246], [125246, 125212], [125213, 125247], [125247, 125213], [125214, 125248], [125248, 125214], [125215, 125249], [125249, 125215], [125216, 125250], [125250, 125216], [125217, 125251], [125251, 125217]]))();\n static C = [[0, 31, 1], [127, 159, 1], [173, 888, 715], [889, 896, 7], [897, 899, 1], [907, 909, 2], [930, 1328, 398], [1367, 1368, 1], [1419, 1420, 1], [1424, 1480, 56], [1481, 1487, 1], [1515, 1518, 1], [1525, 1541, 1], [1564, 1757, 193], [1806, 1807, 1], [1867, 1868, 1], [1970, 1983, 1], [2043, 2044, 1], [2094, 2095, 1], [2111, 2140, 29], [2141, 2143, 2], [2155, 2159, 1], [2191, 2198, 1], [2274, 2436, 162], [2445, 2446, 1], [2449, 2450, 1], [2473, 2481, 8], [2483, 2485, 1], [2490, 2491, 1], [2501, 2502, 1], [2505, 2506, 1], [2511, 2518, 1], [2520, 2523, 1], [2526, 2532, 6], [2533, 2559, 26], [2560, 2564, 4], [2571, 2574, 1], [2577, 2578, 1], [2601, 2609, 8], [2612, 2618, 3], [2619, 2621, 2], [2627, 2630, 1], [2633, 2634, 1], [2638, 2640, 1], [2642, 2648, 1], [2653, 2655, 2], [2656, 2661, 1], [2679, 2688, 1], [2692, 2702, 10], [2706, 2729, 23], [2737, 2740, 3], [2746, 2747, 1], [2758, 2766, 4], [2767, 2769, 2], [2770, 2783, 1], [2788, 2789, 1], [2802, 2808, 1], [2816, 2820, 4], [2829, 2830, 1], [2833, 2834, 1], [2857, 2865, 8], [2868, 2874, 6], [2875, 2885, 10], [2886, 2889, 3], [2890, 2894, 4], [2895, 2900, 1], [2904, 2907, 1], [2910, 2916, 6], [2917, 2936, 19], [2937, 2945, 1], [2948, 2955, 7], [2956, 2957, 1], [2961, 2966, 5], [2967, 2968, 1], [2971, 2973, 2], [2976, 2978, 1], [2981, 2983, 1], [2987, 2989, 1], [3002, 3005, 1], [3011, 3013, 1], [3017, 3022, 5], [3023, 3025, 2], [3026, 3030, 1], [3032, 3045, 1], [3067, 3071, 1], [3085, 3089, 4], [3113, 3130, 17], [3131, 3141, 10], [3145, 3150, 5], [3151, 3156, 1], [3159, 3163, 4], [3164, 3166, 2], [3167, 3172, 5], [3173, 3184, 11], [3185, 3190, 1], [3213, 3217, 4], [3241, 3252, 11], [3258, 3259, 1], [3269, 3273, 4], [3278, 3284, 1], [3287, 3292, 1], [3295, 3300, 5], [3301, 3312, 11], [3316, 3327, 1], [3341, 3345, 4], [3397, 3401, 4], [3408, 3411, 1], [3428, 3429, 1], [3456, 3460, 4], [3479, 3481, 1], [3506, 3516, 10], [3518, 3519, 1], [3527, 3529, 1], [3531, 3534, 1], [3541, 3543, 2], [3552, 3557, 1], [3568, 3569, 1], [3573, 3584, 1], [3643, 3646, 1], [3676, 3712, 1], [3715, 3717, 2], [3723, 3748, 25], [3750, 3774, 24], [3775, 3781, 6], [3783, 3791, 8], [3802, 3803, 1], [3808, 3839, 1], [3912, 3949, 37], [3950, 3952, 1], [3992, 4029, 37], [4045, 4059, 14], [4060, 4095, 1], [4294, 4296, 2], [4297, 4300, 1], [4302, 4303, 1], [4681, 4686, 5], [4687, 4695, 8], [4697, 4702, 5], [4703, 4745, 42], [4750, 4751, 1], [4785, 4790, 5], [4791, 4799, 8], [4801, 4806, 5], [4807, 4823, 16], [4881, 4886, 5], [4887, 4955, 68], [4956, 4989, 33], [4990, 4991, 1], [5018, 5023, 1], [5110, 5111, 1], [5118, 5119, 1], [5789, 5791, 1], [5881, 5887, 1], [5910, 5918, 1], [5943, 5951, 1], [5972, 5983, 1], [5997, 6001, 4], [6004, 6015, 1], [6110, 6111, 1], [6122, 6127, 1], [6138, 6143, 1], [6158, 6170, 12], [6171, 6175, 1], [6265, 6271, 1], [6315, 6319, 1], [6390, 6399, 1], [6431, 6444, 13], [6445, 6447, 1], [6460, 6463, 1], [6465, 6467, 1], [6510, 6511, 1], [6517, 6527, 1], [6572, 6575, 1], [6602, 6607, 1], [6619, 6621, 1], [6684, 6685, 1], [6751, 6781, 30], [6782, 6794, 12], [6795, 6799, 1], [6810, 6815, 1], [6830, 6831, 1], [6863, 6911, 1], [6989, 7156, 167], [7157, 7163, 1], [7224, 7226, 1], [7242, 7244, 1], [7307, 7311, 1], [7355, 7356, 1], [7368, 7375, 1], [7419, 7423, 1], [7958, 7959, 1], [7966, 7967, 1], [8006, 8007, 1], [8014, 8015, 1], [8024, 8030, 2], [8062, 8063, 1], [8117, 8133, 16], [8148, 8149, 1], [8156, 8176, 20], [8177, 8181, 4], [8191, 8203, 12], [8204, 8207, 1], [8234, 8238, 1], [8288, 8303, 1], [8306, 8307, 1], [8335, 8349, 14], [8350, 8351, 1], [8385, 8399, 1], [8433, 8447, 1], [8588, 8591, 1], [9258, 9279, 1], [9291, 9311, 1], [11124, 11125, 1], [11158, 11508, 350], [11509, 11512, 1], [11558, 11560, 2], [11561, 11564, 1], [11566, 11567, 1], [11624, 11630, 1], [11633, 11646, 1], [11671, 11679, 1], [11687, 11743, 8], [11870, 11903, 1], [11930, 12020, 90], [12021, 12031, 1], [12246, 12271, 1], [12352, 12439, 87], [12440, 12544, 104], [12545, 12548, 1], [12592, 12687, 95], [12774, 12782, 1], [12831, 42125, 29294], [42126, 42127, 1], [42183, 42191, 1], [42540, 42559, 1], [42744, 42751, 1], [42958, 42959, 1], [42962, 42964, 2], [42973, 42993, 1], [43053, 43055, 1], [43066, 43071, 1], [43128, 43135, 1], [43206, 43213, 1], [43226, 43231, 1], [43348, 43358, 1], [43389, 43391, 1], [43470, 43482, 12], [43483, 43485, 1], [43519, 43575, 56], [43576, 43583, 1], [43598, 43599, 1], [43610, 43611, 1], [43715, 43738, 1], [43767, 43776, 1], [43783, 43784, 1], [43791, 43792, 1], [43799, 43807, 1], [43815, 43823, 8], [43884, 43887, 1], [44014, 44015, 1], [44026, 44031, 1], [55204, 55215, 1], [55239, 55242, 1], [55292, 63743, 1], [64110, 64111, 1], [64218, 64255, 1], [64263, 64274, 1], [64280, 64284, 1], [64311, 64317, 6], [64319, 64325, 3], [64451, 64466, 1], [64912, 64913, 1], [64968, 64974, 1], [64976, 65007, 1], [65050, 65055, 1], [65107, 65127, 20], [65132, 65135, 1], [65141, 65277, 136], [65278, 65280, 1], [65471, 65473, 1], [65480, 65481, 1], [65488, 65489, 1], [65496, 65497, 1], [65501, 65503, 1], [65511, 65519, 8], [65520, 65531, 1], [65534, 65535, 1], [65548, 65575, 27], [65595, 65598, 3], [65614, 65615, 1], [65630, 65663, 1], [65787, 65791, 1], [65795, 65798, 1], [65844, 65846, 1], [65935, 65949, 14], [65950, 65951, 1], [65953, 65999, 1], [66046, 66175, 1], [66205, 66207, 1], [66257, 66271, 1], [66300, 66303, 1], [66340, 66348, 1], [66379, 66383, 1], [66427, 66431, 1], [66462, 66500, 38], [66501, 66503, 1], [66518, 66559, 1], [66718, 66719, 1], [66730, 66735, 1], [66772, 66775, 1], [66812, 66815, 1], [66856, 66863, 1], [66916, 66926, 1], [66939, 66955, 16], [66963, 66966, 3], [66978, 66994, 16], [67002, 67005, 3], [67006, 67007, 1], [67060, 67071, 1], [67383, 67391, 1], [67414, 67423, 1], [67432, 67455, 1], [67462, 67505, 43], [67515, 67583, 1], [67590, 67591, 1], [67593, 67638, 45], [67641, 67643, 1], [67645, 67646, 1], [67670, 67743, 73], [67744, 67750, 1], [67760, 67807, 1], [67827, 67830, 3], [67831, 67834, 1], [67868, 67870, 1], [67898, 67902, 1], [67904, 67967, 1], [68024, 68027, 1], [68048, 68049, 1], [68100, 68103, 3], [68104, 68107, 1], [68116, 68120, 4], [68150, 68151, 1], [68155, 68158, 1], [68169, 68175, 1], [68185, 68191, 1], [68256, 68287, 1], [68327, 68330, 1], [68343, 68351, 1], [68406, 68408, 1], [68438, 68439, 1], [68467, 68471, 1], [68498, 68504, 1], [68509, 68520, 1], [68528, 68607, 1], [68681, 68735, 1], [68787, 68799, 1], [68851, 68857, 1], [68904, 68911, 1], [68922, 68927, 1], [68966, 68968, 1], [68998, 69005, 1], [69008, 69215, 1], [69247, 69290, 43], [69294, 69295, 1], [69298, 69313, 1], [69317, 69371, 1], [69416, 69423, 1], [69466, 69487, 1], [69514, 69551, 1], [69580, 69599, 1], [69623, 69631, 1], [69710, 69713, 1], [69750, 69758, 1], [69821, 69827, 6], [69828, 69839, 1], [69865, 69871, 1], [69882, 69887, 1], [69941, 69960, 19], [69961, 69967, 1], [70007, 70015, 1], [70112, 70133, 21], [70134, 70143, 1], [70162, 70210, 48], [70211, 70271, 1], [70279, 70281, 2], [70286, 70302, 16], [70314, 70319, 1], [70379, 70383, 1], [70394, 70399, 1], [70404, 70413, 9], [70414, 70417, 3], [70418, 70441, 23], [70449, 70452, 3], [70458, 70469, 11], [70470, 70473, 3], [70474, 70478, 4], [70479, 70481, 2], [70482, 70486, 1], [70488, 70492, 1], [70500, 70501, 1], [70509, 70511, 1], [70517, 70527, 1], [70538, 70540, 2], [70541, 70543, 2], [70582, 70593, 11], [70595, 70596, 1], [70598, 70603, 5], [70614, 70617, 3], [70618, 70624, 1], [70627, 70655, 1], [70748, 70754, 6], [70755, 70783, 1], [70856, 70863, 1], [70874, 71039, 1], [71094, 71095, 1], [71134, 71167, 1], [71237, 71247, 1], [71258, 71263, 1], [71277, 71295, 1], [71354, 71359, 1], [71370, 71375, 1], [71396, 71423, 1], [71451, 71452, 1], [71468, 71471, 1], [71495, 71679, 1], [71740, 71839, 1], [71923, 71934, 1], [71943, 71944, 1], [71946, 71947, 1], [71956, 71959, 3], [71990, 71993, 3], [71994, 72007, 13], [72008, 72015, 1], [72026, 72095, 1], [72104, 72105, 1], [72152, 72153, 1], [72165, 72191, 1], [72264, 72271, 1], [72355, 72367, 1], [72441, 72447, 1], [72458, 72639, 1], [72674, 72687, 1], [72698, 72703, 1], [72713, 72759, 46], [72774, 72783, 1], [72813, 72815, 1], [72848, 72849, 1], [72872, 72887, 15], [72888, 72959, 1], [72967, 72970, 3], [73015, 73017, 1], [73019, 73022, 3], [73032, 73039, 1], [73050, 73055, 1], [73062, 73065, 3], [73103, 73106, 3], [73113, 73119, 1], [73130, 73439, 1], [73465, 73471, 1], [73489, 73531, 42], [73532, 73533, 1], [73563, 73647, 1], [73649, 73663, 1], [73714, 73726, 1], [74650, 74751, 1], [74863, 74869, 6], [74870, 74879, 1], [75076, 77711, 1], [77811, 77823, 1], [78896, 78911, 1], [78934, 78943, 1], [82939, 82943, 1], [83527, 90367, 1], [90426, 92159, 1], [92729, 92735, 1], [92767, 92778, 11], [92779, 92781, 1], [92863, 92874, 11], [92875, 92879, 1], [92910, 92911, 1], [92918, 92927, 1], [92998, 93007, 1], [93018, 93026, 8], [93048, 93052, 1], [93072, 93503, 1], [93562, 93759, 1], [93851, 93951, 1], [94027, 94030, 1], [94088, 94094, 1], [94112, 94175, 1], [94181, 94191, 1], [94194, 94207, 1], [100344, 100351, 1], [101590, 101630, 1], [101641, 110575, 1], [110580, 110588, 8], [110591, 110883, 292], [110884, 110897, 1], [110899, 110927, 1], [110931, 110932, 1], [110934, 110947, 1], [110952, 110959, 1], [111356, 113663, 1], [113771, 113775, 1], [113789, 113791, 1], [113801, 113807, 1], [113818, 113819, 1], [113824, 117759, 1], [118010, 118015, 1], [118452, 118527, 1], [118574, 118575, 1], [118599, 118607, 1], [118724, 118783, 1], [119030, 119039, 1], [119079, 119080, 1], [119155, 119162, 1], [119275, 119295, 1], [119366, 119487, 1], [119508, 119519, 1], [119540, 119551, 1], [119639, 119647, 1], [119673, 119807, 1], [119893, 119965, 72], [119968, 119969, 1], [119971, 119972, 1], [119975, 119976, 1], [119981, 119994, 13], [119996, 120004, 8], [120070, 120075, 5], [120076, 120085, 9], [120093, 120122, 29], [120127, 120133, 6], [120135, 120137, 1], [120145, 120486, 341], [120487, 120780, 293], [120781, 121484, 703], [121485, 121498, 1], [121504, 121520, 16], [121521, 122623, 1], [122655, 122660, 1], [122667, 122879, 1], [122887, 122905, 18], [122906, 122914, 8], [122917, 122923, 6], [122924, 122927, 1], [122990, 123022, 1], [123024, 123135, 1], [123181, 123183, 1], [123198, 123199, 1], [123210, 123213, 1], [123216, 123535, 1], [123567, 123583, 1], [123642, 123646, 1], [123648, 124111, 1], [124154, 124367, 1], [124411, 124414, 1], [124416, 124895, 1], [124903, 124908, 5], [124911, 124927, 16], [125125, 125126, 1], [125143, 125183, 1], [125260, 125263, 1], [125274, 125277, 1], [125280, 126064, 1], [126133, 126208, 1], [126270, 126463, 1], [126468, 126496, 28], [126499, 126501, 2], [126502, 126504, 2], [126515, 126520, 5], [126522, 126524, 2], [126525, 126529, 1], [126531, 126534, 1], [126536, 126540, 2], [126544, 126547, 3], [126549, 126550, 1], [126552, 126560, 2], [126563, 126565, 2], [126566, 126571, 5], [126579, 126589, 5], [126591, 126602, 11], [126620, 126624, 1], [126628, 126634, 6], [126652, 126703, 1], [126706, 126975, 1], [127020, 127023, 1], [127124, 127135, 1], [127151, 127152, 1], [127168, 127184, 16], [127222, 127231, 1], [127406, 127461, 1], [127491, 127503, 1], [127548, 127551, 1], [127561, 127567, 1], [127570, 127583, 1], [127590, 127743, 1], [128728, 128731, 1], [128749, 128751, 1], [128765, 128767, 1], [128887, 128890, 1], [128986, 128991, 1], [129004, 129007, 1], [129009, 129023, 1], [129036, 129039, 1], [129096, 129103, 1], [129114, 129119, 1], [129160, 129167, 1], [129198, 129199, 1], [129212, 129215, 1], [129218, 129279, 1], [129620, 129631, 1], [129646, 129647, 1], [129661, 129663, 1], [129674, 129678, 1], [129735, 129741, 1], [129757, 129758, 1], [129770, 129775, 1], [129785, 129791, 1], [129939, 130042, 103], [130043, 131071, 1], [173792, 173823, 1], [177978, 177983, 1], [178206, 178207, 1], [183970, 183983, 1], [191457, 191471, 1], [192094, 194559, 1], [195102, 196607, 1], [201547, 201551, 1], [205744, 917759, 1], [918000, 1114111, 1]];\n static Cc = [[0, 31, 1], [127, 159, 1]];\n static Cf = [[173, 1536, 1363], [1537, 1541, 1], [1564, 1757, 193], [1807, 2192, 385], [2193, 2274, 81], [6158, 8203, 2045], [8204, 8207, 1], [8234, 8238, 1], [8288, 8292, 1], [8294, 8303, 1], [65279, 65529, 250], [65530, 65531, 1], [69821, 69837, 16], [78896, 78911, 1], [113824, 113827, 1], [119155, 119162, 1], [917505, 917536, 31], [917537, 917631, 1]];\n static Co = [[57344, 63743, 1], [983040, 1048573, 1], [1048576, 1114109, 1]];\n static Cs = [[55296, 57343, 1]];\n static L = [[65, 90, 1], [97, 122, 1], [170, 181, 11], [186, 192, 6], [193, 214, 1], [216, 246, 1], [248, 705, 1], [710, 721, 1], [736, 740, 1], [748, 750, 2], [880, 884, 1], [886, 887, 1], [890, 893, 1], [895, 902, 7], [904, 906, 1], [908, 910, 2], [911, 929, 1], [931, 1013, 1], [1015, 1153, 1], [1162, 1327, 1], [1329, 1366, 1], [1369, 1376, 7], [1377, 1416, 1], [1488, 1514, 1], [1519, 1522, 1], [1568, 1610, 1], [1646, 1647, 1], [1649, 1747, 1], [1749, 1765, 16], [1766, 1774, 8], [1775, 1786, 11], [1787, 1788, 1], [1791, 1808, 17], [1810, 1839, 1], [1869, 1957, 1], [1969, 1994, 25], [1995, 2026, 1], [2036, 2037, 1], [2042, 2048, 6], [2049, 2069, 1], [2074, 2084, 10], [2088, 2112, 24], [2113, 2136, 1], [2144, 2154, 1], [2160, 2183, 1], [2185, 2190, 1], [2208, 2249, 1], [2308, 2361, 1], [2365, 2384, 19], [2392, 2401, 1], [2417, 2432, 1], [2437, 2444, 1], [2447, 2448, 1], [2451, 2472, 1], [2474, 2480, 1], [2482, 2486, 4], [2487, 2489, 1], [2493, 2510, 17], [2524, 2525, 1], [2527, 2529, 1], [2544, 2545, 1], [2556, 2565, 9], [2566, 2570, 1], [2575, 2576, 1], [2579, 2600, 1], [2602, 2608, 1], [2610, 2611, 1], [2613, 2614, 1], [2616, 2617, 1], [2649, 2652, 1], [2654, 2674, 20], [2675, 2676, 1], [2693, 2701, 1], [2703, 2705, 1], [2707, 2728, 1], [2730, 2736, 1], [2738, 2739, 1], [2741, 2745, 1], [2749, 2768, 19], [2784, 2785, 1], [2809, 2821, 12], [2822, 2828, 1], [2831, 2832, 1], [2835, 2856, 1], [2858, 2864, 1], [2866, 2867, 1], [2869, 2873, 1], [2877, 2908, 31], [2909, 2911, 2], [2912, 2913, 1], [2929, 2947, 18], [2949, 2954, 1], [2958, 2960, 1], [2962, 2965, 1], [2969, 2970, 1], [2972, 2974, 2], [2975, 2979, 4], [2980, 2984, 4], [2985, 2986, 1], [2990, 3001, 1], [3024, 3077, 53], [3078, 3084, 1], [3086, 3088, 1], [3090, 3112, 1], [3114, 3129, 1], [3133, 3160, 27], [3161, 3162, 1], [3165, 3168, 3], [3169, 3200, 31], [3205, 3212, 1], [3214, 3216, 1], [3218, 3240, 1], [3242, 3251, 1], [3253, 3257, 1], [3261, 3293, 32], [3294, 3296, 2], [3297, 3313, 16], [3314, 3332, 18], [3333, 3340, 1], [3342, 3344, 1], [3346, 3386, 1], [3389, 3406, 17], [3412, 3414, 1], [3423, 3425, 1], [3450, 3455, 1], [3461, 3478, 1], [3482, 3505, 1], [3507, 3515, 1], [3517, 3520, 3], [3521, 3526, 1], [3585, 3632, 1], [3634, 3635, 1], [3648, 3654, 1], [3713, 3714, 1], [3716, 3718, 2], [3719, 3722, 1], [3724, 3747, 1], [3749, 3751, 2], [3752, 3760, 1], [3762, 3763, 1], [3773, 3776, 3], [3777, 3780, 1], [3782, 3804, 22], [3805, 3807, 1], [3840, 3904, 64], [3905, 3911, 1], [3913, 3948, 1], [3976, 3980, 1], [4096, 4138, 1], [4159, 4176, 17], [4177, 4181, 1], [4186, 4189, 1], [4193, 4197, 4], [4198, 4206, 8], [4207, 4208, 1], [4213, 4225, 1], [4238, 4256, 18], [4257, 4293, 1], [4295, 4301, 6], [4304, 4346, 1], [4348, 4680, 1], [4682, 4685, 1], [4688, 4694, 1], [4696, 4698, 2], [4699, 4701, 1], [4704, 4744, 1], [4746, 4749, 1], [4752, 4784, 1], [4786, 4789, 1], [4792, 4798, 1], [4800, 4802, 2], [4803, 4805, 1], [4808, 4822, 1], [4824, 4880, 1], [4882, 4885, 1], [4888, 4954, 1], [4992, 5007, 1], [5024, 5109, 1], [5112, 5117, 1], [5121, 5740, 1], [5743, 5759, 1], [5761, 5786, 1], [5792, 5866, 1], [5873, 5880, 1], [5888, 5905, 1], [5919, 5937, 1], [5952, 5969, 1], [5984, 5996, 1], [5998, 6000, 1], [6016, 6067, 1], [6103, 6108, 5], [6176, 6264, 1], [6272, 6276, 1], [6279, 6312, 1], [6314, 6320, 6], [6321, 6389, 1], [6400, 6430, 1], [6480, 6509, 1], [6512, 6516, 1], [6528, 6571, 1], [6576, 6601, 1], [6656, 6678, 1], [6688, 6740, 1], [6823, 6917, 94], [6918, 6963, 1], [6981, 6988, 1], [7043, 7072, 1], [7086, 7087, 1], [7098, 7141, 1], [7168, 7203, 1], [7245, 7247, 1], [7258, 7293, 1], [7296, 7306, 1], [7312, 7354, 1], [7357, 7359, 1], [7401, 7404, 1], [7406, 7411, 1], [7413, 7414, 1], [7418, 7424, 6], [7425, 7615, 1], [7680, 7957, 1], [7960, 7965, 1], [7968, 8005, 1], [8008, 8013, 1], [8016, 8023, 1], [8025, 8031, 2], [8032, 8061, 1], [8064, 8116, 1], [8118, 8124, 1], [8126, 8130, 4], [8131, 8132, 1], [8134, 8140, 1], [8144, 8147, 1], [8150, 8155, 1], [8160, 8172, 1], [8178, 8180, 1], [8182, 8188, 1], [8305, 8319, 14], [8336, 8348, 1], [8450, 8455, 5], [8458, 8467, 1], [8469, 8473, 4], [8474, 8477, 1], [8484, 8490, 2], [8491, 8493, 1], [8495, 8505, 1], [8508, 8511, 1], [8517, 8521, 1], [8526, 8579, 53], [8580, 11264, 2684], [11265, 11492, 1], [11499, 11502, 1], [11506, 11507, 1], [11520, 11557, 1], [11559, 11565, 6], [11568, 11623, 1], [11631, 11648, 17], [11649, 11670, 1], [11680, 11686, 1], [11688, 11694, 1], [11696, 11702, 1], [11704, 11710, 1], [11712, 11718, 1], [11720, 11726, 1], [11728, 11734, 1], [11736, 11742, 1], [11823, 12293, 470], [12294, 12337, 43], [12338, 12341, 1], [12347, 12348, 1], [12353, 12438, 1], [12445, 12447, 1], [12449, 12538, 1], [12540, 12543, 1], [12549, 12591, 1], [12593, 12686, 1], [12704, 12735, 1], [12784, 12799, 1], [13312, 19903, 1], [19968, 42124, 1], [42192, 42237, 1], [42240, 42508, 1], [42512, 42527, 1], [42538, 42539, 1], [42560, 42606, 1], [42623, 42653, 1], [42656, 42725, 1], [42775, 42783, 1], [42786, 42888, 1], [42891, 42957, 1], [42960, 42961, 1], [42963, 42965, 2], [42966, 42972, 1], [42994, 43009, 1], [43011, 43013, 1], [43015, 43018, 1], [43020, 43042, 1], [43072, 43123, 1], [43138, 43187, 1], [43250, 43255, 1], [43259, 43261, 2], [43262, 43274, 12], [43275, 43301, 1], [43312, 43334, 1], [43360, 43388, 1], [43396, 43442, 1], [43471, 43488, 17], [43489, 43492, 1], [43494, 43503, 1], [43514, 43518, 1], [43520, 43560, 1], [43584, 43586, 1], [43588, 43595, 1], [43616, 43638, 1], [43642, 43646, 4], [43647, 43695, 1], [43697, 43701, 4], [43702, 43705, 3], [43706, 43709, 1], [43712, 43714, 2], [43739, 43741, 1], [43744, 43754, 1], [43762, 43764, 1], [43777, 43782, 1], [43785, 43790, 1], [43793, 43798, 1], [43808, 43814, 1], [43816, 43822, 1], [43824, 43866, 1], [43868, 43881, 1], [43888, 44002, 1], [44032, 55203, 1], [55216, 55238, 1], [55243, 55291, 1], [63744, 64109, 1], [64112, 64217, 1], [64256, 64262, 1], [64275, 64279, 1], [64285, 64287, 2], [64288, 64296, 1], [64298, 64310, 1], [64312, 64316, 1], [64318, 64320, 2], [64321, 64323, 2], [64324, 64326, 2], [64327, 64433, 1], [64467, 64829, 1], [64848, 64911, 1], [64914, 64967, 1], [65008, 65019, 1], [65136, 65140, 1], [65142, 65276, 1], [65313, 65338, 1], [65345, 65370, 1], [65382, 65470, 1], [65474, 65479, 1], [65482, 65487, 1], [65490, 65495, 1], [65498, 65500, 1], [65536, 65547, 1], [65549, 65574, 1], [65576, 65594, 1], [65596, 65597, 1], [65599, 65613, 1], [65616, 65629, 1], [65664, 65786, 1], [66176, 66204, 1], [66208, 66256, 1], [66304, 66335, 1], [66349, 66368, 1], [66370, 66377, 1], [66384, 66421, 1], [66432, 66461, 1], [66464, 66499, 1], [66504, 66511, 1], [66560, 66717, 1], [66736, 66771, 1], [66776, 66811, 1], [66816, 66855, 1], [66864, 66915, 1], [66928, 66938, 1], [66940, 66954, 1], [66956, 66962, 1], [66964, 66965, 1], [66967, 66977, 1], [66979, 66993, 1], [66995, 67001, 1], [67003, 67004, 1], [67008, 67059, 1], [67072, 67382, 1], [67392, 67413, 1], [67424, 67431, 1], [67456, 67461, 1], [67463, 67504, 1], [67506, 67514, 1], [67584, 67589, 1], [67592, 67594, 2], [67595, 67637, 1], [67639, 67640, 1], [67644, 67647, 3], [67648, 67669, 1], [67680, 67702, 1], [67712, 67742, 1], [67808, 67826, 1], [67828, 67829, 1], [67840, 67861, 1], [67872, 67897, 1], [67968, 68023, 1], [68030, 68031, 1], [68096, 68112, 16], [68113, 68115, 1], [68117, 68119, 1], [68121, 68149, 1], [68192, 68220, 1], [68224, 68252, 1], [68288, 68295, 1], [68297, 68324, 1], [68352, 68405, 1], [68416, 68437, 1], [68448, 68466, 1], [68480, 68497, 1], [68608, 68680, 1], [68736, 68786, 1], [68800, 68850, 1], [68864, 68899, 1], [68938, 68965, 1], [68975, 68997, 1], [69248, 69289, 1], [69296, 69297, 1], [69314, 69316, 1], [69376, 69404, 1], [69415, 69424, 9], [69425, 69445, 1], [69488, 69505, 1], [69552, 69572, 1], [69600, 69622, 1], [69635, 69687, 1], [69745, 69746, 1], [69749, 69763, 14], [69764, 69807, 1], [69840, 69864, 1], [69891, 69926, 1], [69956, 69959, 3], [69968, 70002, 1], [70006, 70019, 13], [70020, 70066, 1], [70081, 70084, 1], [70106, 70108, 2], [70144, 70161, 1], [70163, 70187, 1], [70207, 70208, 1], [70272, 70278, 1], [70280, 70282, 2], [70283, 70285, 1], [70287, 70301, 1], [70303, 70312, 1], [70320, 70366, 1], [70405, 70412, 1], [70415, 70416, 1], [70419, 70440, 1], [70442, 70448, 1], [70450, 70451, 1], [70453, 70457, 1], [70461, 70480, 19], [70493, 70497, 1], [70528, 70537, 1], [70539, 70542, 3], [70544, 70581, 1], [70583, 70609, 26], [70611, 70656, 45], [70657, 70708, 1], [70727, 70730, 1], [70751, 70753, 1], [70784, 70831, 1], [70852, 70853, 1], [70855, 71040, 185], [71041, 71086, 1], [71128, 71131, 1], [71168, 71215, 1], [71236, 71296, 60], [71297, 71338, 1], [71352, 71424, 72], [71425, 71450, 1], [71488, 71494, 1], [71680, 71723, 1], [71840, 71903, 1], [71935, 71942, 1], [71945, 71948, 3], [71949, 71955, 1], [71957, 71958, 1], [71960, 71983, 1], [71999, 72001, 2], [72096, 72103, 1], [72106, 72144, 1], [72161, 72163, 2], [72192, 72203, 11], [72204, 72242, 1], [72250, 72272, 22], [72284, 72329, 1], [72349, 72368, 19], [72369, 72440, 1], [72640, 72672, 1], [72704, 72712, 1], [72714, 72750, 1], [72768, 72818, 50], [72819, 72847, 1], [72960, 72966, 1], [72968, 72969, 1], [72971, 73008, 1], [73030, 73056, 26], [73057, 73061, 1], [73063, 73064, 1], [73066, 73097, 1], [73112, 73440, 328], [73441, 73458, 1], [73474, 73476, 2], [73477, 73488, 1], [73490, 73523, 1], [73648, 73728, 80], [73729, 74649, 1], [74880, 75075, 1], [77712, 77808, 1], [77824, 78895, 1], [78913, 78918, 1], [78944, 82938, 1], [82944, 83526, 1], [90368, 90397, 1], [92160, 92728, 1], [92736, 92766, 1], [92784, 92862, 1], [92880, 92909, 1], [92928, 92975, 1], [92992, 92995, 1], [93027, 93047, 1], [93053, 93071, 1], [93504, 93548, 1], [93760, 93823, 1], [93952, 94026, 1], [94032, 94099, 67], [94100, 94111, 1], [94176, 94177, 1], [94179, 94208, 29], [94209, 100343, 1], [100352, 101589, 1], [101631, 101640, 1], [110576, 110579, 1], [110581, 110587, 1], [110589, 110590, 1], [110592, 110882, 1], [110898, 110928, 30], [110929, 110930, 1], [110933, 110948, 15], [110949, 110951, 1], [110960, 111355, 1], [113664, 113770, 1], [113776, 113788, 1], [113792, 113800, 1], [113808, 113817, 1], [119808, 119892, 1], [119894, 119964, 1], [119966, 119967, 1], [119970, 119973, 3], [119974, 119977, 3], [119978, 119980, 1], [119982, 119993, 1], [119995, 119997, 2], [119998, 120003, 1], [120005, 120069, 1], [120071, 120074, 1], [120077, 120084, 1], [120086, 120092, 1], [120094, 120121, 1], [120123, 120126, 1], [120128, 120132, 1], [120134, 120138, 4], [120139, 120144, 1], [120146, 120485, 1], [120488, 120512, 1], [120514, 120538, 1], [120540, 120570, 1], [120572, 120596, 1], [120598, 120628, 1], [120630, 120654, 1], [120656, 120686, 1], [120688, 120712, 1], [120714, 120744, 1], [120746, 120770, 1], [120772, 120779, 1], [122624, 122654, 1], [122661, 122666, 1], [122928, 122989, 1], [123136, 123180, 1], [123191, 123197, 1], [123214, 123536, 322], [123537, 123565, 1], [123584, 123627, 1], [124112, 124139, 1], [124368, 124397, 1], [124400, 124896, 496], [124897, 124902, 1], [124904, 124907, 1], [124909, 124910, 1], [124912, 124926, 1], [124928, 125124, 1], [125184, 125251, 1], [125259, 126464, 1205], [126465, 126467, 1], [126469, 126495, 1], [126497, 126498, 1], [126500, 126503, 3], [126505, 126514, 1], [126516, 126519, 1], [126521, 126523, 2], [126530, 126535, 5], [126537, 126541, 2], [126542, 126543, 1], [126545, 126546, 1], [126548, 126551, 3], [126553, 126561, 2], [126562, 126564, 2], [126567, 126570, 1], [126572, 126578, 1], [126580, 126583, 1], [126585, 126588, 1], [126590, 126592, 2], [126593, 126601, 1], [126603, 126619, 1], [126625, 126627, 1], [126629, 126633, 1], [126635, 126651, 1], [131072, 173791, 1], [173824, 177977, 1], [177984, 178205, 1], [178208, 183969, 1], [183984, 191456, 1], [191472, 192093, 1], [194560, 195101, 1], [196608, 201546, 1], [201552, 205743, 1]];\n static foldL = [[837, 837, 1]];\n static Ll = [[97, 122, 1], [181, 223, 42], [224, 246, 1], [248, 255, 1], [257, 311, 2], [312, 328, 2], [329, 375, 2], [378, 382, 2], [383, 384, 1], [387, 389, 2], [392, 396, 4], [397, 402, 5], [405, 409, 4], [410, 411, 1], [414, 417, 3], [419, 421, 2], [424, 426, 2], [427, 429, 2], [432, 436, 4], [438, 441, 3], [442, 445, 3], [446, 447, 1], [454, 460, 3], [462, 476, 2], [477, 495, 2], [496, 499, 3], [501, 505, 4], [507, 563, 2], [564, 569, 1], [572, 575, 3], [576, 578, 2], [583, 591, 2], [592, 659, 1], [661, 687, 1], [881, 883, 2], [887, 891, 4], [892, 893, 1], [912, 940, 28], [941, 974, 1], [976, 977, 1], [981, 983, 1], [985, 1007, 2], [1008, 1011, 1], [1013, 1019, 3], [1020, 1072, 52], [1073, 1119, 1], [1121, 1153, 2], [1163, 1215, 2], [1218, 1230, 2], [1231, 1327, 2], [1376, 1416, 1], [4304, 4346, 1], [4349, 4351, 1], [5112, 5117, 1], [7296, 7304, 1], [7306, 7424, 118], [7425, 7467, 1], [7531, 7543, 1], [7545, 7578, 1], [7681, 7829, 2], [7830, 7837, 1], [7839, 7935, 2], [7936, 7943, 1], [7952, 7957, 1], [7968, 7975, 1], [7984, 7991, 1], [8000, 8005, 1], [8016, 8023, 1], [8032, 8039, 1], [8048, 8061, 1], [8064, 8071, 1], [8080, 8087, 1], [8096, 8103, 1], [8112, 8116, 1], [8118, 8119, 1], [8126, 8130, 4], [8131, 8132, 1], [8134, 8135, 1], [8144, 8147, 1], [8150, 8151, 1], [8160, 8167, 1], [8178, 8180, 1], [8182, 8183, 1], [8458, 8462, 4], [8463, 8467, 4], [8495, 8505, 5], [8508, 8509, 1], [8518, 8521, 1], [8526, 8580, 54], [11312, 11359, 1], [11361, 11365, 4], [11366, 11372, 2], [11377, 11379, 2], [11380, 11382, 2], [11383, 11387, 1], [11393, 11491, 2], [11492, 11500, 8], [11502, 11507, 5], [11520, 11557, 1], [11559, 11565, 6], [42561, 42605, 2], [42625, 42651, 2], [42787, 42799, 2], [42800, 42801, 1], [42803, 42865, 2], [42866, 42872, 1], [42874, 42876, 2], [42879, 42887, 2], [42892, 42894, 2], [42897, 42899, 2], [42900, 42901, 1], [42903, 42921, 2], [42927, 42933, 6], [42935, 42947, 2], [42952, 42954, 2], [42957, 42961, 4], [42963, 42971, 2], [42998, 43002, 4], [43824, 43866, 1], [43872, 43880, 1], [43888, 43967, 1], [64256, 64262, 1], [64275, 64279, 1], [65345, 65370, 1], [66600, 66639, 1], [66776, 66811, 1], [66967, 66977, 1], [66979, 66993, 1], [66995, 67001, 1], [67003, 67004, 1], [68800, 68850, 1], [68976, 68997, 1], [71872, 71903, 1], [93792, 93823, 1], [119834, 119859, 1], [119886, 119892, 1], [119894, 119911, 1], [119938, 119963, 1], [119990, 119993, 1], [119995, 119997, 2], [119998, 120003, 1], [120005, 120015, 1], [120042, 120067, 1], [120094, 120119, 1], [120146, 120171, 1], [120198, 120223, 1], [120250, 120275, 1], [120302, 120327, 1], [120354, 120379, 1], [120406, 120431, 1], [120458, 120485, 1], [120514, 120538, 1], [120540, 120545, 1], [120572, 120596, 1], [120598, 120603, 1], [120630, 120654, 1], [120656, 120661, 1], [120688, 120712, 1], [120714, 120719, 1], [120746, 120770, 1], [120772, 120777, 1], [120779, 122624, 1845], [122625, 122633, 1], [122635, 122654, 1], [122661, 122666, 1], [125218, 125251, 1]];\n static foldLl = [[65, 90, 1], [192, 214, 1], [216, 222, 1], [256, 302, 2], [306, 310, 2], [313, 327, 2], [330, 376, 2], [377, 381, 2], [385, 386, 1], [388, 390, 2], [391, 393, 2], [394, 395, 1], [398, 401, 1], [403, 404, 1], [406, 408, 1], [412, 413, 1], [415, 416, 1], [418, 422, 2], [423, 425, 2], [428, 430, 2], [431, 433, 2], [434, 435, 1], [437, 439, 2], [440, 444, 4], [452, 453, 1], [455, 456, 1], [458, 459, 1], [461, 475, 2], [478, 494, 2], [497, 498, 1], [500, 502, 2], [503, 504, 1], [506, 562, 2], [570, 571, 1], [573, 574, 1], [577, 579, 2], [580, 582, 1], [584, 590, 2], [837, 880, 43], [882, 886, 4], [895, 902, 7], [904, 906, 1], [908, 910, 2], [911, 913, 2], [914, 929, 1], [931, 939, 1], [975, 984, 9], [986, 1006, 2], [1012, 1015, 3], [1017, 1018, 1], [1021, 1071, 1], [1120, 1152, 2], [1162, 1216, 2], [1217, 1229, 2], [1232, 1326, 2], [1329, 1366, 1], [4256, 4293, 1], [4295, 4301, 6], [5024, 5109, 1], [7305, 7312, 7], [7313, 7354, 1], [7357, 7359, 1], [7680, 7828, 2], [7838, 7934, 2], [7944, 7951, 1], [7960, 7965, 1], [7976, 7983, 1], [7992, 7999, 1], [8008, 8013, 1], [8025, 8031, 2], [8040, 8047, 1], [8072, 8079, 1], [8088, 8095, 1], [8104, 8111, 1], [8120, 8124, 1], [8136, 8140, 1], [8152, 8155, 1], [8168, 8172, 1], [8184, 8188, 1], [8486, 8490, 4], [8491, 8498, 7], [8579, 11264, 2685], [11265, 11311, 1], [11360, 11362, 2], [11363, 11364, 1], [11367, 11373, 2], [11374, 11376, 1], [11378, 11381, 3], [11390, 11392, 1], [11394, 11490, 2], [11499, 11501, 2], [11506, 42560, 31054], [42562, 42604, 2], [42624, 42650, 2], [42786, 42798, 2], [42802, 42862, 2], [42873, 42877, 2], [42878, 42886, 2], [42891, 42893, 2], [42896, 42898, 2], [42902, 42922, 2], [42923, 42926, 1], [42928, 42932, 1], [42934, 42948, 2], [42949, 42951, 1], [42953, 42955, 2], [42956, 42960, 4], [42966, 42972, 2], [42997, 65313, 22316], [65314, 65338, 1], [66560, 66599, 1], [66736, 66771, 1], [66928, 66938, 1], [66940, 66954, 1], [66956, 66962, 1], [66964, 66965, 1], [68736, 68786, 1], [68944, 68965, 1], [71840, 71871, 1], [93760, 93791, 1], [125184, 125217, 1]];\n static Lm = [[688, 705, 1], [710, 721, 1], [736, 740, 1], [748, 750, 2], [884, 890, 6], [1369, 1600, 231], [1765, 1766, 1], [2036, 2037, 1], [2042, 2074, 32], [2084, 2088, 4], [2249, 2417, 168], [3654, 3782, 128], [4348, 6103, 1755], [6211, 6823, 612], [7288, 7293, 1], [7468, 7530, 1], [7544, 7579, 35], [7580, 7615, 1], [8305, 8319, 14], [8336, 8348, 1], [11388, 11389, 1], [11631, 11823, 192], [12293, 12337, 44], [12338, 12341, 1], [12347, 12445, 98], [12446, 12540, 94], [12541, 12542, 1], [40981, 42232, 1251], [42233, 42237, 1], [42508, 42623, 115], [42652, 42653, 1], [42775, 42783, 1], [42864, 42888, 24], [42994, 42996, 1], [43000, 43001, 1], [43471, 43494, 23], [43632, 43741, 109], [43763, 43764, 1], [43868, 43871, 1], [43881, 65392, 21511], [65438, 65439, 1], [67456, 67461, 1], [67463, 67504, 1], [67506, 67514, 1], [68942, 68975, 33], [92992, 92995, 1], [93504, 93506, 1], [93547, 93548, 1], [94099, 94111, 1], [94176, 94177, 1], [94179, 110576, 16397], [110577, 110579, 1], [110581, 110587, 1], [110589, 110590, 1], [122928, 122989, 1], [123191, 123197, 1], [124139, 125259, 1120]];\n static Lo = [[170, 186, 16], [443, 448, 5], [449, 451, 1], [660, 1488, 828], [1489, 1514, 1], [1519, 1522, 1], [1568, 1599, 1], [1601, 1610, 1], [1646, 1647, 1], [1649, 1747, 1], [1749, 1774, 25], [1775, 1786, 11], [1787, 1788, 1], [1791, 1808, 17], [1810, 1839, 1], [1869, 1957, 1], [1969, 1994, 25], [1995, 2026, 1], [2048, 2069, 1], [2112, 2136, 1], [2144, 2154, 1], [2160, 2183, 1], [2185, 2190, 1], [2208, 2248, 1], [2308, 2361, 1], [2365, 2384, 19], [2392, 2401, 1], [2418, 2432, 1], [2437, 2444, 1], [2447, 2448, 1], [2451, 2472, 1], [2474, 2480, 1], [2482, 2486, 4], [2487, 2489, 1], [2493, 2510, 17], [2524, 2525, 1], [2527, 2529, 1], [2544, 2545, 1], [2556, 2565, 9], [2566, 2570, 1], [2575, 2576, 1], [2579, 2600, 1], [2602, 2608, 1], [2610, 2611, 1], [2613, 2614, 1], [2616, 2617, 1], [2649, 2652, 1], [2654, 2674, 20], [2675, 2676, 1], [2693, 2701, 1], [2703, 2705, 1], [2707, 2728, 1], [2730, 2736, 1], [2738, 2739, 1], [2741, 2745, 1], [2749, 2768, 19], [2784, 2785, 1], [2809, 2821, 12], [2822, 2828, 1], [2831, 2832, 1], [2835, 2856, 1], [2858, 2864, 1], [2866, 2867, 1], [2869, 2873, 1], [2877, 2908, 31], [2909, 2911, 2], [2912, 2913, 1], [2929, 2947, 18], [2949, 2954, 1], [2958, 2960, 1], [2962, 2965, 1], [2969, 2970, 1], [2972, 2974, 2], [2975, 2979, 4], [2980, 2984, 4], [2985, 2986, 1], [2990, 3001, 1], [3024, 3077, 53], [3078, 3084, 1], [3086, 3088, 1], [3090, 3112, 1], [3114, 3129, 1], [3133, 3160, 27], [3161, 3162, 1], [3165, 3168, 3], [3169, 3200, 31], [3205, 3212, 1], [3214, 3216, 1], [3218, 3240, 1], [3242, 3251, 1], [3253, 3257, 1], [3261, 3293, 32], [3294, 3296, 2], [3297, 3313, 16], [3314, 3332, 18], [3333, 3340, 1], [3342, 3344, 1], [3346, 3386, 1], [3389, 3406, 17], [3412, 3414, 1], [3423, 3425, 1], [3450, 3455, 1], [3461, 3478, 1], [3482, 3505, 1], [3507, 3515, 1], [3517, 3520, 3], [3521, 3526, 1], [3585, 3632, 1], [3634, 3635, 1], [3648, 3653, 1], [3713, 3714, 1], [3716, 3718, 2], [3719, 3722, 1], [3724, 3747, 1], [3749, 3751, 2], [3752, 3760, 1], [3762, 3763, 1], [3773, 3776, 3], [3777, 3780, 1], [3804, 3807, 1], [3840, 3904, 64], [3905, 3911, 1], [3913, 3948, 1], [3976, 3980, 1], [4096, 4138, 1], [4159, 4176, 17], [4177, 4181, 1], [4186, 4189, 1], [4193, 4197, 4], [4198, 4206, 8], [4207, 4208, 1], [4213, 4225, 1], [4238, 4352, 114], [4353, 4680, 1], [4682, 4685, 1], [4688, 4694, 1], [4696, 4698, 2], [4699, 4701, 1], [4704, 4744, 1], [4746, 4749, 1], [4752, 4784, 1], [4786, 4789, 1], [4792, 4798, 1], [4800, 4802, 2], [4803, 4805, 1], [4808, 4822, 1], [4824, 4880, 1], [4882, 4885, 1], [4888, 4954, 1], [4992, 5007, 1], [5121, 5740, 1], [5743, 5759, 1], [5761, 5786, 1], [5792, 5866, 1], [5873, 5880, 1], [5888, 5905, 1], [5919, 5937, 1], [5952, 5969, 1], [5984, 5996, 1], [5998, 6000, 1], [6016, 6067, 1], [6108, 6176, 68], [6177, 6210, 1], [6212, 6264, 1], [6272, 6276, 1], [6279, 6312, 1], [6314, 6320, 6], [6321, 6389, 1], [6400, 6430, 1], [6480, 6509, 1], [6512, 6516, 1], [6528, 6571, 1], [6576, 6601, 1], [6656, 6678, 1], [6688, 6740, 1], [6917, 6963, 1], [6981, 6988, 1], [7043, 7072, 1], [7086, 7087, 1], [7098, 7141, 1], [7168, 7203, 1], [7245, 7247, 1], [7258, 7287, 1], [7401, 7404, 1], [7406, 7411, 1], [7413, 7414, 1], [7418, 8501, 1083], [8502, 8504, 1], [11568, 11623, 1], [11648, 11670, 1], [11680, 11686, 1], [11688, 11694, 1], [11696, 11702, 1], [11704, 11710, 1], [11712, 11718, 1], [11720, 11726, 1], [11728, 11734, 1], [11736, 11742, 1], [12294, 12348, 54], [12353, 12438, 1], [12447, 12449, 2], [12450, 12538, 1], [12543, 12549, 6], [12550, 12591, 1], [12593, 12686, 1], [12704, 12735, 1], [12784, 12799, 1], [13312, 19903, 1], [19968, 40980, 1], [40982, 42124, 1], [42192, 42231, 1], [42240, 42507, 1], [42512, 42527, 1], [42538, 42539, 1], [42606, 42656, 50], [42657, 42725, 1], [42895, 42999, 104], [43003, 43009, 1], [43011, 43013, 1], [43015, 43018, 1], [43020, 43042, 1], [43072, 43123, 1], [43138, 43187, 1], [43250, 43255, 1], [43259, 43261, 2], [43262, 43274, 12], [43275, 43301, 1], [43312, 43334, 1], [43360, 43388, 1], [43396, 43442, 1], [43488, 43492, 1], [43495, 43503, 1], [43514, 43518, 1], [43520, 43560, 1], [43584, 43586, 1], [43588, 43595, 1], [43616, 43631, 1], [43633, 43638, 1], [43642, 43646, 4], [43647, 43695, 1], [43697, 43701, 4], [43702, 43705, 3], [43706, 43709, 1], [43712, 43714, 2], [43739, 43740, 1], [43744, 43754, 1], [43762, 43777, 15], [43778, 43782, 1], [43785, 43790, 1], [43793, 43798, 1], [43808, 43814, 1], [43816, 43822, 1], [43968, 44002, 1], [44032, 55203, 1], [55216, 55238, 1], [55243, 55291, 1], [63744, 64109, 1], [64112, 64217, 1], [64285, 64287, 2], [64288, 64296, 1], [64298, 64310, 1], [64312, 64316, 1], [64318, 64320, 2], [64321, 64323, 2], [64324, 64326, 2], [64327, 64433, 1], [64467, 64829, 1], [64848, 64911, 1], [64914, 64967, 1], [65008, 65019, 1], [65136, 65140, 1], [65142, 65276, 1], [65382, 65391, 1], [65393, 65437, 1], [65440, 65470, 1], [65474, 65479, 1], [65482, 65487, 1], [65490, 65495, 1], [65498, 65500, 1], [65536, 65547, 1], [65549, 65574, 1], [65576, 65594, 1], [65596, 65597, 1], [65599, 65613, 1], [65616, 65629, 1], [65664, 65786, 1], [66176, 66204, 1], [66208, 66256, 1], [66304, 66335, 1], [66349, 66368, 1], [66370, 66377, 1], [66384, 66421, 1], [66432, 66461, 1], [66464, 66499, 1], [66504, 66511, 1], [66640, 66717, 1], [66816, 66855, 1], [66864, 66915, 1], [67008, 67059, 1], [67072, 67382, 1], [67392, 67413, 1], [67424, 67431, 1], [67584, 67589, 1], [67592, 67594, 2], [67595, 67637, 1], [67639, 67640, 1], [67644, 67647, 3], [67648, 67669, 1], [67680, 67702, 1], [67712, 67742, 1], [67808, 67826, 1], [67828, 67829, 1], [67840, 67861, 1], [67872, 67897, 1], [67968, 68023, 1], [68030, 68031, 1], [68096, 68112, 16], [68113, 68115, 1], [68117, 68119, 1], [68121, 68149, 1], [68192, 68220, 1], [68224, 68252, 1], [68288, 68295, 1], [68297, 68324, 1], [68352, 68405, 1], [68416, 68437, 1], [68448, 68466, 1], [68480, 68497, 1], [68608, 68680, 1], [68864, 68899, 1], [68938, 68941, 1], [68943, 69248, 305], [69249, 69289, 1], [69296, 69297, 1], [69314, 69316, 1], [69376, 69404, 1], [69415, 69424, 9], [69425, 69445, 1], [69488, 69505, 1], [69552, 69572, 1], [69600, 69622, 1], [69635, 69687, 1], [69745, 69746, 1], [69749, 69763, 14], [69764, 69807, 1], [69840, 69864, 1], [69891, 69926, 1], [69956, 69959, 3], [69968, 70002, 1], [70006, 70019, 13], [70020, 70066, 1], [70081, 70084, 1], [70106, 70108, 2], [70144, 70161, 1], [70163, 70187, 1], [70207, 70208, 1], [70272, 70278, 1], [70280, 70282, 2], [70283, 70285, 1], [70287, 70301, 1], [70303, 70312, 1], [70320, 70366, 1], [70405, 70412, 1], [70415, 70416, 1], [70419, 70440, 1], [70442, 70448, 1], [70450, 70451, 1], [70453, 70457, 1], [70461, 70480, 19], [70493, 70497, 1], [70528, 70537, 1], [70539, 70542, 3], [70544, 70581, 1], [70583, 70609, 26], [70611, 70656, 45], [70657, 70708, 1], [70727, 70730, 1], [70751, 70753, 1], [70784, 70831, 1], [70852, 70853, 1], [70855, 71040, 185], [71041, 71086, 1], [71128, 71131, 1], [71168, 71215, 1], [71236, 71296, 60], [71297, 71338, 1], [71352, 71424, 72], [71425, 71450, 1], [71488, 71494, 1], [71680, 71723, 1], [71935, 71942, 1], [71945, 71948, 3], [71949, 71955, 1], [71957, 71958, 1], [71960, 71983, 1], [71999, 72001, 2], [72096, 72103, 1], [72106, 72144, 1], [72161, 72163, 2], [72192, 72203, 11], [72204, 72242, 1], [72250, 72272, 22], [72284, 72329, 1], [72349, 72368, 19], [72369, 72440, 1], [72640, 72672, 1], [72704, 72712, 1], [72714, 72750, 1], [72768, 72818, 50], [72819, 72847, 1], [72960, 72966, 1], [72968, 72969, 1], [72971, 73008, 1], [73030, 73056, 26], [73057, 73061, 1], [73063, 73064, 1], [73066, 73097, 1], [73112, 73440, 328], [73441, 73458, 1], [73474, 73476, 2], [73477, 73488, 1], [73490, 73523, 1], [73648, 73728, 80], [73729, 74649, 1], [74880, 75075, 1], [77712, 77808, 1], [77824, 78895, 1], [78913, 78918, 1], [78944, 82938, 1], [82944, 83526, 1], [90368, 90397, 1], [92160, 92728, 1], [92736, 92766, 1], [92784, 92862, 1], [92880, 92909, 1], [92928, 92975, 1], [93027, 93047, 1], [93053, 93071, 1], [93507, 93546, 1], [93952, 94026, 1], [94032, 94208, 176], [94209, 100343, 1], [100352, 101589, 1], [101631, 101640, 1], [110592, 110882, 1], [110898, 110928, 30], [110929, 110930, 1], [110933, 110948, 15], [110949, 110951, 1], [110960, 111355, 1], [113664, 113770, 1], [113776, 113788, 1], [113792, 113800, 1], [113808, 113817, 1], [122634, 123136, 502], [123137, 123180, 1], [123214, 123536, 322], [123537, 123565, 1], [123584, 123627, 1], [124112, 124138, 1], [124368, 124397, 1], [124400, 124896, 496], [124897, 124902, 1], [124904, 124907, 1], [124909, 124910, 1], [124912, 124926, 1], [124928, 125124, 1], [126464, 126467, 1], [126469, 126495, 1], [126497, 126498, 1], [126500, 126503, 3], [126505, 126514, 1], [126516, 126519, 1], [126521, 126523, 2], [126530, 126535, 5], [126537, 126541, 2], [126542, 126543, 1], [126545, 126546, 1], [126548, 126551, 3], [126553, 126561, 2], [126562, 126564, 2], [126567, 126570, 1], [126572, 126578, 1], [126580, 126583, 1], [126585, 126588, 1], [126590, 126592, 2], [126593, 126601, 1], [126603, 126619, 1], [126625, 126627, 1], [126629, 126633, 1], [126635, 126651, 1], [131072, 173791, 1], [173824, 177977, 1], [177984, 178205, 1], [178208, 183969, 1], [183984, 191456, 1], [191472, 192093, 1], [194560, 195101, 1], [196608, 201546, 1], [201552, 205743, 1]];\n static Lt = [[453, 459, 3], [498, 8072, 7574], [8073, 8079, 1], [8088, 8095, 1], [8104, 8111, 1], [8124, 8140, 16], [8188, 8188, 1]];\n static foldLt = [[452, 454, 2], [455, 457, 2], [458, 460, 2], [497, 499, 2], [8064, 8071, 1], [8080, 8087, 1], [8096, 8103, 1], [8115, 8131, 16], [8179, 8179, 1]];\n static Lu = [[65, 90, 1], [192, 214, 1], [216, 222, 1], [256, 310, 2], [313, 327, 2], [330, 376, 2], [377, 381, 2], [385, 386, 1], [388, 390, 2], [391, 393, 2], [394, 395, 1], [398, 401, 1], [403, 404, 1], [406, 408, 1], [412, 413, 1], [415, 416, 1], [418, 422, 2], [423, 425, 2], [428, 430, 2], [431, 433, 2], [434, 435, 1], [437, 439, 2], [440, 444, 4], [452, 461, 3], [463, 475, 2], [478, 494, 2], [497, 500, 3], [502, 504, 1], [506, 562, 2], [570, 571, 1], [573, 574, 1], [577, 579, 2], [580, 582, 1], [584, 590, 2], [880, 882, 2], [886, 895, 9], [902, 904, 2], [905, 906, 1], [908, 910, 2], [911, 913, 2], [914, 929, 1], [931, 939, 1], [975, 978, 3], [979, 980, 1], [984, 1006, 2], [1012, 1015, 3], [1017, 1018, 1], [1021, 1071, 1], [1120, 1152, 2], [1162, 1216, 2], [1217, 1229, 2], [1232, 1326, 2], [1329, 1366, 1], [4256, 4293, 1], [4295, 4301, 6], [5024, 5109, 1], [7305, 7312, 7], [7313, 7354, 1], [7357, 7359, 1], [7680, 7828, 2], [7838, 7934, 2], [7944, 7951, 1], [7960, 7965, 1], [7976, 7983, 1], [7992, 7999, 1], [8008, 8013, 1], [8025, 8031, 2], [8040, 8047, 1], [8120, 8123, 1], [8136, 8139, 1], [8152, 8155, 1], [8168, 8172, 1], [8184, 8187, 1], [8450, 8455, 5], [8459, 8461, 1], [8464, 8466, 1], [8469, 8473, 4], [8474, 8477, 1], [8484, 8490, 2], [8491, 8493, 1], [8496, 8499, 1], [8510, 8511, 1], [8517, 8579, 62], [11264, 11311, 1], [11360, 11362, 2], [11363, 11364, 1], [11367, 11373, 2], [11374, 11376, 1], [11378, 11381, 3], [11390, 11392, 1], [11394, 11490, 2], [11499, 11501, 2], [11506, 42560, 31054], [42562, 42604, 2], [42624, 42650, 2], [42786, 42798, 2], [42802, 42862, 2], [42873, 42877, 2], [42878, 42886, 2], [42891, 42893, 2], [42896, 42898, 2], [42902, 42922, 2], [42923, 42926, 1], [42928, 42932, 1], [42934, 42948, 2], [42949, 42951, 1], [42953, 42955, 2], [42956, 42960, 4], [42966, 42972, 2], [42997, 65313, 22316], [65314, 65338, 1], [66560, 66599, 1], [66736, 66771, 1], [66928, 66938, 1], [66940, 66954, 1], [66956, 66962, 1], [66964, 66965, 1], [68736, 68786, 1], [68944, 68965, 1], [71840, 71871, 1], [93760, 93791, 1], [119808, 119833, 1], [119860, 119885, 1], [119912, 119937, 1], [119964, 119966, 2], [119967, 119973, 3], [119974, 119977, 3], [119978, 119980, 1], [119982, 119989, 1], [120016, 120041, 1], [120068, 120069, 1], [120071, 120074, 1], [120077, 120084, 1], [120086, 120092, 1], [120120, 120121, 1], [120123, 120126, 1], [120128, 120132, 1], [120134, 120138, 4], [120139, 120144, 1], [120172, 120197, 1], [120224, 120249, 1], [120276, 120301, 1], [120328, 120353, 1], [120380, 120405, 1], [120432, 120457, 1], [120488, 120512, 1], [120546, 120570, 1], [120604, 120628, 1], [120662, 120686, 1], [120720, 120744, 1], [120778, 125184, 4406], [125185, 125217, 1]];\n static Upper = this.Lu;\n static foldLu = [[97, 122, 1], [181, 223, 42], [224, 246, 1], [248, 255, 1], [257, 303, 2], [307, 311, 2], [314, 328, 2], [331, 375, 2], [378, 382, 2], [383, 384, 1], [387, 389, 2], [392, 396, 4], [402, 405, 3], [409, 411, 1], [414, 417, 3], [419, 421, 2], [424, 429, 5], [432, 436, 4], [438, 441, 3], [445, 447, 2], [453, 454, 1], [456, 457, 1], [459, 460, 1], [462, 476, 2], [477, 495, 2], [498, 499, 1], [501, 505, 4], [507, 543, 2], [547, 563, 2], [572, 575, 3], [576, 578, 2], [583, 591, 2], [592, 596, 1], [598, 599, 1], [601, 603, 2], [604, 608, 4], [609, 611, 2], [612, 614, 1], [616, 620, 1], [623, 625, 2], [626, 629, 3], [637, 640, 3], [642, 643, 1], [647, 652, 1], [658, 669, 11], [670, 837, 167], [881, 883, 2], [887, 891, 4], [892, 893, 1], [940, 943, 1], [945, 974, 1], [976, 977, 1], [981, 983, 1], [985, 1007, 2], [1008, 1011, 1], [1013, 1019, 3], [1072, 1119, 1], [1121, 1153, 2], [1163, 1215, 2], [1218, 1230, 2], [1231, 1327, 2], [1377, 1414, 1], [4304, 4346, 1], [4349, 4351, 1], [5112, 5117, 1], [7296, 7304, 1], [7306, 7545, 239], [7549, 7566, 17], [7681, 7829, 2], [7835, 7841, 6], [7843, 7935, 2], [7936, 7943, 1], [7952, 7957, 1], [7968, 7975, 1], [7984, 7991, 1], [8000, 8005, 1], [8017, 8023, 2], [8032, 8039, 1], [8048, 8061, 1], [8112, 8113, 1], [8126, 8144, 18], [8145, 8160, 15], [8161, 8165, 4], [8526, 8580, 54], [11312, 11359, 1], [11361, 11365, 4], [11366, 11372, 2], [11379, 11382, 3], [11393, 11491, 2], [11500, 11502, 2], [11507, 11520, 13], [11521, 11557, 1], [11559, 11565, 6], [42561, 42605, 2], [42625, 42651, 2], [42787, 42799, 2], [42803, 42863, 2], [42874, 42876, 2], [42879, 42887, 2], [42892, 42897, 5], [42899, 42900, 1], [42903, 42921, 2], [42933, 42947, 2], [42952, 42954, 2], [42957, 42961, 4], [42967, 42971, 2], [42998, 43859, 861], [43888, 43967, 1], [65345, 65370, 1], [66600, 66639, 1], [66776, 66811, 1], [66967, 66977, 1], [66979, 66993, 1], [66995, 67001, 1], [67003, 67004, 1], [68800, 68850, 1], [68976, 68997, 1], [71872, 71903, 1], [93792, 93823, 1], [125218, 125251, 1]];\n static M = [[768, 879, 1], [1155, 1161, 1], [1425, 1469, 1], [1471, 1473, 2], [1474, 1476, 2], [1477, 1479, 2], [1552, 1562, 1], [1611, 1631, 1], [1648, 1750, 102], [1751, 1756, 1], [1759, 1764, 1], [1767, 1768, 1], [1770, 1773, 1], [1809, 1840, 31], [1841, 1866, 1], [1958, 1968, 1], [2027, 2035, 1], [2045, 2070, 25], [2071, 2073, 1], [2075, 2083, 1], [2085, 2087, 1], [2089, 2093, 1], [2137, 2139, 1], [2199, 2207, 1], [2250, 2273, 1], [2275, 2307, 1], [2362, 2364, 1], [2366, 2383, 1], [2385, 2391, 1], [2402, 2403, 1], [2433, 2435, 1], [2492, 2494, 2], [2495, 2500, 1], [2503, 2504, 1], [2507, 2509, 1], [2519, 2530, 11], [2531, 2558, 27], [2561, 2563, 1], [2620, 2622, 2], [2623, 2626, 1], [2631, 2632, 1], [2635, 2637, 1], [2641, 2672, 31], [2673, 2677, 4], [2689, 2691, 1], [2748, 2750, 2], [2751, 2757, 1], [2759, 2761, 1], [2763, 2765, 1], [2786, 2787, 1], [2810, 2815, 1], [2817, 2819, 1], [2876, 2878, 2], [2879, 2884, 1], [2887, 2888, 1], [2891, 2893, 1], [2901, 2903, 1], [2914, 2915, 1], [2946, 3006, 60], [3007, 3010, 1], [3014, 3016, 1], [3018, 3021, 1], [3031, 3072, 41], [3073, 3076, 1], [3132, 3134, 2], [3135, 3140, 1], [3142, 3144, 1], [3146, 3149, 1], [3157, 3158, 1], [3170, 3171, 1], [3201, 3203, 1], [3260, 3262, 2], [3263, 3268, 1], [3270, 3272, 1], [3274, 3277, 1], [3285, 3286, 1], [3298, 3299, 1], [3315, 3328, 13], [3329, 3331, 1], [3387, 3388, 1], [3390, 3396, 1], [3398, 3400, 1], [3402, 3405, 1], [3415, 3426, 11], [3427, 3457, 30], [3458, 3459, 1], [3530, 3535, 5], [3536, 3540, 1], [3542, 3544, 2], [3545, 3551, 1], [3570, 3571, 1], [3633, 3636, 3], [3637, 3642, 1], [3655, 3662, 1], [3761, 3764, 3], [3765, 3772, 1], [3784, 3790, 1], [3864, 3865, 1], [3893, 3897, 2], [3902, 3903, 1], [3953, 3972, 1], [3974, 3975, 1], [3981, 3991, 1], [3993, 4028, 1], [4038, 4139, 101], [4140, 4158, 1], [4182, 4185, 1], [4190, 4192, 1], [4194, 4196, 1], [4199, 4205, 1], [4209, 4212, 1], [4226, 4237, 1], [4239, 4250, 11], [4251, 4253, 1], [4957, 4959, 1], [5906, 5909, 1], [5938, 5940, 1], [5970, 5971, 1], [6002, 6003, 1], [6068, 6099, 1], [6109, 6155, 46], [6156, 6157, 1], [6159, 6277, 118], [6278, 6313, 35], [6432, 6443, 1], [6448, 6459, 1], [6679, 6683, 1], [6741, 6750, 1], [6752, 6780, 1], [6783, 6832, 49], [6833, 6862, 1], [6912, 6916, 1], [6964, 6980, 1], [7019, 7027, 1], [7040, 7042, 1], [7073, 7085, 1], [7142, 7155, 1], [7204, 7223, 1], [7376, 7378, 1], [7380, 7400, 1], [7405, 7412, 7], [7415, 7417, 1], [7616, 7679, 1], [8400, 8432, 1], [11503, 11505, 1], [11647, 11744, 97], [11745, 11775, 1], [12330, 12335, 1], [12441, 12442, 1], [42607, 42610, 1], [42612, 42621, 1], [42654, 42655, 1], [42736, 42737, 1], [43010, 43014, 4], [43019, 43043, 24], [43044, 43047, 1], [43052, 43136, 84], [43137, 43188, 51], [43189, 43205, 1], [43232, 43249, 1], [43263, 43302, 39], [43303, 43309, 1], [43335, 43347, 1], [43392, 43395, 1], [43443, 43456, 1], [43493, 43561, 68], [43562, 43574, 1], [43587, 43596, 9], [43597, 43643, 46], [43644, 43645, 1], [43696, 43698, 2], [43699, 43700, 1], [43703, 43704, 1], [43710, 43711, 1], [43713, 43755, 42], [43756, 43759, 1], [43765, 43766, 1], [44003, 44010, 1], [44012, 44013, 1], [64286, 65024, 738], [65025, 65039, 1], [65056, 65071, 1], [66045, 66272, 227], [66422, 66426, 1], [68097, 68099, 1], [68101, 68102, 1], [68108, 68111, 1], [68152, 68154, 1], [68159, 68325, 166], [68326, 68900, 574], [68901, 68903, 1], [68969, 68973, 1], [69291, 69292, 1], [69372, 69375, 1], [69446, 69456, 1], [69506, 69509, 1], [69632, 69634, 1], [69688, 69702, 1], [69744, 69747, 3], [69748, 69759, 11], [69760, 69762, 1], [69808, 69818, 1], [69826, 69888, 62], [69889, 69890, 1], [69927, 69940, 1], [69957, 69958, 1], [70003, 70016, 13], [70017, 70018, 1], [70067, 70080, 1], [70089, 70092, 1], [70094, 70095, 1], [70188, 70199, 1], [70206, 70209, 3], [70367, 70378, 1], [70400, 70403, 1], [70459, 70460, 1], [70462, 70468, 1], [70471, 70472, 1], [70475, 70477, 1], [70487, 70498, 11], [70499, 70502, 3], [70503, 70508, 1], [70512, 70516, 1], [70584, 70592, 1], [70594, 70597, 3], [70599, 70602, 1], [70604, 70608, 1], [70610, 70625, 15], [70626, 70709, 83], [70710, 70726, 1], [70750, 70832, 82], [70833, 70851, 1], [71087, 71093, 1], [71096, 71104, 1], [71132, 71133, 1], [71216, 71232, 1], [71339, 71351, 1], [71453, 71467, 1], [71724, 71738, 1], [71984, 71989, 1], [71991, 71992, 1], [71995, 71998, 1], [72000, 72002, 2], [72003, 72145, 142], [72146, 72151, 1], [72154, 72160, 1], [72164, 72193, 29], [72194, 72202, 1], [72243, 72249, 1], [72251, 72254, 1], [72263, 72273, 10], [72274, 72283, 1], [72330, 72345, 1], [72751, 72758, 1], [72760, 72767, 1], [72850, 72871, 1], [72873, 72886, 1], [73009, 73014, 1], [73018, 73020, 2], [73021, 73023, 2], [73024, 73029, 1], [73031, 73098, 67], [73099, 73102, 1], [73104, 73105, 1], [73107, 73111, 1], [73459, 73462, 1], [73472, 73473, 1], [73475, 73524, 49], [73525, 73530, 1], [73534, 73538, 1], [73562, 78912, 5350], [78919, 78933, 1], [90398, 90415, 1], [92912, 92916, 1], [92976, 92982, 1], [94031, 94033, 2], [94034, 94087, 1], [94095, 94098, 1], [94180, 94192, 12], [94193, 113821, 19628], [113822, 118528, 4706], [118529, 118573, 1], [118576, 118598, 1], [119141, 119145, 1], [119149, 119154, 1], [119163, 119170, 1], [119173, 119179, 1], [119210, 119213, 1], [119362, 119364, 1], [121344, 121398, 1], [121403, 121452, 1], [121461, 121476, 15], [121499, 121503, 1], [121505, 121519, 1], [122880, 122886, 1], [122888, 122904, 1], [122907, 122913, 1], [122915, 122916, 1], [122918, 122922, 1], [123023, 123184, 161], [123185, 123190, 1], [123566, 123628, 62], [123629, 123631, 1], [124140, 124143, 1], [124398, 124399, 1], [125136, 125142, 1], [125252, 125258, 1], [917760, 917999, 1]];\n static foldM = [[921, 953, 32], [8126, 8126, 1]];\n static Mc = [[2307, 2363, 56], [2366, 2368, 1], [2377, 2380, 1], [2382, 2383, 1], [2434, 2435, 1], [2494, 2496, 1], [2503, 2504, 1], [2507, 2508, 1], [2519, 2563, 44], [2622, 2624, 1], [2691, 2750, 59], [2751, 2752, 1], [2761, 2763, 2], [2764, 2818, 54], [2819, 2878, 59], [2880, 2887, 7], [2888, 2891, 3], [2892, 2903, 11], [3006, 3007, 1], [3009, 3010, 1], [3014, 3016, 1], [3018, 3020, 1], [3031, 3073, 42], [3074, 3075, 1], [3137, 3140, 1], [3202, 3203, 1], [3262, 3264, 2], [3265, 3268, 1], [3271, 3272, 1], [3274, 3275, 1], [3285, 3286, 1], [3315, 3330, 15], [3331, 3390, 59], [3391, 3392, 1], [3398, 3400, 1], [3402, 3404, 1], [3415, 3458, 43], [3459, 3535, 76], [3536, 3537, 1], [3544, 3551, 1], [3570, 3571, 1], [3902, 3903, 1], [3967, 4139, 172], [4140, 4145, 5], [4152, 4155, 3], [4156, 4182, 26], [4183, 4194, 11], [4195, 4196, 1], [4199, 4205, 1], [4227, 4228, 1], [4231, 4236, 1], [4239, 4250, 11], [4251, 4252, 1], [5909, 5940, 31], [6070, 6078, 8], [6079, 6085, 1], [6087, 6088, 1], [6435, 6438, 1], [6441, 6443, 1], [6448, 6449, 1], [6451, 6456, 1], [6681, 6682, 1], [6741, 6743, 2], [6753, 6755, 2], [6756, 6765, 9], [6766, 6770, 1], [6916, 6965, 49], [6971, 6973, 2], [6974, 6977, 1], [6979, 6980, 1], [7042, 7073, 31], [7078, 7079, 1], [7082, 7143, 61], [7146, 7148, 1], [7150, 7154, 4], [7155, 7204, 49], [7205, 7211, 1], [7220, 7221, 1], [7393, 7415, 22], [12334, 12335, 1], [43043, 43044, 1], [43047, 43136, 89], [43137, 43188, 51], [43189, 43203, 1], [43346, 43347, 1], [43395, 43444, 49], [43445, 43450, 5], [43451, 43454, 3], [43455, 43456, 1], [43567, 43568, 1], [43571, 43572, 1], [43597, 43643, 46], [43645, 43755, 110], [43758, 43759, 1], [43765, 44003, 238], [44004, 44006, 2], [44007, 44009, 2], [44010, 44012, 2], [69632, 69634, 2], [69762, 69808, 46], [69809, 69810, 1], [69815, 69816, 1], [69932, 69957, 25], [69958, 70018, 60], [70067, 70069, 1], [70079, 70080, 1], [70094, 70188, 94], [70189, 70190, 1], [70194, 70195, 1], [70197, 70368, 171], [70369, 70370, 1], [70402, 70403, 1], [70462, 70463, 1], [70465, 70468, 1], [70471, 70472, 1], [70475, 70477, 1], [70487, 70498, 11], [70499, 70584, 85], [70585, 70586, 1], [70594, 70597, 3], [70599, 70602, 1], [70604, 70605, 1], [70607, 70709, 102], [70710, 70711, 1], [70720, 70721, 1], [70725, 70832, 107], [70833, 70834, 1], [70841, 70843, 2], [70844, 70846, 1], [70849, 71087, 238], [71088, 71089, 1], [71096, 71099, 1], [71102, 71216, 114], [71217, 71218, 1], [71227, 71228, 1], [71230, 71340, 110], [71342, 71343, 1], [71350, 71454, 104], [71456, 71457, 1], [71462, 71724, 262], [71725, 71726, 1], [71736, 71984, 248], [71985, 71989, 1], [71991, 71992, 1], [71997, 72000, 3], [72002, 72145, 143], [72146, 72147, 1], [72156, 72159, 1], [72164, 72249, 85], [72279, 72280, 1], [72343, 72751, 408], [72766, 72873, 107], [72881, 72884, 3], [73098, 73102, 1], [73107, 73108, 1], [73110, 73461, 351], [73462, 73475, 13], [73524, 73525, 1], [73534, 73535, 1], [73537, 90410, 16873], [90411, 90412, 1], [94033, 94087, 1], [94192, 94193, 1], [119141, 119142, 1], [119149, 119154, 1]];\n static Me = [[1160, 1161, 1], [6846, 8413, 1567], [8414, 8416, 1], [8418, 8420, 1], [42608, 42610, 1]];\n static Mn = [[768, 879, 1], [1155, 1159, 1], [1425, 1469, 1], [1471, 1473, 2], [1474, 1476, 2], [1477, 1479, 2], [1552, 1562, 1], [1611, 1631, 1], [1648, 1750, 102], [1751, 1756, 1], [1759, 1764, 1], [1767, 1768, 1], [1770, 1773, 1], [1809, 1840, 31], [1841, 1866, 1], [1958, 1968, 1], [2027, 2035, 1], [2045, 2070, 25], [2071, 2073, 1], [2075, 2083, 1], [2085, 2087, 1], [2089, 2093, 1], [2137, 2139, 1], [2199, 2207, 1], [2250, 2273, 1], [2275, 2306, 1], [2362, 2364, 2], [2369, 2376, 1], [2381, 2385, 4], [2386, 2391, 1], [2402, 2403, 1], [2433, 2492, 59], [2497, 2500, 1], [2509, 2530, 21], [2531, 2558, 27], [2561, 2562, 1], [2620, 2625, 5], [2626, 2631, 5], [2632, 2635, 3], [2636, 2637, 1], [2641, 2672, 31], [2673, 2677, 4], [2689, 2690, 1], [2748, 2753, 5], [2754, 2757, 1], [2759, 2760, 1], [2765, 2786, 21], [2787, 2810, 23], [2811, 2815, 1], [2817, 2876, 59], [2879, 2881, 2], [2882, 2884, 1], [2893, 2901, 8], [2902, 2914, 12], [2915, 2946, 31], [3008, 3021, 13], [3072, 3076, 4], [3132, 3134, 2], [3135, 3136, 1], [3142, 3144, 1], [3146, 3149, 1], [3157, 3158, 1], [3170, 3171, 1], [3201, 3260, 59], [3263, 3270, 7], [3276, 3277, 1], [3298, 3299, 1], [3328, 3329, 1], [3387, 3388, 1], [3393, 3396, 1], [3405, 3426, 21], [3427, 3457, 30], [3530, 3538, 8], [3539, 3540, 1], [3542, 3633, 91], [3636, 3642, 1], [3655, 3662, 1], [3761, 3764, 3], [3765, 3772, 1], [3784, 3790, 1], [3864, 3865, 1], [3893, 3897, 2], [3953, 3966, 1], [3968, 3972, 1], [3974, 3975, 1], [3981, 3991, 1], [3993, 4028, 1], [4038, 4141, 103], [4142, 4144, 1], [4146, 4151, 1], [4153, 4154, 1], [4157, 4158, 1], [4184, 4185, 1], [4190, 4192, 1], [4209, 4212, 1], [4226, 4229, 3], [4230, 4237, 7], [4253, 4957, 704], [4958, 4959, 1], [5906, 5908, 1], [5938, 5939, 1], [5970, 5971, 1], [6002, 6003, 1], [6068, 6069, 1], [6071, 6077, 1], [6086, 6089, 3], [6090, 6099, 1], [6109, 6155, 46], [6156, 6157, 1], [6159, 6277, 118], [6278, 6313, 35], [6432, 6434, 1], [6439, 6440, 1], [6450, 6457, 7], [6458, 6459, 1], [6679, 6680, 1], [6683, 6742, 59], [6744, 6750, 1], [6752, 6754, 2], [6757, 6764, 1], [6771, 6780, 1], [6783, 6832, 49], [6833, 6845, 1], [6847, 6862, 1], [6912, 6915, 1], [6964, 6966, 2], [6967, 6970, 1], [6972, 6978, 6], [7019, 7027, 1], [7040, 7041, 1], [7074, 7077, 1], [7080, 7081, 1], [7083, 7085, 1], [7142, 7144, 2], [7145, 7149, 4], [7151, 7153, 1], [7212, 7219, 1], [7222, 7223, 1], [7376, 7378, 1], [7380, 7392, 1], [7394, 7400, 1], [7405, 7412, 7], [7416, 7417, 1], [7616, 7679, 1], [8400, 8412, 1], [8417, 8421, 4], [8422, 8432, 1], [11503, 11505, 1], [11647, 11744, 97], [11745, 11775, 1], [12330, 12333, 1], [12441, 12442, 1], [42607, 42612, 5], [42613, 42621, 1], [42654, 42655, 1], [42736, 42737, 1], [43010, 43014, 4], [43019, 43045, 26], [43046, 43052, 6], [43204, 43205, 1], [43232, 43249, 1], [43263, 43302, 39], [43303, 43309, 1], [43335, 43345, 1], [43392, 43394, 1], [43443, 43446, 3], [43447, 43449, 1], [43452, 43453, 1], [43493, 43561, 68], [43562, 43566, 1], [43569, 43570, 1], [43573, 43574, 1], [43587, 43596, 9], [43644, 43696, 52], [43698, 43700, 1], [43703, 43704, 1], [43710, 43711, 1], [43713, 43756, 43], [43757, 43766, 9], [44005, 44008, 3], [44013, 64286, 20273], [65024, 65039, 1], [65056, 65071, 1], [66045, 66272, 227], [66422, 66426, 1], [68097, 68099, 1], [68101, 68102, 1], [68108, 68111, 1], [68152, 68154, 1], [68159, 68325, 166], [68326, 68900, 574], [68901, 68903, 1], [68969, 68973, 1], [69291, 69292, 1], [69372, 69375, 1], [69446, 69456, 1], [69506, 69509, 1], [69633, 69688, 55], [69689, 69702, 1], [69744, 69747, 3], [69748, 69759, 11], [69760, 69761, 1], [69811, 69814, 1], [69817, 69818, 1], [69826, 69888, 62], [69889, 69890, 1], [69927, 69931, 1], [69933, 69940, 1], [70003, 70016, 13], [70017, 70070, 53], [70071, 70078, 1], [70089, 70092, 1], [70095, 70191, 96], [70192, 70193, 1], [70196, 70198, 2], [70199, 70206, 7], [70209, 70367, 158], [70371, 70378, 1], [70400, 70401, 1], [70459, 70460, 1], [70464, 70502, 38], [70503, 70508, 1], [70512, 70516, 1], [70587, 70592, 1], [70606, 70610, 2], [70625, 70626, 1], [70712, 70719, 1], [70722, 70724, 1], [70726, 70750, 24], [70835, 70840, 1], [70842, 70847, 5], [70848, 70850, 2], [70851, 71090, 239], [71091, 71093, 1], [71100, 71101, 1], [71103, 71104, 1], [71132, 71133, 1], [71219, 71226, 1], [71229, 71231, 2], [71232, 71339, 107], [71341, 71344, 3], [71345, 71349, 1], [71351, 71453, 102], [71455, 71458, 3], [71459, 71461, 1], [71463, 71467, 1], [71727, 71735, 1], [71737, 71738, 1], [71995, 71996, 1], [71998, 72003, 5], [72148, 72151, 1], [72154, 72155, 1], [72160, 72193, 33], [72194, 72202, 1], [72243, 72248, 1], [72251, 72254, 1], [72263, 72273, 10], [72274, 72278, 1], [72281, 72283, 1], [72330, 72342, 1], [72344, 72345, 1], [72752, 72758, 1], [72760, 72765, 1], [72767, 72850, 83], [72851, 72871, 1], [72874, 72880, 1], [72882, 72883, 1], [72885, 72886, 1], [73009, 73014, 1], [73018, 73020, 2], [73021, 73023, 2], [73024, 73029, 1], [73031, 73104, 73], [73105, 73109, 4], [73111, 73459, 348], [73460, 73472, 12], [73473, 73526, 53], [73527, 73530, 1], [73536, 73538, 2], [73562, 78912, 5350], [78919, 78933, 1], [90398, 90409, 1], [90413, 90415, 1], [92912, 92916, 1], [92976, 92982, 1], [94031, 94095, 64], [94096, 94098, 1], [94180, 113821, 19641], [113822, 118528, 4706], [118529, 118573, 1], [118576, 118598, 1], [119143, 119145, 1], [119163, 119170, 1], [119173, 119179, 1], [119210, 119213, 1], [119362, 119364, 1], [121344, 121398, 1], [121403, 121452, 1], [121461, 121476, 15], [121499, 121503, 1], [121505, 121519, 1], [122880, 122886, 1], [122888, 122904, 1], [122907, 122913, 1], [122915, 122916, 1], [122918, 122922, 1], [123023, 123184, 161], [123185, 123190, 1], [123566, 123628, 62], [123629, 123631, 1], [124140, 124143, 1], [124398, 124399, 1], [125136, 125142, 1], [125252, 125258, 1], [917760, 917999, 1]];\n static foldMn = [[921, 953, 32], [8126, 8126, 1]];\n static N = [[48, 57, 1], [178, 179, 1], [185, 188, 3], [189, 190, 1], [1632, 1641, 1], [1776, 1785, 1], [1984, 1993, 1], [2406, 2415, 1], [2534, 2543, 1], [2548, 2553, 1], [2662, 2671, 1], [2790, 2799, 1], [2918, 2927, 1], [2930, 2935, 1], [3046, 3058, 1], [3174, 3183, 1], [3192, 3198, 1], [3302, 3311, 1], [3416, 3422, 1], [3430, 3448, 1], [3558, 3567, 1], [3664, 3673, 1], [3792, 3801, 1], [3872, 3891, 1], [4160, 4169, 1], [4240, 4249, 1], [4969, 4988, 1], [5870, 5872, 1], [6112, 6121, 1], [6128, 6137, 1], [6160, 6169, 1], [6470, 6479, 1], [6608, 6618, 1], [6784, 6793, 1], [6800, 6809, 1], [6992, 7001, 1], [7088, 7097, 1], [7232, 7241, 1], [7248, 7257, 1], [8304, 8308, 4], [8309, 8313, 1], [8320, 8329, 1], [8528, 8578, 1], [8581, 8585, 1], [9312, 9371, 1], [9450, 9471, 1], [10102, 10131, 1], [11517, 12295, 778], [12321, 12329, 1], [12344, 12346, 1], [12690, 12693, 1], [12832, 12841, 1], [12872, 12879, 1], [12881, 12895, 1], [12928, 12937, 1], [12977, 12991, 1], [42528, 42537, 1], [42726, 42735, 1], [43056, 43061, 1], [43216, 43225, 1], [43264, 43273, 1], [43472, 43481, 1], [43504, 43513, 1], [43600, 43609, 1], [44016, 44025, 1], [65296, 65305, 1], [65799, 65843, 1], [65856, 65912, 1], [65930, 65931, 1], [66273, 66299, 1], [66336, 66339, 1], [66369, 66378, 9], [66513, 66517, 1], [66720, 66729, 1], [67672, 67679, 1], [67705, 67711, 1], [67751, 67759, 1], [67835, 67839, 1], [67862, 67867, 1], [68028, 68029, 1], [68032, 68047, 1], [68050, 68095, 1], [68160, 68168, 1], [68221, 68222, 1], [68253, 68255, 1], [68331, 68335, 1], [68440, 68447, 1], [68472, 68479, 1], [68521, 68527, 1], [68858, 68863, 1], [68912, 68921, 1], [68928, 68937, 1], [69216, 69246, 1], [69405, 69414, 1], [69457, 69460, 1], [69573, 69579, 1], [69714, 69743, 1], [69872, 69881, 1], [69942, 69951, 1], [70096, 70105, 1], [70113, 70132, 1], [70384, 70393, 1], [70736, 70745, 1], [70864, 70873, 1], [71248, 71257, 1], [71360, 71369, 1], [71376, 71395, 1], [71472, 71483, 1], [71904, 71922, 1], [72016, 72025, 1], [72688, 72697, 1], [72784, 72812, 1], [73040, 73049, 1], [73120, 73129, 1], [73552, 73561, 1], [73664, 73684, 1], [74752, 74862, 1], [90416, 90425, 1], [92768, 92777, 1], [92864, 92873, 1], [93008, 93017, 1], [93019, 93025, 1], [93552, 93561, 1], [93824, 93846, 1], [118000, 118009, 1], [119488, 119507, 1], [119520, 119539, 1], [119648, 119672, 1], [120782, 120831, 1], [123200, 123209, 1], [123632, 123641, 1], [124144, 124153, 1], [124401, 124410, 1], [125127, 125135, 1], [125264, 125273, 1], [126065, 126123, 1], [126125, 126127, 1], [126129, 126132, 1], [126209, 126253, 1], [126255, 126269, 1], [127232, 127244, 1], [130032, 130041, 1]];\n static Nd = [[48, 57, 1], [1632, 1641, 1], [1776, 1785, 1], [1984, 1993, 1], [2406, 2415, 1], [2534, 2543, 1], [2662, 2671, 1], [2790, 2799, 1], [2918, 2927, 1], [3046, 3055, 1], [3174, 3183, 1], [3302, 3311, 1], [3430, 3439, 1], [3558, 3567, 1], [3664, 3673, 1], [3792, 3801, 1], [3872, 3881, 1], [4160, 4169, 1], [4240, 4249, 1], [6112, 6121, 1], [6160, 6169, 1], [6470, 6479, 1], [6608, 6617, 1], [6784, 6793, 1], [6800, 6809, 1], [6992, 7001, 1], [7088, 7097, 1], [7232, 7241, 1], [7248, 7257, 1], [42528, 42537, 1], [43216, 43225, 1], [43264, 43273, 1], [43472, 43481, 1], [43504, 43513, 1], [43600, 43609, 1], [44016, 44025, 1], [65296, 65305, 1], [66720, 66729, 1], [68912, 68921, 1], [68928, 68937, 1], [69734, 69743, 1], [69872, 69881, 1], [69942, 69951, 1], [70096, 70105, 1], [70384, 70393, 1], [70736, 70745, 1], [70864, 70873, 1], [71248, 71257, 1], [71360, 71369, 1], [71376, 71395, 1], [71472, 71481, 1], [71904, 71913, 1], [72016, 72025, 1], [72688, 72697, 1], [72784, 72793, 1], [73040, 73049, 1], [73120, 73129, 1], [73552, 73561, 1], [90416, 90425, 1], [92768, 92777, 1], [92864, 92873, 1], [93008, 93017, 1], [93552, 93561, 1], [118000, 118009, 1], [120782, 120831, 1], [123200, 123209, 1], [123632, 123641, 1], [124144, 124153, 1], [124401, 124410, 1], [125264, 125273, 1], [130032, 130041, 1]];\n static Nl = [[5870, 5872, 1], [8544, 8578, 1], [8581, 8584, 1], [12295, 12321, 26], [12322, 12329, 1], [12344, 12346, 1], [42726, 42735, 1], [65856, 65908, 1], [66369, 66378, 9], [66513, 66517, 1], [74752, 74862, 1]];\n static No = [[178, 179, 1], [185, 188, 3], [189, 190, 1], [2548, 2553, 1], [2930, 2935, 1], [3056, 3058, 1], [3192, 3198, 1], [3416, 3422, 1], [3440, 3448, 1], [3882, 3891, 1], [4969, 4988, 1], [6128, 6137, 1], [6618, 8304, 1686], [8308, 8313, 1], [8320, 8329, 1], [8528, 8543, 1], [8585, 9312, 727], [9313, 9371, 1], [9450, 9471, 1], [10102, 10131, 1], [11517, 12690, 1173], [12691, 12693, 1], [12832, 12841, 1], [12872, 12879, 1], [12881, 12895, 1], [12928, 12937, 1], [12977, 12991, 1], [43056, 43061, 1], [65799, 65843, 1], [65909, 65912, 1], [65930, 65931, 1], [66273, 66299, 1], [66336, 66339, 1], [67672, 67679, 1], [67705, 67711, 1], [67751, 67759, 1], [67835, 67839, 1], [67862, 67867, 1], [68028, 68029, 1], [68032, 68047, 1], [68050, 68095, 1], [68160, 68168, 1], [68221, 68222, 1], [68253, 68255, 1], [68331, 68335, 1], [68440, 68447, 1], [68472, 68479, 1], [68521, 68527, 1], [68858, 68863, 1], [69216, 69246, 1], [69405, 69414, 1], [69457, 69460, 1], [69573, 69579, 1], [69714, 69733, 1], [70113, 70132, 1], [71482, 71483, 1], [71914, 71922, 1], [72794, 72812, 1], [73664, 73684, 1], [93019, 93025, 1], [93824, 93846, 1], [119488, 119507, 1], [119520, 119539, 1], [119648, 119672, 1], [125127, 125135, 1], [126065, 126123, 1], [126125, 126127, 1], [126129, 126132, 1], [126209, 126253, 1], [126255, 126269, 1], [127232, 127244, 1]];\n static P = [[33, 35, 1], [37, 42, 1], [44, 47, 1], [58, 59, 1], [63, 64, 1], [91, 93, 1], [95, 123, 28], [125, 161, 36], [167, 171, 4], [182, 183, 1], [187, 191, 4], [894, 903, 9], [1370, 1375, 1], [1417, 1418, 1], [1470, 1472, 2], [1475, 1478, 3], [1523, 1524, 1], [1545, 1546, 1], [1548, 1549, 1], [1563, 1565, 2], [1566, 1567, 1], [1642, 1645, 1], [1748, 1792, 44], [1793, 1805, 1], [2039, 2041, 1], [2096, 2110, 1], [2142, 2404, 262], [2405, 2416, 11], [2557, 2678, 121], [2800, 3191, 391], [3204, 3572, 368], [3663, 3674, 11], [3675, 3844, 169], [3845, 3858, 1], [3860, 3898, 38], [3899, 3901, 1], [3973, 4048, 75], [4049, 4052, 1], [4057, 4058, 1], [4170, 4175, 1], [4347, 4960, 613], [4961, 4968, 1], [5120, 5742, 622], [5787, 5788, 1], [5867, 5869, 1], [5941, 5942, 1], [6100, 6102, 1], [6104, 6106, 1], [6144, 6154, 1], [6468, 6469, 1], [6686, 6687, 1], [6816, 6822, 1], [6824, 6829, 1], [6990, 6991, 1], [7002, 7008, 1], [7037, 7039, 1], [7164, 7167, 1], [7227, 7231, 1], [7294, 7295, 1], [7360, 7367, 1], [7379, 8208, 829], [8209, 8231, 1], [8240, 8259, 1], [8261, 8273, 1], [8275, 8286, 1], [8317, 8318, 1], [8333, 8334, 1], [8968, 8971, 1], [9001, 9002, 1], [10088, 10101, 1], [10181, 10182, 1], [10214, 10223, 1], [10627, 10648, 1], [10712, 10715, 1], [10748, 10749, 1], [11513, 11516, 1], [11518, 11519, 1], [11632, 11776, 144], [11777, 11822, 1], [11824, 11855, 1], [11858, 11869, 1], [12289, 12291, 1], [12296, 12305, 1], [12308, 12319, 1], [12336, 12349, 13], [12448, 12539, 91], [42238, 42239, 1], [42509, 42511, 1], [42611, 42622, 11], [42738, 42743, 1], [43124, 43127, 1], [43214, 43215, 1], [43256, 43258, 1], [43260, 43310, 50], [43311, 43359, 48], [43457, 43469, 1], [43486, 43487, 1], [43612, 43615, 1], [43742, 43743, 1], [43760, 43761, 1], [44011, 64830, 20819], [64831, 65040, 209], [65041, 65049, 1], [65072, 65106, 1], [65108, 65121, 1], [65123, 65128, 5], [65130, 65131, 1], [65281, 65283, 1], [65285, 65290, 1], [65292, 65295, 1], [65306, 65307, 1], [65311, 65312, 1], [65339, 65341, 1], [65343, 65371, 28], [65373, 65375, 2], [65376, 65381, 1], [65792, 65794, 1], [66463, 66512, 49], [66927, 67671, 744], [67871, 67903, 32], [68176, 68184, 1], [68223, 68336, 113], [68337, 68342, 1], [68409, 68415, 1], [68505, 68508, 1], [68974, 69293, 319], [69461, 69465, 1], [69510, 69513, 1], [69703, 69709, 1], [69819, 69820, 1], [69822, 69825, 1], [69952, 69955, 1], [70004, 70005, 1], [70085, 70088, 1], [70093, 70107, 14], [70109, 70111, 1], [70200, 70205, 1], [70313, 70612, 299], [70613, 70615, 2], [70616, 70731, 115], [70732, 70735, 1], [70746, 70747, 1], [70749, 70854, 105], [71105, 71127, 1], [71233, 71235, 1], [71264, 71276, 1], [71353, 71484, 131], [71485, 71486, 1], [71739, 72004, 265], [72005, 72006, 1], [72162, 72255, 93], [72256, 72262, 1], [72346, 72348, 1], [72350, 72354, 1], [72448, 72457, 1], [72673, 72769, 96], [72770, 72773, 1], [72816, 72817, 1], [73463, 73464, 1], [73539, 73551, 1], [73727, 74864, 1137], [74865, 74868, 1], [77809, 77810, 1], [92782, 92783, 1], [92917, 92983, 66], [92984, 92987, 1], [92996, 93549, 553], [93550, 93551, 1], [93847, 93850, 1], [94178, 113823, 19645], [121479, 121483, 1], [124415, 125278, 863], [125279, 125279, 1]];\n static Pc = [[95, 8255, 8160], [8256, 8276, 20], [65075, 65076, 1], [65101, 65103, 1], [65343, 65343, 1]];\n static Pd = [[45, 1418, 1373], [1470, 5120, 3650], [6150, 8208, 2058], [8209, 8213, 1], [11799, 11802, 3], [11834, 11835, 1], [11840, 11869, 29], [12316, 12336, 20], [12448, 65073, 52625], [65074, 65112, 38], [65123, 65293, 170], [68974, 69293, 319]];\n static Pe = [[41, 93, 52], [125, 3899, 3774], [3901, 5788, 1887], [8262, 8318, 56], [8334, 8969, 635], [8971, 9002, 31], [10089, 10101, 2], [10182, 10215, 33], [10217, 10223, 2], [10628, 10648, 2], [10713, 10715, 2], [10749, 11811, 1062], [11813, 11817, 2], [11862, 11868, 2], [12297, 12305, 2], [12309, 12315, 2], [12318, 12319, 1], [64830, 65048, 218], [65078, 65092, 2], [65096, 65114, 18], [65116, 65118, 2], [65289, 65341, 52], [65373, 65379, 3]];\n static Pf = [[187, 8217, 8030], [8221, 8250, 29], [11779, 11781, 2], [11786, 11789, 3], [11805, 11809, 4]];\n static Pi = [[171, 8216, 8045], [8219, 8220, 1], [8223, 8249, 26], [11778, 11780, 2], [11785, 11788, 3], [11804, 11808, 4]];\n static Po = [[33, 35, 1], [37, 39, 1], [42, 46, 2], [47, 58, 11], [59, 63, 4], [64, 92, 28], [161, 167, 6], [182, 183, 1], [191, 894, 703], [903, 1370, 467], [1371, 1375, 1], [1417, 1472, 55], [1475, 1478, 3], [1523, 1524, 1], [1545, 1546, 1], [1548, 1549, 1], [1563, 1565, 2], [1566, 1567, 1], [1642, 1645, 1], [1748, 1792, 44], [1793, 1805, 1], [2039, 2041, 1], [2096, 2110, 1], [2142, 2404, 262], [2405, 2416, 11], [2557, 2678, 121], [2800, 3191, 391], [3204, 3572, 368], [3663, 3674, 11], [3675, 3844, 169], [3845, 3858, 1], [3860, 3973, 113], [4048, 4052, 1], [4057, 4058, 1], [4170, 4175, 1], [4347, 4960, 613], [4961, 4968, 1], [5742, 5867, 125], [5868, 5869, 1], [5941, 5942, 1], [6100, 6102, 1], [6104, 6106, 1], [6144, 6149, 1], [6151, 6154, 1], [6468, 6469, 1], [6686, 6687, 1], [6816, 6822, 1], [6824, 6829, 1], [6990, 6991, 1], [7002, 7008, 1], [7037, 7039, 1], [7164, 7167, 1], [7227, 7231, 1], [7294, 7295, 1], [7360, 7367, 1], [7379, 8214, 835], [8215, 8224, 9], [8225, 8231, 1], [8240, 8248, 1], [8251, 8254, 1], [8257, 8259, 1], [8263, 8273, 1], [8275, 8277, 2], [8278, 8286, 1], [11513, 11516, 1], [11518, 11519, 1], [11632, 11776, 144], [11777, 11782, 5], [11783, 11784, 1], [11787, 11790, 3], [11791, 11798, 1], [11800, 11801, 1], [11803, 11806, 3], [11807, 11818, 11], [11819, 11822, 1], [11824, 11833, 1], [11836, 11839, 1], [11841, 11843, 2], [11844, 11855, 1], [11858, 11860, 1], [12289, 12291, 1], [12349, 12539, 190], [42238, 42239, 1], [42509, 42511, 1], [42611, 42622, 11], [42738, 42743, 1], [43124, 43127, 1], [43214, 43215, 1], [43256, 43258, 1], [43260, 43310, 50], [43311, 43359, 48], [43457, 43469, 1], [43486, 43487, 1], [43612, 43615, 1], [43742, 43743, 1], [43760, 43761, 1], [44011, 65040, 21029], [65041, 65046, 1], [65049, 65072, 23], [65093, 65094, 1], [65097, 65100, 1], [65104, 65106, 1], [65108, 65111, 1], [65119, 65121, 1], [65128, 65130, 2], [65131, 65281, 150], [65282, 65283, 1], [65285, 65287, 1], [65290, 65294, 2], [65295, 65306, 11], [65307, 65311, 4], [65312, 65340, 28], [65377, 65380, 3], [65381, 65792, 411], [65793, 65794, 1], [66463, 66512, 49], [66927, 67671, 744], [67871, 67903, 32], [68176, 68184, 1], [68223, 68336, 113], [68337, 68342, 1], [68409, 68415, 1], [68505, 68508, 1], [69461, 69465, 1], [69510, 69513, 1], [69703, 69709, 1], [69819, 69820, 1], [69822, 69825, 1], [69952, 69955, 1], [70004, 70005, 1], [70085, 70088, 1], [70093, 70107, 14], [70109, 70111, 1], [70200, 70205, 1], [70313, 70612, 299], [70613, 70615, 2], [70616, 70731, 115], [70732, 70735, 1], [70746, 70747, 1], [70749, 70854, 105], [71105, 71127, 1], [71233, 71235, 1], [71264, 71276, 1], [71353, 71484, 131], [71485, 71486, 1], [71739, 72004, 265], [72005, 72006, 1], [72162, 72255, 93], [72256, 72262, 1], [72346, 72348, 1], [72350, 72354, 1], [72448, 72457, 1], [72673, 72769, 96], [72770, 72773, 1], [72816, 72817, 1], [73463, 73464, 1], [73539, 73551, 1], [73727, 74864, 1137], [74865, 74868, 1], [77809, 77810, 1], [92782, 92783, 1], [92917, 92983, 66], [92984, 92987, 1], [92996, 93549, 553], [93550, 93551, 1], [93847, 93850, 1], [94178, 113823, 19645], [121479, 121483, 1], [124415, 125278, 863], [125279, 125279, 1]];\n static Ps = [[40, 91, 51], [123, 3898, 3775], [3900, 5787, 1887], [8218, 8222, 4], [8261, 8317, 56], [8333, 8968, 635], [8970, 9001, 31], [10088, 10100, 2], [10181, 10214, 33], [10216, 10222, 2], [10627, 10647, 2], [10712, 10714, 2], [10748, 11810, 1062], [11812, 11816, 2], [11842, 11861, 19], [11863, 11867, 2], [12296, 12304, 2], [12308, 12314, 2], [12317, 64831, 52514], [65047, 65077, 30], [65079, 65091, 2], [65095, 65113, 18], [65115, 65117, 2], [65288, 65339, 51], [65371, 65375, 4], [65378, 65378, 1]];\n static S = [[36, 43, 7], [60, 62, 1], [94, 96, 2], [124, 126, 2], [162, 166, 1], [168, 169, 1], [172, 174, 2], [175, 177, 1], [180, 184, 4], [215, 247, 32], [706, 709, 1], [722, 735, 1], [741, 747, 1], [749, 751, 2], [752, 767, 1], [885, 900, 15], [901, 1014, 113], [1154, 1421, 267], [1422, 1423, 1], [1542, 1544, 1], [1547, 1550, 3], [1551, 1758, 207], [1769, 1789, 20], [1790, 2038, 248], [2046, 2047, 1], [2184, 2546, 362], [2547, 2554, 7], [2555, 2801, 246], [2928, 3059, 131], [3060, 3066, 1], [3199, 3407, 208], [3449, 3647, 198], [3841, 3843, 1], [3859, 3861, 2], [3862, 3863, 1], [3866, 3871, 1], [3892, 3896, 2], [4030, 4037, 1], [4039, 4044, 1], [4046, 4047, 1], [4053, 4056, 1], [4254, 4255, 1], [5008, 5017, 1], [5741, 6107, 366], [6464, 6622, 158], [6623, 6655, 1], [7009, 7018, 1], [7028, 7036, 1], [8125, 8127, 2], [8128, 8129, 1], [8141, 8143, 1], [8157, 8159, 1], [8173, 8175, 1], [8189, 8190, 1], [8260, 8274, 14], [8314, 8316, 1], [8330, 8332, 1], [8352, 8384, 1], [8448, 8449, 1], [8451, 8454, 1], [8456, 8457, 1], [8468, 8470, 2], [8471, 8472, 1], [8478, 8483, 1], [8485, 8489, 2], [8494, 8506, 12], [8507, 8512, 5], [8513, 8516, 1], [8522, 8525, 1], [8527, 8586, 59], [8587, 8592, 5], [8593, 8967, 1], [8972, 9000, 1], [9003, 9257, 1], [9280, 9290, 1], [9372, 9449, 1], [9472, 10087, 1], [10132, 10180, 1], [10183, 10213, 1], [10224, 10626, 1], [10649, 10711, 1], [10716, 10747, 1], [10750, 11123, 1], [11126, 11157, 1], [11159, 11263, 1], [11493, 11498, 1], [11856, 11857, 1], [11904, 11929, 1], [11931, 12019, 1], [12032, 12245, 1], [12272, 12287, 1], [12292, 12306, 14], [12307, 12320, 13], [12342, 12343, 1], [12350, 12351, 1], [12443, 12444, 1], [12688, 12689, 1], [12694, 12703, 1], [12736, 12773, 1], [12783, 12800, 17], [12801, 12830, 1], [12842, 12871, 1], [12880, 12896, 16], [12897, 12927, 1], [12938, 12976, 1], [12992, 13311, 1], [19904, 19967, 1], [42128, 42182, 1], [42752, 42774, 1], [42784, 42785, 1], [42889, 42890, 1], [43048, 43051, 1], [43062, 43065, 1], [43639, 43641, 1], [43867, 43882, 15], [43883, 64297, 20414], [64434, 64450, 1], [64832, 64847, 1], [64975, 65020, 45], [65021, 65023, 1], [65122, 65124, 2], [65125, 65126, 1], [65129, 65284, 155], [65291, 65308, 17], [65309, 65310, 1], [65342, 65344, 2], [65372, 65374, 2], [65504, 65510, 1], [65512, 65518, 1], [65532, 65533, 1], [65847, 65855, 1], [65913, 65929, 1], [65932, 65934, 1], [65936, 65948, 1], [65952, 66000, 48], [66001, 66044, 1], [67703, 67704, 1], [68296, 69006, 710], [69007, 71487, 2480], [73685, 73713, 1], [92988, 92991, 1], [92997, 113820, 20823], [117760, 117999, 1], [118016, 118451, 1], [118608, 118723, 1], [118784, 119029, 1], [119040, 119078, 1], [119081, 119140, 1], [119146, 119148, 1], [119171, 119172, 1], [119180, 119209, 1], [119214, 119274, 1], [119296, 119361, 1], [119365, 119552, 187], [119553, 119638, 1], [120513, 120539, 26], [120571, 120597, 26], [120629, 120655, 26], [120687, 120713, 26], [120745, 120771, 26], [120832, 121343, 1], [121399, 121402, 1], [121453, 121460, 1], [121462, 121475, 1], [121477, 121478, 1], [123215, 123647, 432], [126124, 126128, 4], [126254, 126704, 450], [126705, 126976, 271], [126977, 127019, 1], [127024, 127123, 1], [127136, 127150, 1], [127153, 127167, 1], [127169, 127183, 1], [127185, 127221, 1], [127245, 127405, 1], [127462, 127490, 1], [127504, 127547, 1], [127552, 127560, 1], [127568, 127569, 1], [127584, 127589, 1], [127744, 128727, 1], [128732, 128748, 1], [128752, 128764, 1], [128768, 128886, 1], [128891, 128985, 1], [128992, 129003, 1], [129008, 129024, 16], [129025, 129035, 1], [129040, 129095, 1], [129104, 129113, 1], [129120, 129159, 1], [129168, 129197, 1], [129200, 129211, 1], [129216, 129217, 1], [129280, 129619, 1], [129632, 129645, 1], [129648, 129660, 1], [129664, 129673, 1], [129679, 129734, 1], [129742, 129756, 1], [129759, 129769, 1], [129776, 129784, 1], [129792, 129938, 1], [129940, 130031, 1]];\n static Sc = [[36, 162, 126], [163, 165, 1], [1423, 1547, 124], [2046, 2047, 1], [2546, 2547, 1], [2555, 2801, 246], [3065, 3647, 582], [6107, 8352, 2245], [8353, 8384, 1], [43064, 65020, 21956], [65129, 65284, 155], [65504, 65505, 1], [65509, 65510, 1], [73693, 73696, 1], [123647, 126128, 2481]];\n static Sk = [[94, 96, 2], [168, 175, 7], [180, 184, 4], [706, 709, 1], [722, 735, 1], [741, 747, 1], [749, 751, 2], [752, 767, 1], [885, 900, 15], [901, 2184, 1283], [8125, 8127, 2], [8128, 8129, 1], [8141, 8143, 1], [8157, 8159, 1], [8173, 8175, 1], [8189, 8190, 1], [12443, 12444, 1], [42752, 42774, 1], [42784, 42785, 1], [42889, 42890, 1], [43867, 43882, 15], [43883, 64434, 20551], [64435, 64450, 1], [65342, 65344, 2], [65507, 127995, 62488], [127996, 127999, 1]];\n static Sm = [[43, 60, 17], [61, 62, 1], [124, 126, 2], [172, 177, 5], [215, 247, 32], [1014, 1542, 528], [1543, 1544, 1], [8260, 8274, 14], [8314, 8316, 1], [8330, 8332, 1], [8472, 8512, 40], [8513, 8516, 1], [8523, 8592, 69], [8593, 8596, 1], [8602, 8603, 1], [8608, 8614, 3], [8622, 8654, 32], [8655, 8658, 3], [8660, 8692, 32], [8693, 8959, 1], [8992, 8993, 1], [9084, 9115, 31], [9116, 9139, 1], [9180, 9185, 1], [9655, 9665, 10], [9720, 9727, 1], [9839, 10176, 337], [10177, 10180, 1], [10183, 10213, 1], [10224, 10239, 1], [10496, 10626, 1], [10649, 10711, 1], [10716, 10747, 1], [10750, 11007, 1], [11056, 11076, 1], [11079, 11084, 1], [64297, 65122, 825], [65124, 65126, 1], [65291, 65308, 17], [65309, 65310, 1], [65372, 65374, 2], [65506, 65513, 7], [65514, 65516, 1], [69006, 69007, 1], [120513, 120539, 26], [120571, 120597, 26], [120629, 120655, 26], [120687, 120713, 26], [120745, 120771, 26], [126704, 126705, 1]];\n static So = [[166, 169, 3], [174, 176, 2], [1154, 1421, 267], [1422, 1550, 128], [1551, 1758, 207], [1769, 1789, 20], [1790, 2038, 248], [2554, 2928, 374], [3059, 3064, 1], [3066, 3199, 133], [3407, 3449, 42], [3841, 3843, 1], [3859, 3861, 2], [3862, 3863, 1], [3866, 3871, 1], [3892, 3896, 2], [4030, 4037, 1], [4039, 4044, 1], [4046, 4047, 1], [4053, 4056, 1], [4254, 4255, 1], [5008, 5017, 1], [5741, 6464, 723], [6622, 6655, 1], [7009, 7018, 1], [7028, 7036, 1], [8448, 8449, 1], [8451, 8454, 1], [8456, 8457, 1], [8468, 8470, 2], [8471, 8478, 7], [8479, 8483, 1], [8485, 8489, 2], [8494, 8506, 12], [8507, 8522, 15], [8524, 8525, 1], [8527, 8586, 59], [8587, 8597, 10], [8598, 8601, 1], [8604, 8607, 1], [8609, 8610, 1], [8612, 8613, 1], [8615, 8621, 1], [8623, 8653, 1], [8656, 8657, 1], [8659, 8661, 2], [8662, 8691, 1], [8960, 8967, 1], [8972, 8991, 1], [8994, 9000, 1], [9003, 9083, 1], [9085, 9114, 1], [9140, 9179, 1], [9186, 9257, 1], [9280, 9290, 1], [9372, 9449, 1], [9472, 9654, 1], [9656, 9664, 1], [9666, 9719, 1], [9728, 9838, 1], [9840, 10087, 1], [10132, 10175, 1], [10240, 10495, 1], [11008, 11055, 1], [11077, 11078, 1], [11085, 11123, 1], [11126, 11157, 1], [11159, 11263, 1], [11493, 11498, 1], [11856, 11857, 1], [11904, 11929, 1], [11931, 12019, 1], [12032, 12245, 1], [12272, 12287, 1], [12292, 12306, 14], [12307, 12320, 13], [12342, 12343, 1], [12350, 12351, 1], [12688, 12689, 1], [12694, 12703, 1], [12736, 12773, 1], [12783, 12800, 17], [12801, 12830, 1], [12842, 12871, 1], [12880, 12896, 16], [12897, 12927, 1], [12938, 12976, 1], [12992, 13311, 1], [19904, 19967, 1], [42128, 42182, 1], [43048, 43051, 1], [43062, 43063, 1], [43065, 43639, 574], [43640, 43641, 1], [64832, 64847, 1], [64975, 65021, 46], [65022, 65023, 1], [65508, 65512, 4], [65517, 65518, 1], [65532, 65533, 1], [65847, 65855, 1], [65913, 65929, 1], [65932, 65934, 1], [65936, 65948, 1], [65952, 66000, 48], [66001, 66044, 1], [67703, 67704, 1], [68296, 71487, 3191], [73685, 73692, 1], [73697, 73713, 1], [92988, 92991, 1], [92997, 113820, 20823], [117760, 117999, 1], [118016, 118451, 1], [118608, 118723, 1], [118784, 119029, 1], [119040, 119078, 1], [119081, 119140, 1], [119146, 119148, 1], [119171, 119172, 1], [119180, 119209, 1], [119214, 119274, 1], [119296, 119361, 1], [119365, 119552, 187], [119553, 119638, 1], [120832, 121343, 1], [121399, 121402, 1], [121453, 121460, 1], [121462, 121475, 1], [121477, 121478, 1], [123215, 126124, 2909], [126254, 126976, 722], [126977, 127019, 1], [127024, 127123, 1], [127136, 127150, 1], [127153, 127167, 1], [127169, 127183, 1], [127185, 127221, 1], [127245, 127405, 1], [127462, 127490, 1], [127504, 127547, 1], [127552, 127560, 1], [127568, 127569, 1], [127584, 127589, 1], [127744, 127994, 1], [128000, 128727, 1], [128732, 128748, 1], [128752, 128764, 1], [128768, 128886, 1], [128891, 128985, 1], [128992, 129003, 1], [129008, 129024, 16], [129025, 129035, 1], [129040, 129095, 1], [129104, 129113, 1], [129120, 129159, 1], [129168, 129197, 1], [129200, 129211, 1], [129216, 129217, 1], [129280, 129619, 1], [129632, 129645, 1], [129648, 129660, 1], [129664, 129673, 1], [129679, 129734, 1], [129742, 129756, 1], [129759, 129769, 1], [129776, 129784, 1], [129792, 129938, 1], [129940, 130031, 1]];\n static Z = [[32, 160, 128], [5760, 8192, 2432], [8193, 8202, 1], [8232, 8233, 1], [8239, 8287, 48], [12288, 12288, 1]];\n static Zl = [[8232, 8232, 1]];\n static Zp = [[8233, 8233, 1]];\n static Zs = [[32, 160, 128], [5760, 8192, 2432], [8193, 8202, 1], [8239, 8287, 48], [12288, 12288, 1]];\n static Adlam = [[125184, 125259, 1], [125264, 125273, 1], [125278, 125279, 1]];\n static Ahom = [[71424, 71450, 1], [71453, 71467, 1], [71472, 71494, 1]];\n static Anatolian_Hieroglyphs = [[82944, 83526, 1]];\n static Arabic = [[1536, 1540, 1], [1542, 1547, 1], [1549, 1562, 1], [1564, 1566, 1], [1568, 1599, 1], [1601, 1610, 1], [1622, 1647, 1], [1649, 1756, 1], [1758, 1791, 1], [1872, 1919, 1], [2160, 2190, 1], [2192, 2193, 1], [2199, 2273, 1], [2275, 2303, 1], [64336, 64450, 1], [64467, 64829, 1], [64832, 64911, 1], [64914, 64967, 1], [64975, 65008, 33], [65009, 65023, 1], [65136, 65140, 1], [65142, 65276, 1], [69216, 69246, 1], [69314, 69316, 1], [69372, 69375, 1], [126464, 126467, 1], [126469, 126495, 1], [126497, 126498, 1], [126500, 126503, 3], [126505, 126514, 1], [126516, 126519, 1], [126521, 126523, 2], [126530, 126535, 5], [126537, 126541, 2], [126542, 126543, 1], [126545, 126546, 1], [126548, 126551, 3], [126553, 126561, 2], [126562, 126564, 2], [126567, 126570, 1], [126572, 126578, 1], [126580, 126583, 1], [126585, 126588, 1], [126590, 126592, 2], [126593, 126601, 1], [126603, 126619, 1], [126625, 126627, 1], [126629, 126633, 1], [126635, 126651, 1], [126704, 126705, 1]];\n static Armenian = [[1329, 1366, 1], [1369, 1418, 1], [1421, 1423, 1], [64275, 64279, 1]];\n static Avestan = [[68352, 68405, 1], [68409, 68415, 1]];\n static Balinese = [[6912, 6988, 1], [6990, 7039, 1]];\n static Bamum = [[42656, 42743, 1], [92160, 92728, 1]];\n static Bassa_Vah = [[92880, 92909, 1], [92912, 92917, 1]];\n static Batak = [[7104, 7155, 1], [7164, 7167, 1]];\n static Bengali = [[2432, 2435, 1], [2437, 2444, 1], [2447, 2448, 1], [2451, 2472, 1], [2474, 2480, 1], [2482, 2486, 4], [2487, 2489, 1], [2492, 2500, 1], [2503, 2504, 1], [2507, 2510, 1], [2519, 2524, 5], [2525, 2527, 2], [2528, 2531, 1], [2534, 2558, 1]];\n static Bhaiksuki = [[72704, 72712, 1], [72714, 72758, 1], [72760, 72773, 1], [72784, 72812, 1]];\n static Bopomofo = [[746, 747, 1], [12549, 12591, 1], [12704, 12735, 1]];\n static Brahmi = [[69632, 69709, 1], [69714, 69749, 1], [69759, 69759, 1]];\n static Braille = [[10240, 10495, 1]];\n static Buginese = [[6656, 6683, 1], [6686, 6687, 1]];\n static Buhid = [[5952, 5971, 1]];\n static Canadian_Aboriginal = [[5120, 5759, 1], [6320, 6389, 1], [72368, 72383, 1]];\n static Carian = [[66208, 66256, 1]];\n static Caucasian_Albanian = [[66864, 66915, 1], [66927, 66927, 1]];\n static Chakma = [[69888, 69940, 1], [69942, 69959, 1]];\n static Cham = [[43520, 43574, 1], [43584, 43597, 1], [43600, 43609, 1], [43612, 43615, 1]];\n static Cherokee = [[5024, 5109, 1], [5112, 5117, 1], [43888, 43967, 1]];\n static Chorasmian = [[69552, 69579, 1]];\n static Common = [[0, 64, 1], [91, 96, 1], [123, 169, 1], [171, 185, 1], [187, 191, 1], [215, 247, 32], [697, 735, 1], [741, 745, 1], [748, 767, 1], [884, 894, 10], [901, 903, 2], [1541, 1548, 7], [1563, 1567, 4], [1600, 1757, 157], [2274, 2404, 130], [2405, 3647, 1242], [4053, 4056, 1], [4347, 5867, 1520], [5868, 5869, 1], [5941, 5942, 1], [6146, 6147, 1], [6149, 7379, 1230], [7393, 7401, 8], [7402, 7404, 1], [7406, 7411, 1], [7413, 7415, 1], [7418, 8192, 774], [8193, 8203, 1], [8206, 8292, 1], [8294, 8304, 1], [8308, 8318, 1], [8320, 8334, 1], [8352, 8384, 1], [8448, 8485, 1], [8487, 8489, 1], [8492, 8497, 1], [8499, 8525, 1], [8527, 8543, 1], [8585, 8587, 1], [8592, 9257, 1], [9280, 9290, 1], [9312, 10239, 1], [10496, 11123, 1], [11126, 11157, 1], [11159, 11263, 1], [11776, 11869, 1], [12272, 12292, 1], [12294, 12296, 2], [12297, 12320, 1], [12336, 12343, 1], [12348, 12351, 1], [12443, 12444, 1], [12448, 12539, 91], [12540, 12688, 148], [12689, 12703, 1], [12736, 12773, 1], [12783, 12832, 49], [12833, 12895, 1], [12927, 13007, 1], [13055, 13144, 89], [13145, 13311, 1], [19904, 19967, 1], [42752, 42785, 1], [42888, 42890, 1], [43056, 43065, 1], [43310, 43471, 161], [43867, 43882, 15], [43883, 64830, 20947], [64831, 65040, 209], [65041, 65049, 1], [65072, 65106, 1], [65108, 65126, 1], [65128, 65131, 1], [65279, 65281, 2], [65282, 65312, 1], [65339, 65344, 1], [65371, 65381, 1], [65392, 65438, 46], [65439, 65504, 65], [65505, 65510, 1], [65512, 65518, 1], [65529, 65533, 1], [65792, 65794, 1], [65799, 65843, 1], [65847, 65855, 1], [65936, 65948, 1], [66000, 66044, 1], [66273, 66299, 1], [113824, 113827, 1], [117760, 118009, 1], [118016, 118451, 1], [118608, 118723, 1], [118784, 119029, 1], [119040, 119078, 1], [119081, 119142, 1], [119146, 119162, 1], [119171, 119172, 1], [119180, 119209, 1], [119214, 119274, 1], [119488, 119507, 1], [119520, 119539, 1], [119552, 119638, 1], [119648, 119672, 1], [119808, 119892, 1], [119894, 119964, 1], [119966, 119967, 1], [119970, 119973, 3], [119974, 119977, 3], [119978, 119980, 1], [119982, 119993, 1], [119995, 119997, 2], [119998, 120003, 1], [120005, 120069, 1], [120071, 120074, 1], [120077, 120084, 1], [120086, 120092, 1], [120094, 120121, 1], [120123, 120126, 1], [120128, 120132, 1], [120134, 120138, 4], [120139, 120144, 1], [120146, 120485, 1], [120488, 120779, 1], [120782, 120831, 1], [126065, 126132, 1], [126209, 126269, 1], [126976, 127019, 1], [127024, 127123, 1], [127136, 127150, 1], [127153, 127167, 1], [127169, 127183, 1], [127185, 127221, 1], [127232, 127405, 1], [127462, 127487, 1], [127489, 127490, 1], [127504, 127547, 1], [127552, 127560, 1], [127568, 127569, 1], [127584, 127589, 1], [127744, 128727, 1], [128732, 128748, 1], [128752, 128764, 1], [128768, 128886, 1], [128891, 128985, 1], [128992, 129003, 1], [129008, 129024, 16], [129025, 129035, 1], [129040, 129095, 1], [129104, 129113, 1], [129120, 129159, 1], [129168, 129197, 1], [129200, 129211, 1], [129216, 129217, 1], [129280, 129619, 1], [129632, 129645, 1], [129648, 129660, 1], [129664, 129673, 1], [129679, 129734, 1], [129742, 129756, 1], [129759, 129769, 1], [129776, 129784, 1], [129792, 129938, 1], [129940, 130041, 1], [917505, 917536, 31], [917537, 917631, 1]];\n static foldCommon = [[924, 956, 32]];\n static Coptic = [[994, 1007, 1], [11392, 11507, 1], [11513, 11519, 1]];\n static Cuneiform = [[73728, 74649, 1], [74752, 74862, 1], [74864, 74868, 1], [74880, 75075, 1]];\n static Cypriot = [[67584, 67589, 1], [67592, 67594, 2], [67595, 67637, 1], [67639, 67640, 1], [67644, 67647, 3]];\n static Cypro_Minoan = [[77712, 77810, 1]];\n static Cyrillic = [[1024, 1156, 1], [1159, 1327, 1], [7296, 7306, 1], [7467, 7544, 77], [11744, 11775, 1], [42560, 42655, 1], [65070, 65071, 1], [122928, 122989, 1], [123023, 123023, 1]];\n static Deseret = [[66560, 66639, 1]];\n static Devanagari = [[2304, 2384, 1], [2389, 2403, 1], [2406, 2431, 1], [43232, 43263, 1], [72448, 72457, 1]];\n static Dives_Akuru = [[71936, 71942, 1], [71945, 71948, 3], [71949, 71955, 1], [71957, 71958, 1], [71960, 71989, 1], [71991, 71992, 1], [71995, 72006, 1], [72016, 72025, 1]];\n static Dogra = [[71680, 71739, 1]];\n static Duployan = [[113664, 113770, 1], [113776, 113788, 1], [113792, 113800, 1], [113808, 113817, 1], [113820, 113823, 1]];\n static Egyptian_Hieroglyphs = [[77824, 78933, 1], [78944, 82938, 1]];\n static Elbasan = [[66816, 66855, 1]];\n static Elymaic = [[69600, 69622, 1]];\n static Ethiopic = [[4608, 4680, 1], [4682, 4685, 1], [4688, 4694, 1], [4696, 4698, 2], [4699, 4701, 1], [4704, 4744, 1], [4746, 4749, 1], [4752, 4784, 1], [4786, 4789, 1], [4792, 4798, 1], [4800, 4802, 2], [4803, 4805, 1], [4808, 4822, 1], [4824, 4880, 1], [4882, 4885, 1], [4888, 4954, 1], [4957, 4988, 1], [4992, 5017, 1], [11648, 11670, 1], [11680, 11686, 1], [11688, 11694, 1], [11696, 11702, 1], [11704, 11710, 1], [11712, 11718, 1], [11720, 11726, 1], [11728, 11734, 1], [11736, 11742, 1], [43777, 43782, 1], [43785, 43790, 1], [43793, 43798, 1], [43808, 43814, 1], [43816, 43822, 1], [124896, 124902, 1], [124904, 124907, 1], [124909, 124910, 1], [124912, 124926, 1]];\n static Garay = [[68928, 68965, 1], [68969, 68997, 1], [69006, 69007, 1]];\n static Georgian = [[4256, 4293, 1], [4295, 4301, 6], [4304, 4346, 1], [4348, 4351, 1], [7312, 7354, 1], [7357, 7359, 1], [11520, 11557, 1], [11559, 11565, 6]];\n static Glagolitic = [[11264, 11359, 1], [122880, 122886, 1], [122888, 122904, 1], [122907, 122913, 1], [122915, 122916, 1], [122918, 122922, 1]];\n static Gothic = [[66352, 66378, 1]];\n static Grantha = [[70400, 70403, 1], [70405, 70412, 1], [70415, 70416, 1], [70419, 70440, 1], [70442, 70448, 1], [70450, 70451, 1], [70453, 70457, 1], [70460, 70468, 1], [70471, 70472, 1], [70475, 70477, 1], [70480, 70487, 7], [70493, 70499, 1], [70502, 70508, 1], [70512, 70516, 1]];\n static Greek = [[880, 883, 1], [885, 887, 1], [890, 893, 1], [895, 900, 5], [902, 904, 2], [905, 906, 1], [908, 910, 2], [911, 929, 1], [931, 993, 1], [1008, 1023, 1], [7462, 7466, 1], [7517, 7521, 1], [7526, 7530, 1], [7615, 7936, 321], [7937, 7957, 1], [7960, 7965, 1], [7968, 8005, 1], [8008, 8013, 1], [8016, 8023, 1], [8025, 8031, 2], [8032, 8061, 1], [8064, 8116, 1], [8118, 8132, 1], [8134, 8147, 1], [8150, 8155, 1], [8157, 8175, 1], [8178, 8180, 1], [8182, 8190, 1], [8486, 43877, 35391], [65856, 65934, 1], [65952, 119296, 53344], [119297, 119365, 1]];\n static foldGreek = [[181, 837, 656]];\n static Gujarati = [[2689, 2691, 1], [2693, 2701, 1], [2703, 2705, 1], [2707, 2728, 1], [2730, 2736, 1], [2738, 2739, 1], [2741, 2745, 1], [2748, 2757, 1], [2759, 2761, 1], [2763, 2765, 1], [2768, 2784, 16], [2785, 2787, 1], [2790, 2801, 1], [2809, 2815, 1]];\n static Gunjala_Gondi = [[73056, 73061, 1], [73063, 73064, 1], [73066, 73102, 1], [73104, 73105, 1], [73107, 73112, 1], [73120, 73129, 1]];\n static Gurmukhi = [[2561, 2563, 1], [2565, 2570, 1], [2575, 2576, 1], [2579, 2600, 1], [2602, 2608, 1], [2610, 2611, 1], [2613, 2614, 1], [2616, 2617, 1], [2620, 2622, 2], [2623, 2626, 1], [2631, 2632, 1], [2635, 2637, 1], [2641, 2649, 8], [2650, 2652, 1], [2654, 2662, 8], [2663, 2678, 1]];\n static Gurung_Khema = [[90368, 90425, 1]];\n static Han = [[11904, 11929, 1], [11931, 12019, 1], [12032, 12245, 1], [12293, 12295, 2], [12321, 12329, 1], [12344, 12347, 1], [13312, 19903, 1], [19968, 40959, 1], [63744, 64109, 1], [64112, 64217, 1], [94178, 94179, 1], [94192, 94193, 1], [131072, 173791, 1], [173824, 177977, 1], [177984, 178205, 1], [178208, 183969, 1], [183984, 191456, 1], [191472, 192093, 1], [194560, 195101, 1], [196608, 201546, 1], [201552, 205743, 1]];\n static Hangul = [[4352, 4607, 1], [12334, 12335, 1], [12593, 12686, 1], [12800, 12830, 1], [12896, 12926, 1], [43360, 43388, 1], [44032, 55203, 1], [55216, 55238, 1], [55243, 55291, 1], [65440, 65470, 1], [65474, 65479, 1], [65482, 65487, 1], [65490, 65495, 1], [65498, 65500, 1]];\n static Hanifi_Rohingya = [[68864, 68903, 1], [68912, 68921, 1]];\n static Hanunoo = [[5920, 5940, 1]];\n static Hatran = [[67808, 67826, 1], [67828, 67829, 1], [67835, 67839, 1]];\n static Hebrew = [[1425, 1479, 1], [1488, 1514, 1], [1519, 1524, 1], [64285, 64310, 1], [64312, 64316, 1], [64318, 64320, 2], [64321, 64323, 2], [64324, 64326, 2], [64327, 64335, 1]];\n static Hiragana = [[12353, 12438, 1], [12445, 12447, 1], [110593, 110879, 1], [110898, 110928, 30], [110929, 110930, 1], [127488, 127488, 1]];\n static Imperial_Aramaic = [[67648, 67669, 1], [67671, 67679, 1]];\n static Inherited = [[768, 879, 1], [1157, 1158, 1], [1611, 1621, 1], [1648, 2385, 737], [2386, 2388, 1], [6832, 6862, 1], [7376, 7378, 1], [7380, 7392, 1], [7394, 7400, 1], [7405, 7412, 7], [7416, 7417, 1], [7616, 7679, 1], [8204, 8205, 1], [8400, 8432, 1], [12330, 12333, 1], [12441, 12442, 1], [65024, 65039, 1], [65056, 65069, 1], [66045, 66272, 227], [70459, 118528, 48069], [118529, 118573, 1], [118576, 118598, 1], [119143, 119145, 1], [119163, 119170, 1], [119173, 119179, 1], [119210, 119213, 1], [917760, 917999, 1]];\n static foldInherited = [[921, 953, 32], [8126, 8126, 1]];\n static Inscriptional_Pahlavi = [[68448, 68466, 1], [68472, 68479, 1]];\n static Inscriptional_Parthian = [[68416, 68437, 1], [68440, 68447, 1]];\n static Javanese = [[43392, 43469, 1], [43472, 43481, 1], [43486, 43487, 1]];\n static Kaithi = [[69760, 69826, 1], [69837, 69837, 1]];\n static Kannada = [[3200, 3212, 1], [3214, 3216, 1], [3218, 3240, 1], [3242, 3251, 1], [3253, 3257, 1], [3260, 3268, 1], [3270, 3272, 1], [3274, 3277, 1], [3285, 3286, 1], [3293, 3294, 1], [3296, 3299, 1], [3302, 3311, 1], [3313, 3315, 1]];\n static Katakana = [[12449, 12538, 1], [12541, 12543, 1], [12784, 12799, 1], [13008, 13054, 1], [13056, 13143, 1], [65382, 65391, 1], [65393, 65437, 1], [110576, 110579, 1], [110581, 110587, 1], [110589, 110590, 1], [110592, 110880, 288], [110881, 110882, 1], [110933, 110948, 15], [110949, 110951, 1]];\n static Kawi = [[73472, 73488, 1], [73490, 73530, 1], [73534, 73562, 1]];\n static Kayah_Li = [[43264, 43309, 1], [43311, 43311, 1]];\n static Kharoshthi = [[68096, 68099, 1], [68101, 68102, 1], [68108, 68115, 1], [68117, 68119, 1], [68121, 68149, 1], [68152, 68154, 1], [68159, 68168, 1], [68176, 68184, 1]];\n static Khitan_Small_Script = [[94180, 101120, 6940], [101121, 101589, 1], [101631, 101631, 1]];\n static Khmer = [[6016, 6109, 1], [6112, 6121, 1], [6128, 6137, 1], [6624, 6655, 1]];\n static Khojki = [[70144, 70161, 1], [70163, 70209, 1]];\n static Khudawadi = [[70320, 70378, 1], [70384, 70393, 1]];\n static Kirat_Rai = [[93504, 93561, 1]];\n static Lao = [[3713, 3714, 1], [3716, 3718, 2], [3719, 3722, 1], [3724, 3747, 1], [3749, 3751, 2], [3752, 3773, 1], [3776, 3780, 1], [3782, 3784, 2], [3785, 3790, 1], [3792, 3801, 1], [3804, 3807, 1]];\n static Latin = [[65, 90, 1], [97, 122, 1], [170, 186, 16], [192, 214, 1], [216, 246, 1], [248, 696, 1], [736, 740, 1], [7424, 7461, 1], [7468, 7516, 1], [7522, 7525, 1], [7531, 7543, 1], [7545, 7614, 1], [7680, 7935, 1], [8305, 8319, 14], [8336, 8348, 1], [8490, 8491, 1], [8498, 8526, 28], [8544, 8584, 1], [11360, 11391, 1], [42786, 42887, 1], [42891, 42957, 1], [42960, 42961, 1], [42963, 42965, 2], [42966, 42972, 1], [42994, 43007, 1], [43824, 43866, 1], [43868, 43876, 1], [43878, 43881, 1], [64256, 64262, 1], [65313, 65338, 1], [65345, 65370, 1], [67456, 67461, 1], [67463, 67504, 1], [67506, 67514, 1], [122624, 122654, 1], [122661, 122666, 1]];\n static Lepcha = [[7168, 7223, 1], [7227, 7241, 1], [7245, 7247, 1]];\n static Limbu = [[6400, 6430, 1], [6432, 6443, 1], [6448, 6459, 1], [6464, 6468, 4], [6469, 6479, 1]];\n static Linear_A = [[67072, 67382, 1], [67392, 67413, 1], [67424, 67431, 1]];\n static Linear_B = [[65536, 65547, 1], [65549, 65574, 1], [65576, 65594, 1], [65596, 65597, 1], [65599, 65613, 1], [65616, 65629, 1], [65664, 65786, 1]];\n static Lisu = [[42192, 42239, 1], [73648, 73648, 1]];\n static Lycian = [[66176, 66204, 1]];\n static Lydian = [[67872, 67897, 1], [67903, 67903, 1]];\n static Mahajani = [[69968, 70006, 1]];\n static Makasar = [[73440, 73464, 1]];\n static Malayalam = [[3328, 3340, 1], [3342, 3344, 1], [3346, 3396, 1], [3398, 3400, 1], [3402, 3407, 1], [3412, 3427, 1], [3430, 3455, 1]];\n static Mandaic = [[2112, 2139, 1], [2142, 2142, 1]];\n static Manichaean = [[68288, 68326, 1], [68331, 68342, 1]];\n static Marchen = [[72816, 72847, 1], [72850, 72871, 1], [72873, 72886, 1]];\n static Masaram_Gondi = [[72960, 72966, 1], [72968, 72969, 1], [72971, 73014, 1], [73018, 73020, 2], [73021, 73023, 2], [73024, 73031, 1], [73040, 73049, 1]];\n static Medefaidrin = [[93760, 93850, 1]];\n static Meetei_Mayek = [[43744, 43766, 1], [43968, 44013, 1], [44016, 44025, 1]];\n static Mende_Kikakui = [[124928, 125124, 1], [125127, 125142, 1]];\n static Meroitic_Cursive = [[68000, 68023, 1], [68028, 68047, 1], [68050, 68095, 1]];\n static Meroitic_Hieroglyphs = [[67968, 67999, 1]];\n static Miao = [[93952, 94026, 1], [94031, 94087, 1], [94095, 94111, 1]];\n static Modi = [[71168, 71236, 1], [71248, 71257, 1]];\n static Mongolian = [[6144, 6145, 1], [6148, 6150, 2], [6151, 6169, 1], [6176, 6264, 1], [6272, 6314, 1], [71264, 71276, 1]];\n static Mro = [[92736, 92766, 1], [92768, 92777, 1], [92782, 92783, 1]];\n static Multani = [[70272, 70278, 1], [70280, 70282, 2], [70283, 70285, 1], [70287, 70301, 1], [70303, 70313, 1]];\n static Myanmar = [[4096, 4255, 1], [43488, 43518, 1], [43616, 43647, 1], [71376, 71395, 1]];\n static Nabataean = [[67712, 67742, 1], [67751, 67759, 1]];\n static Nag_Mundari = [[124112, 124153, 1]];\n static Nandinagari = [[72096, 72103, 1], [72106, 72151, 1], [72154, 72164, 1]];\n static New_Tai_Lue = [[6528, 6571, 1], [6576, 6601, 1], [6608, 6618, 1], [6622, 6623, 1]];\n static Newa = [[70656, 70747, 1], [70749, 70753, 1]];\n static Nko = [[1984, 2042, 1], [2045, 2047, 1]];\n static Nushu = [[94177, 110960, 16783], [110961, 111355, 1]];\n static Nyiakeng_Puachue_Hmong = [[123136, 123180, 1], [123184, 123197, 1], [123200, 123209, 1], [123214, 123215, 1]];\n static Ogham = [[5760, 5788, 1]];\n static Ol_Chiki = [[7248, 7295, 1]];\n static Ol_Onal = [[124368, 124410, 1], [124415, 124415, 1]];\n static Old_Hungarian = [[68736, 68786, 1], [68800, 68850, 1], [68858, 68863, 1]];\n static Old_Italic = [[66304, 66339, 1], [66349, 66351, 1]];\n static Old_North_Arabian = [[68224, 68255, 1]];\n static Old_Permic = [[66384, 66426, 1]];\n static Old_Persian = [[66464, 66499, 1], [66504, 66517, 1]];\n static Old_Sogdian = [[69376, 69415, 1]];\n static Old_South_Arabian = [[68192, 68223, 1]];\n static Old_Turkic = [[68608, 68680, 1]];\n static Old_Uyghur = [[69488, 69513, 1]];\n static Oriya = [[2817, 2819, 1], [2821, 2828, 1], [2831, 2832, 1], [2835, 2856, 1], [2858, 2864, 1], [2866, 2867, 1], [2869, 2873, 1], [2876, 2884, 1], [2887, 2888, 1], [2891, 2893, 1], [2901, 2903, 1], [2908, 2909, 1], [2911, 2915, 1], [2918, 2935, 1]];\n static Osage = [[66736, 66771, 1], [66776, 66811, 1]];\n static Osmanya = [[66688, 66717, 1], [66720, 66729, 1]];\n static Pahawh_Hmong = [[92928, 92997, 1], [93008, 93017, 1], [93019, 93025, 1], [93027, 93047, 1], [93053, 93071, 1]];\n static Palmyrene = [[67680, 67711, 1]];\n static Pau_Cin_Hau = [[72384, 72440, 1]];\n static Phags_Pa = [[43072, 43127, 1]];\n static Phoenician = [[67840, 67867, 1], [67871, 67871, 1]];\n static Psalter_Pahlavi = [[68480, 68497, 1], [68505, 68508, 1], [68521, 68527, 1]];\n static Rejang = [[43312, 43347, 1], [43359, 43359, 1]];\n static Runic = [[5792, 5866, 1], [5870, 5880, 1]];\n static Samaritan = [[2048, 2093, 1], [2096, 2110, 1]];\n static Saurashtra = [[43136, 43205, 1], [43214, 43225, 1]];\n static Sharada = [[70016, 70111, 1]];\n static Shavian = [[66640, 66687, 1]];\n static Siddham = [[71040, 71093, 1], [71096, 71133, 1]];\n static SignWriting = [[120832, 121483, 1], [121499, 121503, 1], [121505, 121519, 1]];\n static Sinhala = [[3457, 3459, 1], [3461, 3478, 1], [3482, 3505, 1], [3507, 3515, 1], [3517, 3520, 3], [3521, 3526, 1], [3530, 3535, 5], [3536, 3540, 1], [3542, 3544, 2], [3545, 3551, 1], [3558, 3567, 1], [3570, 3572, 1], [70113, 70132, 1]];\n static Sogdian = [[69424, 69465, 1]];\n static Sora_Sompeng = [[69840, 69864, 1], [69872, 69881, 1]];\n static Soyombo = [[72272, 72354, 1]];\n static Sundanese = [[7040, 7103, 1], [7360, 7367, 1]];\n static Sunuwar = [[72640, 72673, 1], [72688, 72697, 1]];\n static Syloti_Nagri = [[43008, 43052, 1]];\n static Syriac = [[1792, 1805, 1], [1807, 1866, 1], [1869, 1871, 1], [2144, 2154, 1]];\n static Tagalog = [[5888, 5909, 1], [5919, 5919, 1]];\n static Tagbanwa = [[5984, 5996, 1], [5998, 6000, 1], [6002, 6003, 1]];\n static Tai_Le = [[6480, 6509, 1], [6512, 6516, 1]];\n static Tai_Tham = [[6688, 6750, 1], [6752, 6780, 1], [6783, 6793, 1], [6800, 6809, 1], [6816, 6829, 1]];\n static Tai_Viet = [[43648, 43714, 1], [43739, 43743, 1]];\n static Takri = [[71296, 71353, 1], [71360, 71369, 1]];\n static Tamil = [[2946, 2947, 1], [2949, 2954, 1], [2958, 2960, 1], [2962, 2965, 1], [2969, 2970, 1], [2972, 2974, 2], [2975, 2979, 4], [2980, 2984, 4], [2985, 2986, 1], [2990, 3001, 1], [3006, 3010, 1], [3014, 3016, 1], [3018, 3021, 1], [3024, 3031, 7], [3046, 3066, 1], [73664, 73713, 1], [73727, 73727, 1]];\n static Tangsa = [[92784, 92862, 1], [92864, 92873, 1]];\n static Tangut = [[94176, 94208, 32], [94209, 100343, 1], [100352, 101119, 1], [101632, 101640, 1]];\n static Telugu = [[3072, 3084, 1], [3086, 3088, 1], [3090, 3112, 1], [3114, 3129, 1], [3132, 3140, 1], [3142, 3144, 1], [3146, 3149, 1], [3157, 3158, 1], [3160, 3162, 1], [3165, 3168, 3], [3169, 3171, 1], [3174, 3183, 1], [3191, 3199, 1]];\n static Thaana = [[1920, 1969, 1]];\n static Thai = [[3585, 3642, 1], [3648, 3675, 1]];\n static Tibetan = [[3840, 3911, 1], [3913, 3948, 1], [3953, 3991, 1], [3993, 4028, 1], [4030, 4044, 1], [4046, 4052, 1], [4057, 4058, 1]];\n static Tifinagh = [[11568, 11623, 1], [11631, 11632, 1], [11647, 11647, 1]];\n static Tirhuta = [[70784, 70855, 1], [70864, 70873, 1]];\n static Todhri = [[67008, 67059, 1]];\n static Toto = [[123536, 123566, 1]];\n static Tulu_Tigalari = [[70528, 70537, 1], [70539, 70542, 3], [70544, 70581, 1], [70583, 70592, 1], [70594, 70597, 3], [70599, 70602, 1], [70604, 70613, 1], [70615, 70616, 1], [70625, 70626, 1]];\n static Ugaritic = [[66432, 66461, 1], [66463, 66463, 1]];\n static Vai = [[42240, 42539, 1]];\n static Vithkuqi = [[66928, 66938, 1], [66940, 66954, 1], [66956, 66962, 1], [66964, 66965, 1], [66967, 66977, 1], [66979, 66993, 1], [66995, 67001, 1], [67003, 67004, 1]];\n static Wancho = [[123584, 123641, 1], [123647, 123647, 1]];\n static Warang_Citi = [[71840, 71922, 1], [71935, 71935, 1]];\n static Yezidi = [[69248, 69289, 1], [69291, 69293, 1], [69296, 69297, 1]];\n static Yi = [[40960, 42124, 1], [42128, 42182, 1]];\n static Zanabazar_Square = [[72192, 72263, 1]];\n static CATEGORIES = (() => new Map([['C', UnicodeTables.C], ['Cc', UnicodeTables.Cc], ['Cf', UnicodeTables.Cf], ['Co', UnicodeTables.Co], ['Cs', UnicodeTables.Cs], ['L', UnicodeTables.L], ['Ll', UnicodeTables.Ll], ['Lm', UnicodeTables.Lm], ['Lo', UnicodeTables.Lo], ['Lt', UnicodeTables.Lt], ['Lu', UnicodeTables.Lu], ['M', UnicodeTables.M], ['Mc', UnicodeTables.Mc], ['Me', UnicodeTables.Me], ['Mn', UnicodeTables.Mn], ['N', UnicodeTables.N], ['Nd', UnicodeTables.Nd], ['Nl', UnicodeTables.Nl], ['No', UnicodeTables.No], ['P', UnicodeTables.P], ['Pc', UnicodeTables.Pc], ['Pd', UnicodeTables.Pd], ['Pe', UnicodeTables.Pe], ['Pf', UnicodeTables.Pf], ['Pi', UnicodeTables.Pi], ['Po', UnicodeTables.Po], ['Ps', UnicodeTables.Ps], ['S', UnicodeTables.S], ['Sc', UnicodeTables.Sc], ['Sk', UnicodeTables.Sk], ['Sm', UnicodeTables.Sm], ['So', UnicodeTables.So], ['Z', UnicodeTables.Z], ['Zl', UnicodeTables.Zl], ['Zp', UnicodeTables.Zp], ['Zs', UnicodeTables.Zs]]))();\n static SCRIPTS = (() => new Map([['Adlam', UnicodeTables.Adlam], ['Ahom', UnicodeTables.Ahom], ['Anatolian_Hieroglyphs', UnicodeTables.Anatolian_Hieroglyphs], ['Arabic', UnicodeTables.Arabic], ['Armenian', UnicodeTables.Armenian], ['Avestan', UnicodeTables.Avestan], ['Balinese', UnicodeTables.Balinese], ['Bamum', UnicodeTables.Bamum], ['Bassa_Vah', UnicodeTables.Bassa_Vah], ['Batak', UnicodeTables.Batak], ['Bengali', UnicodeTables.Bengali], ['Bhaiksuki', UnicodeTables.Bhaiksuki], ['Bopomofo', UnicodeTables.Bopomofo], ['Brahmi', UnicodeTables.Brahmi], ['Braille', UnicodeTables.Braille], ['Buginese', UnicodeTables.Buginese], ['Buhid', UnicodeTables.Buhid], ['Canadian_Aboriginal', UnicodeTables.Canadian_Aboriginal], ['Carian', UnicodeTables.Carian], ['Caucasian_Albanian', UnicodeTables.Caucasian_Albanian], ['Chakma', UnicodeTables.Chakma], ['Cham', UnicodeTables.Cham], ['Cherokee', UnicodeTables.Cherokee], ['Chorasmian', UnicodeTables.Chorasmian], ['Common', UnicodeTables.Common], ['Coptic', UnicodeTables.Coptic], ['Cuneiform', UnicodeTables.Cuneiform], ['Cypriot', UnicodeTables.Cypriot], ['Cypro_Minoan', UnicodeTables.Cypro_Minoan], ['Cyrillic', UnicodeTables.Cyrillic], ['Deseret', UnicodeTables.Deseret], ['Devanagari', UnicodeTables.Devanagari], ['Dives_Akuru', UnicodeTables.Dives_Akuru], ['Dogra', UnicodeTables.Dogra], ['Duployan', UnicodeTables.Duployan], ['Egyptian_Hieroglyphs', UnicodeTables.Egyptian_Hieroglyphs], ['Elbasan', UnicodeTables.Elbasan], ['Elymaic', UnicodeTables.Elymaic], ['Ethiopic', UnicodeTables.Ethiopic], ['Garay', UnicodeTables.Garay], ['Georgian', UnicodeTables.Georgian], ['Glagolitic', UnicodeTables.Glagolitic], ['Gothic', UnicodeTables.Gothic], ['Grantha', UnicodeTables.Grantha], ['Greek', UnicodeTables.Greek], ['Gujarati', UnicodeTables.Gujarati], ['Gunjala_Gondi', UnicodeTables.Gunjala_Gondi], ['Gurmukhi', UnicodeTables.Gurmukhi], ['Gurung_Khema', UnicodeTables.Gurung_Khema], ['Han', UnicodeTables.Han], ['Hangul', UnicodeTables.Hangul], ['Hanifi_Rohingya', UnicodeTables.Hanifi_Rohingya], ['Hanunoo', UnicodeTables.Hanunoo], ['Hatran', UnicodeTables.Hatran], ['Hebrew', UnicodeTables.Hebrew], ['Hiragana', UnicodeTables.Hiragana], ['Imperial_Aramaic', UnicodeTables.Imperial_Aramaic], ['Inherited', UnicodeTables.Inherited], ['Inscriptional_Pahlavi', UnicodeTables.Inscriptional_Pahlavi], ['Inscriptional_Parthian', UnicodeTables.Inscriptional_Parthian], ['Javanese', UnicodeTables.Javanese], ['Kaithi', UnicodeTables.Kaithi], ['Kannada', UnicodeTables.Kannada], ['Katakana', UnicodeTables.Katakana], ['Kawi', UnicodeTables.Kawi], ['Kayah_Li', UnicodeTables.Kayah_Li], ['Kharoshthi', UnicodeTables.Kharoshthi], ['Khitan_Small_Script', UnicodeTables.Khitan_Small_Script], ['Khmer', UnicodeTables.Khmer], ['Khojki', UnicodeTables.Khojki], ['Khudawadi', UnicodeTables.Khudawadi], ['Kirat_Rai', UnicodeTables.Kirat_Rai], ['Lao', UnicodeTables.Lao], ['Latin', UnicodeTables.Latin], ['Lepcha', UnicodeTables.Lepcha], ['Limbu', UnicodeTables.Limbu], ['Linear_A', UnicodeTables.Linear_A], ['Linear_B', UnicodeTables.Linear_B], ['Lisu', UnicodeTables.Lisu], ['Lycian', UnicodeTables.Lycian], ['Lydian', UnicodeTables.Lydian], ['Mahajani', UnicodeTables.Mahajani], ['Makasar', UnicodeTables.Makasar], ['Malayalam', UnicodeTables.Malayalam], ['Mandaic', UnicodeTables.Mandaic], ['Manichaean', UnicodeTables.Manichaean], ['Marchen', UnicodeTables.Marchen], ['Masaram_Gondi', UnicodeTables.Masaram_Gondi], ['Medefaidrin', UnicodeTables.Medefaidrin], ['Meetei_Mayek', UnicodeTables.Meetei_Mayek], ['Mende_Kikakui', UnicodeTables.Mende_Kikakui], ['Meroitic_Cursive', UnicodeTables.Meroitic_Cursive], ['Meroitic_Hieroglyphs', UnicodeTables.Meroitic_Hieroglyphs], ['Miao', UnicodeTables.Miao], ['Modi', UnicodeTables.Modi], ['Mongolian', UnicodeTables.Mongolian], ['Mro', UnicodeTables.Mro], ['Multani', UnicodeTables.Multani], ['Myanmar', UnicodeTables.Myanmar], ['Nabataean', UnicodeTables.Nabataean], ['Nag_Mundari', UnicodeTables.Nag_Mundari], ['Nandinagari', UnicodeTables.Nandinagari], ['New_Tai_Lue', UnicodeTables.New_Tai_Lue], ['Newa', UnicodeTables.Newa], ['Nko', UnicodeTables.Nko], ['Nushu', UnicodeTables.Nushu], ['Nyiakeng_Puachue_Hmong', UnicodeTables.Nyiakeng_Puachue_Hmong], ['Ogham', UnicodeTables.Ogham], ['Ol_Chiki', UnicodeTables.Ol_Chiki], ['Ol_Onal', UnicodeTables.Ol_Onal], ['Old_Hungarian', UnicodeTables.Old_Hungarian], ['Old_Italic', UnicodeTables.Old_Italic], ['Old_North_Arabian', UnicodeTables.Old_North_Arabian], ['Old_Permic', UnicodeTables.Old_Permic], ['Old_Persian', UnicodeTables.Old_Persian], ['Old_Sogdian', UnicodeTables.Old_Sogdian], ['Old_South_Arabian', UnicodeTables.Old_South_Arabian], ['Old_Turkic', UnicodeTables.Old_Turkic], ['Old_Uyghur', UnicodeTables.Old_Uyghur], ['Oriya', UnicodeTables.Oriya], ['Osage', UnicodeTables.Osage], ['Osmanya', UnicodeTables.Osmanya], ['Pahawh_Hmong', UnicodeTables.Pahawh_Hmong], ['Palmyrene', UnicodeTables.Palmyrene], ['Pau_Cin_Hau', UnicodeTables.Pau_Cin_Hau], ['Phags_Pa', UnicodeTables.Phags_Pa], ['Phoenician', UnicodeTables.Phoenician], ['Psalter_Pahlavi', UnicodeTables.Psalter_Pahlavi], ['Rejang', UnicodeTables.Rejang], ['Runic', UnicodeTables.Runic], ['Samaritan', UnicodeTables.Samaritan], ['Saurashtra', UnicodeTables.Saurashtra], ['Sharada', UnicodeTables.Sharada], ['Shavian', UnicodeTables.Shavian], ['Siddham', UnicodeTables.Siddham], ['SignWriting', UnicodeTables.SignWriting], ['Sinhala', UnicodeTables.Sinhala], ['Sogdian', UnicodeTables.Sogdian], ['Sora_Sompeng', UnicodeTables.Sora_Sompeng], ['Soyombo', UnicodeTables.Soyombo], ['Sundanese', UnicodeTables.Sundanese], ['Sunuwar', UnicodeTables.Sunuwar], ['Syloti_Nagri', UnicodeTables.Syloti_Nagri], ['Syriac', UnicodeTables.Syriac], ['Tagalog', UnicodeTables.Tagalog], ['Tagbanwa', UnicodeTables.Tagbanwa], ['Tai_Le', UnicodeTables.Tai_Le], ['Tai_Tham', UnicodeTables.Tai_Tham], ['Tai_Viet', UnicodeTables.Tai_Viet], ['Takri', UnicodeTables.Takri], ['Tamil', UnicodeTables.Tamil], ['Tangsa', UnicodeTables.Tangsa], ['Tangut', UnicodeTables.Tangut], ['Telugu', UnicodeTables.Telugu], ['Thaana', UnicodeTables.Thaana], ['Thai', UnicodeTables.Thai], ['Tibetan', UnicodeTables.Tibetan], ['Tifinagh', UnicodeTables.Tifinagh], ['Tirhuta', UnicodeTables.Tirhuta], ['Todhri', UnicodeTables.Todhri], ['Toto', UnicodeTables.Toto], ['Tulu_Tigalari', UnicodeTables.Tulu_Tigalari], ['Ugaritic', UnicodeTables.Ugaritic], ['Vai', UnicodeTables.Vai], ['Vithkuqi', UnicodeTables.Vithkuqi], ['Wancho', UnicodeTables.Wancho], ['Warang_Citi', UnicodeTables.Warang_Citi], ['Yezidi', UnicodeTables.Yezidi], ['Yi', UnicodeTables.Yi], ['Zanabazar_Square', UnicodeTables.Zanabazar_Square]]))();\n static FOLD_CATEGORIES = (() => new Map([['L', UnicodeTables.foldL], ['Ll', UnicodeTables.foldLl], ['Lt', UnicodeTables.foldLt], ['Lu', UnicodeTables.foldLu], ['M', UnicodeTables.foldM], ['Mn', UnicodeTables.foldMn]]))();\n static FOLD_SCRIPT = (() => new Map([['Common', UnicodeTables.foldCommon], ['Greek', UnicodeTables.foldGreek], ['Inherited', UnicodeTables.foldInherited]]))();\n}\n\n/**\n * Utilities for dealing with Unicode better than JS does.\n */\nclass Unicode {\n // The highest legal rune value.\n static MAX_RUNE = 0x10ffff;\n // The highest legal ASCII value.\n static MAX_ASCII = 0x7f;\n // The highest legal Latin-1 value.\n static MAX_LATIN1 = 0xff;\n // The highest legal Basic Multilingual Plane (BMP) value.\n static MAX_BMP = 0xffff;\n // Minimum and maximum runes involved in folding.\n // Checked during test.\n static MIN_FOLD = 0x0041;\n static MAX_FOLD = 0x1e943;\n\n // is32 uses binary search to test whether rune is in the specified\n // slice of 32-bit ranges.\n static is32(ranges, r) {\n // binary search over ranges\n let lo = 0;\n let hi = ranges.length;\n while (lo < hi) {\n let m = lo + Math.floor((hi - lo) / 2);\n let range = ranges[m];\n if (range[0] <= r && r <= range[1]) {\n return (r - range[0]) % range[2] === 0;\n }\n if (r < range[0]) {\n hi = m;\n } else {\n lo = m + 1;\n }\n }\n return false;\n }\n\n // is tests whether rune is in the specified table of ranges.\n static is(ranges, r) {\n // common case: rune is ASCII or Latin-1, so use linear search.\n if (r <= this.MAX_LATIN1) {\n for (let range of ranges) {\n // range = [lo, hi, stride]\n if (r > range[1]) {\n continue;\n }\n if (r < range[0]) {\n return false;\n }\n return (r - range[0]) % range[2] === 0;\n }\n return false;\n }\n return ranges.length > 0 && r >= ranges[0][0] && this.is32(ranges, r);\n }\n\n // isUpper reports whether the rune is an upper case letter.\n static isUpper(r) {\n if (r <= this.MAX_LATIN1) {\n const s = String.fromCodePoint(r);\n return s.toUpperCase() === s && s.toLowerCase() !== s;\n }\n return this.is(UnicodeTables.Upper, r);\n }\n\n // isPrint reports whether the rune is printable (Unicode L/M/N/P/S or ' ').\n static isPrint(r) {\n if (r <= this.MAX_LATIN1) {\n return r >= 0x20 && r < 0x7f || r >= 0xa1 && r !== 0xad;\n }\n return this.is(UnicodeTables.L, r) || this.is(UnicodeTables.M, r) || this.is(UnicodeTables.N, r) || this.is(UnicodeTables.P, r) || this.is(UnicodeTables.S, r);\n }\n\n // simpleFold iterates over Unicode code points equivalent under\n // the Unicode-defined simple case folding. Among the code points\n // equivalent to rune (including rune itself), SimpleFold returns the\n // smallest r >= rune if one exists, or else the smallest r >= 0.\n //\n // For example:\n // SimpleFold('A') = 'a'\n // SimpleFold('a') = 'A'\n //\n // SimpleFold('K') = 'k'\n // SimpleFold('k') = '\\u212A' (Kelvin symbol, K)\n // SimpleFold('\\u212A') = 'K'\n //\n // SimpleFold('1') = '1'\n //\n // Derived from Go's unicode.SimpleFold.\n //\n static simpleFold(r) {\n // Consult caseOrbit table for special cases.\n if (UnicodeTables.CASE_ORBIT.has(r)) {\n return UnicodeTables.CASE_ORBIT.get(r);\n }\n\n // No folding specified. This is a one- or two-element\n // equivalence class containing rune and toLower(rune)\n // and toUpper(rune) if they are different from rune.\n const l = Codepoint.toLowerCase(r);\n if (l !== r) {\n return l;\n }\n return Codepoint.toUpperCase(r);\n }\n\n // equalsIgnoreCase performs case-insensitive equality comparison\n // on the given runes |r1| and |r2|, with special consideration\n // for the likely scenario where both runes are ASCII characters.\n // If non-ASCII, Unicode case folding will be performed on |r1|\n // to compare it to |r2|.\n // -1 is interpreted as the end-of-file mark.\n static equalsIgnoreCase(r1, r2) {\n // Runes already match, or one of them is EOF\n if (r1 < 0 || r2 < 0 || r1 === r2) {\n return true;\n }\n\n // Fast path for the common case where both runes are ASCII characters.\n // Coerces both runes to lowercase if applicable.\n if (r1 <= this.MAX_ASCII && r2 <= this.MAX_ASCII) {\n if (Codepoint.CODES.get('A') <= r1 && r1 <= Codepoint.CODES.get('Z')) {\n r1 |= 0x20;\n }\n if (Codepoint.CODES.get('A') <= r2 && r2 <= Codepoint.CODES.get('Z')) {\n r2 |= 0x20;\n }\n return r1 === r2;\n }\n\n // Fall back to full Unicode case folding otherwise.\n // Invariant: r1 must be non-negative\n for (let r = this.simpleFold(r1); r !== r1; r = this.simpleFold(r)) {\n if (r === r2) {\n return true;\n }\n }\n return false;\n }\n}\n\n/**\n * Various constants and helper utilities.\n */\nclass Utils {\n static METACHARACTERS = '\\\\.+*?()|[]{}^$';\n\n //// EMPTY_* flags\n static EMPTY_BEGIN_LINE = 0x01;\n static EMPTY_END_LINE = 0x02;\n static EMPTY_BEGIN_TEXT = 0x04;\n static EMPTY_END_TEXT = 0x08;\n static EMPTY_WORD_BOUNDARY = 0x10;\n static EMPTY_NO_WORD_BOUNDARY = 0x20;\n static EMPTY_ALL = (() => -1)();\n static emptyInts() {\n return [];\n }\n\n // Returns true iff |c| is an ASCII letter or decimal digit.\n static isalnum(c) {\n return Codepoint.CODES.get('0') <= c && c <= Codepoint.CODES.get('9') || Codepoint.CODES.get('a') <= c && c <= Codepoint.CODES.get('z') || Codepoint.CODES.get('A') <= c && c <= Codepoint.CODES.get('Z');\n }\n\n // If |c| is an ASCII hex digit, returns its value, otherwise -1.\n static unhex(c) {\n if (Codepoint.CODES.get('0') <= c && c <= Codepoint.CODES.get('9')) {\n return c - Codepoint.CODES.get('0');\n }\n if (Codepoint.CODES.get('a') <= c && c <= Codepoint.CODES.get('f')) {\n return c - Codepoint.CODES.get('a') + 10;\n }\n if (Codepoint.CODES.get('A') <= c && c <= Codepoint.CODES.get('F')) {\n return c - Codepoint.CODES.get('A') + 10;\n }\n return -1;\n }\n\n // Appends a RE2 literal to |out| for rune |rune|,\n // with regexp metacharacters escaped.\n static escapeRune(rune) {\n let out = '';\n if (Unicode.isPrint(rune)) {\n if (this.METACHARACTERS.indexOf(String.fromCodePoint(rune)) >= 0) {\n out += '\\\\';\n }\n out += String.fromCodePoint(rune);\n } else {\n switch (rune) {\n case Codepoint.CODES.get('\"'):\n // '\"'\n out += '\\\\\"';\n break;\n case Codepoint.CODES.get('\\\\'):\n // '\\\\'\n out += '\\\\\\\\';\n break;\n case Codepoint.CODES.get('\\t'):\n // '\\t'\n out += '\\\\t';\n break;\n case Codepoint.CODES.get('\\n'):\n // '\\n'\n out += '\\\\n';\n break;\n case Codepoint.CODES.get('\\r'):\n // '\\r'\n out += '\\\\r';\n break;\n case Codepoint.CODES.get('\\b'):\n // '\\b'\n out += '\\\\b';\n break;\n case Codepoint.CODES.get('\\f'):\n // '\\f'\n out += '\\\\f';\n break;\n default:\n {\n let s = rune.toString(16);\n if (rune < 0x100) {\n out += '\\\\x';\n if (s.length === 1) {\n out += '0';\n }\n out += s;\n } else {\n out += `\\\\x{${s}}`;\n }\n break;\n }\n }\n }\n return out;\n }\n\n // Returns the array of runes in the specified Java UTF-16 string.\n static stringToRunes(str) {\n return String(str).split('').map(s => s.codePointAt(0));\n }\n\n // Returns the Java UTF-16 string containing the single rune |r|.\n static runeToString(r) {\n return String.fromCodePoint(r);\n }\n\n // isWordRune reports whether r is consider a ``word character''\n // during the evaluation of the \\b and \\B zero-width assertions.\n // These assertions are ASCII-only: the word characters are [A-Za-z0-9_].\n static isWordRune(r) {\n return Codepoint.CODES.get('a') <= r && r <= Codepoint.CODES.get('z') || Codepoint.CODES.get('A') <= r && r <= Codepoint.CODES.get('Z') || Codepoint.CODES.get('0') <= r && r <= Codepoint.CODES.get('9') || r === Codepoint.CODES.get('_');\n }\n\n // emptyOpContext returns the zero-width assertions satisfied at the position\n // between the runes r1 and r2, a bitmask of EMPTY_* flags.\n // Passing r1 == -1 indicates that the position is at the beginning of the\n // text.\n // Passing r2 == -1 indicates that the position is at the end of the text.\n // eslint-disable-next-line no-warning-comments\n // TODO(adonovan): move to Machine.\n static emptyOpContext(r1, r2) {\n let op = 0;\n if (r1 < 0) {\n op |= this.EMPTY_BEGIN_TEXT | this.EMPTY_BEGIN_LINE;\n }\n if (r1 === Codepoint.CODES.get('\\n')) {\n op |= this.EMPTY_BEGIN_LINE;\n }\n if (r2 < 0) {\n op |= this.EMPTY_END_TEXT | this.EMPTY_END_LINE;\n }\n if (r2 === Codepoint.CODES.get('\\n')) {\n op |= this.EMPTY_END_LINE;\n }\n if (this.isWordRune(r1) !== this.isWordRune(r2)) {\n op |= this.EMPTY_WORD_BOUNDARY;\n } else {\n op |= this.EMPTY_NO_WORD_BOUNDARY;\n }\n return op;\n }\n\n /**\n * Returns a string that quotes all regular expression metacharacters inside the argument text;\n * the returned string is a regular expression matching the literal text. For example,\n * {@code quoteMeta(\"[foo]\").equals(\"\\\\[foo\\\\]\")}.\n * @param {string} s\n * @returns {string}\n */\n static quoteMeta(str) {\n return str.split('') // A char loop is correct because all metacharacters fit in one UTF-16 code.\n .map(s => {\n if (this.METACHARACTERS.indexOf(s) >= 0) {\n return `\\\\${s}`;\n }\n return s;\n }).join('');\n }\n static charCount(codePoint) {\n return codePoint > Unicode.MAX_BMP ? 2 : 1;\n }\n static stringToUtf8ByteArray(str) {\n if (globalThis.TextEncoder) {\n return Array.from(new TextEncoder().encode(str));\n } else {\n // fallback, if no TextEncoder\n let out = [],\n p = 0;\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n if (c < 128) {\n out[p++] = c;\n } else if (c < 2048) {\n out[p++] = c >> 6 | 192;\n out[p++] = c & 63 | 128;\n } else if ((c & 0xfc00) === 0xd800 && i + 1 < str.length && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\n out[p++] = c >> 18 | 240;\n out[p++] = c >> 12 & 63 | 128;\n out[p++] = c >> 6 & 63 | 128;\n out[p++] = c & 63 | 128;\n } else {\n out[p++] = c >> 12 | 224;\n out[p++] = c >> 6 & 63 | 128;\n out[p++] = c & 63 | 128;\n }\n }\n return out;\n }\n }\n static utf8ByteArrayToString(bytes) {\n if (globalThis.TextDecoder) {\n return new TextDecoder('utf-8').decode(new Uint8Array(bytes));\n } else {\n // fallback, if no TextDecoder\n let out = [],\n pos = 0,\n c = 0;\n while (pos < bytes.length) {\n let c1 = bytes[pos++];\n if (c1 < 128) {\n out[c++] = String.fromCharCode(c1);\n } else if (c1 > 191 && c1 < 224) {\n let c2 = bytes[pos++];\n out[c++] = String.fromCharCode((c1 & 31) << 6 | c2 & 63);\n } else if (c1 > 239 && c1 < 365) {\n // Surrogate Pair\n let c2 = bytes[pos++];\n let c3 = bytes[pos++];\n let c4 = bytes[pos++];\n let u = ((c1 & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63) - 0x10000;\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\n } else {\n let c2 = bytes[pos++];\n let c3 = bytes[pos++];\n out[c++] = String.fromCharCode((c1 & 15) << 12 | (c2 & 63) << 6 | c3 & 63);\n }\n }\n return out.join('');\n }\n }\n}\n\n// helper to create enums\n// example\n// Encoding[(Encoding['UTF_16'] = 0)] = 'UTF_16'\n// Encoding[(Encoding['UTF_8'] = 1)] = 'UTF_8'\nconst createEnum = (values = [], initNum = 0) => {\n const enumObject = {};\n for (let i = 0; i < values.length; i++) {\n const val = values[i];\n const keyVal = initNum + i;\n enumObject[val] = keyVal;\n enumObject[keyVal] = val;\n }\n return Object.freeze(enumObject);\n};\n\n/**\n * Abstract the representations of input text supplied to Matcher.\n */\nclass MatcherInputBase {\n static Encoding = (() => createEnum(['UTF_16', 'UTF_8']))();\n getEncoding() {\n throw Error('not implemented');\n }\n\n /**\n *\n * @returns {boolean}\n */\n isUTF8Encoding() {\n return this.getEncoding() === MatcherInputBase.Encoding.UTF_8;\n }\n\n /**\n *\n * @returns {boolean}\n */\n isUTF16Encoding() {\n return this.getEncoding() === MatcherInputBase.Encoding.UTF_16;\n }\n}\nclass Utf8MatcherInput extends MatcherInputBase {\n constructor(bytes = null) {\n super();\n this.bytes = bytes;\n }\n getEncoding() {\n return MatcherInputBase.Encoding.UTF_8;\n }\n /**\n *\n * @returns {string}\n */\n asCharSequence() {\n return Utils.utf8ByteArrayToString(this.bytes);\n }\n\n /**\n *\n * @returns {number[]}\n */\n asBytes() {\n return this.bytes;\n }\n\n /**\n *\n * @returns {number}\n */\n length() {\n return this.bytes.length;\n }\n}\nclass Utf16MatcherInput extends MatcherInputBase {\n constructor(charSequence = null) {\n super();\n this.charSequence = charSequence;\n }\n getEncoding() {\n return MatcherInputBase.Encoding.UTF_16;\n }\n\n /**\n *\n * @returns {string}\n */\n asCharSequence() {\n return this.charSequence;\n }\n\n /**\n *\n * @returns {number[]}\n */\n asBytes() {\n return this.charSequence.toString().split('').map(s => s.codePointAt(0));\n }\n\n /**\n *\n * @returns {number}\n */\n length() {\n return this.charSequence.length;\n }\n}\nclass MatcherInput {\n /**\n * Return the MatcherInput for UTF_16 encoding.\n * @returns {Utf16MatcherInput}\n */\n static utf16(charSequence) {\n return new Utf16MatcherInput(charSequence);\n }\n\n /**\n * Return the MatcherInput for UTF_8 encoding.\n * @returns {Utf8MatcherInput}\n */\n static utf8(input) {\n if (Array.isArray(input)) {\n return new Utf8MatcherInput(input);\n }\n return new Utf8MatcherInput(Utils.stringToUtf8ByteArray(input));\n }\n}\n\nclass RE2JSException extends Error {\n constructor(message) {\n super(message);\n this.name = 'RE2JSException';\n }\n}\n\n/**\n * An exception thrown by the parser if the pattern was invalid.\n */\nclass RE2JSSyntaxException extends RE2JSException {\n constructor(error, input = null) {\n let message = `error parsing regexp: ${error}`;\n if (input) {\n message += `: \\`${input}\\``;\n }\n super(message);\n this.name = 'RE2JSSyntaxException';\n this.message = message;\n this.error = error;\n this.input = input;\n }\n\n /**\n * Retrieves the description of the error.\n */\n getDescription() {\n return this.error;\n }\n\n /**\n * Retrieves the erroneous regular-expression pattern.\n */\n getPattern() {\n return this.input;\n }\n}\n\n/**\n * An exception thrown by the compiler\n */\nclass RE2JSCompileException extends RE2JSException {\n constructor(message) {\n super(message);\n this.name = 'RE2JSCompileException';\n }\n}\n\n/**\n * An exception thrown by using groups\n */\nclass RE2JSGroupException extends RE2JSException {\n constructor(message) {\n super(message);\n this.name = 'RE2JSGroupException';\n }\n}\n\n/**\n * An exception thrown by flags\n */\nclass RE2JSFlagsException extends RE2JSException {\n constructor(message) {\n super(message);\n this.name = 'RE2JSFlagsException';\n }\n}\n\n/**\n * A stateful iterator that interprets a regex {@code RE2JS} on a specific input.\n *\n * Conceptually, a Matcher consists of four parts:\n *
    \n *
  1. A compiled regular expression {@code RE2JS}, set at construction and fixed for the lifetime\n * of the matcher.
  2. \n *\n *
  3. The remainder of the input string, set at construction or {@link #reset()} and advanced by\n * each match operation such as {@link #find}, {@link #matches} or {@link #lookingAt}.
  4. \n *\n *
  5. The current match information, accessible via {@link #start}, {@link #end}, and\n * {@link #group}, and updated by each match operation.
  6. \n *\n *
  7. The append position, used and advanced by {@link #appendReplacement} and {@link #appendTail}\n * if performing a search and replace from the input to an external {@code StringBuffer}.\n *\n *
\n *\n *\n * @author rsc@google.com (Russ Cox)\n */\nclass Matcher {\n /**\n * Quotes '\\' and '$' in {@code s}, so that the returned string could be used in\n * {@link #appendReplacement} as a literal replacement of {@code s}.\n *\n * @param {string} str the string to be quoted\n * @returns {string} the quoted string\n */\n static quoteReplacement(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('$') < 0) {\n return str;\n }\n return str.split('').map(s => {\n const c = s.codePointAt(0);\n if (c === Codepoint.CODES['\\\\'] || c === Codepoint.CODES['$']) {\n return `\\\\${s}`;\n }\n return s;\n }).join('');\n }\n /**\n *\n * @param {RE2JS} pattern\n * @param {Utf8MatcherInput|Utf16MatcherInput|number[]|string} input\n */\n constructor(pattern, input) {\n if (pattern === null) {\n throw new Error('pattern is null');\n }\n // The pattern being matched.\n this.patternInput = pattern;\n const re2 = this.patternInput.re2();\n // The number of submatches (groups) in the pattern.\n this.patternGroupCount = re2.numberOfCapturingGroups();\n // The group indexes, in [start, end) pairs. Zeroth pair is overall match.\n this.groups = [];\n this.namedGroups = re2.namedGroups;\n this.numberOfInstructions = re2.numberOfInstructions();\n if (input instanceof MatcherInputBase) {\n this.resetMatcherInput(input);\n } else if (Array.isArray(input)) {\n this.resetMatcherInput(MatcherInput.utf8(input));\n } else {\n this.resetMatcherInput(MatcherInput.utf16(input));\n }\n }\n\n /**\n * Returns the {@code RE2JS} associated with this {@code Matcher}.\n * @returns {RE2JS}\n */\n pattern() {\n return this.patternInput;\n }\n\n /**\n * Resets the {@code Matcher}, rewinding input and discarding any match information.\n *\n * @returns {Matcher} the {@code Matcher} itself, for chained method calls\n */\n reset() {\n // The input length in UTF16 codes.\n this.matcherInputLength = this.matcherInput.length();\n // The append position: where the next append should start.\n this.appendPos = 0;\n // Is there a current match?\n this.hasMatch = false;\n // Have we found the submatches (groups) of the current match?\n // group[0], group[1] are set regardless.\n this.hasGroups = false;\n // The anchor flag to use when repeating the match to find subgroups.\n this.anchorFlag = 0;\n return this;\n }\n\n /**\n * Resets the {@code Matcher} and changes the input.\n * @returns {Matcher} the {@code Matcher} itself, for chained method calls\n */\n resetMatcherInput(input) {\n if (input === null) {\n throw new Error('input is null');\n }\n this.matcherInput = input;\n this.reset();\n return this;\n }\n\n /**\n * Returns the start of the named group of the most recent match, or -1 if the group was not\n * matched.\n * @param {string|number} [group=0]\n * @returns {string}\n */\n start(group = 0) {\n if (typeof group === 'string') {\n const groupInt = this.namedGroups[group];\n if (!Number.isFinite(groupInt)) {\n throw new RE2JSGroupException(`group '${group}' not found`);\n }\n group = groupInt;\n }\n this.loadGroup(group);\n return this.groups[2 * group];\n }\n\n /**\n * Returns the end of the named group of the most recent match, or -1 if the group was not\n * matched.\n * @param {string|number} [group=0]\n * @returns {string}\n */\n end(group = 0) {\n if (typeof group === 'string') {\n const groupInt = this.namedGroups[group];\n if (!Number.isFinite(groupInt)) {\n throw new RE2JSGroupException(`group '${group}' not found`);\n }\n group = groupInt;\n }\n this.loadGroup(group);\n return this.groups[2 * group + 1];\n }\n\n /**\n * Returns the program size of this pattern.\n *\n *

\n * Similar to the C++ implementation, the program size is a very approximate measure of a regexp's\n * \"cost\". Larger numbers are more expensive than smaller numbers.\n *

\n *\n * @returns {number} the program size of this pattern\n */\n programSize() {\n return this.numberOfInstructions;\n }\n\n /**\n * Returns the named group of the most recent match, or {@code null} if the group was not matched.\n * @param {string|number} [group=0]\n * @returns {string}\n */\n group(group = 0) {\n if (typeof group === 'string') {\n const groupInt = this.namedGroups[group];\n if (!Number.isFinite(groupInt)) {\n throw new RE2JSGroupException(`group '${group}' not found`);\n }\n group = groupInt;\n }\n const start = this.start(group);\n const end = this.end(group);\n if (start < 0 && end < 0) {\n return null;\n }\n return this.substring(start, end);\n }\n /**\n * Returns the number of subgroups in this pattern.\n *\n * @returns {number} the number of subgroups; the overall match (group 0) does not count\n */\n groupCount() {\n return this.patternGroupCount;\n }\n\n /**\n * Helper: finds subgroup information if needed for group.\n * @param {number} group\n * @private\n */\n loadGroup(group) {\n if (group < 0 || group > this.patternGroupCount) {\n throw new RE2JSGroupException(`Group index out of bounds: ${group}`);\n }\n if (!this.hasMatch) {\n throw new RE2JSGroupException('perhaps no match attempted');\n }\n if (group === 0 || this.hasGroups) {\n return;\n }\n let end = this.groups[1] + 1;\n if (end > this.matcherInputLength) {\n end = this.matcherInputLength;\n }\n const res = this.patternInput.re2().matchMachineInput(this.matcherInput, this.groups[0], end, this.anchorFlag, 1 + this.patternGroupCount);\n const ok = res[0];\n if (!ok) {\n throw new RE2JSGroupException('inconsistency in matching group data');\n }\n this.groups = res[1];\n this.hasGroups = true;\n }\n\n /**\n * Matches the entire input against the pattern (anchored start and end). If there is a match,\n * {@code matches} sets the match state to describe it.\n *\n * @returns {boolean} true if the entire input matches the pattern\n */\n matches() {\n return this.genMatch(0, RE2Flags.ANCHOR_BOTH);\n }\n\n /**\n * Matches the beginning of input against the pattern (anchored start). If there is a match,\n * {@code lookingAt} sets the match state to describe it.\n *\n * @returns {boolean} true if the beginning of the input matches the pattern\n */\n lookingAt() {\n return this.genMatch(0, RE2Flags.ANCHOR_START);\n }\n\n /**\n * Matches the input against the pattern (unanchored), starting at a specified position. If there\n * is a match, {@code find} sets the match state to describe it.\n *\n * @param {string|number} [start=null] the input position where the search begins\n * @returns {boolean} if it finds a match\n * @throws IndexOutOfBoundsException if start is not a valid input position\n */\n find(start = null) {\n if (start !== null) {\n if (start < 0 || start > this.matcherInputLength) {\n throw new RE2JSGroupException(`start index out of bounds: ${start}`);\n }\n this.reset();\n return this.genMatch(start, 0);\n }\n // no start\n start = 0;\n if (this.hasMatch) {\n start = this.groups[1];\n if (this.groups[0] === this.groups[1]) {\n start++;\n }\n }\n return this.genMatch(start, RE2Flags.UNANCHORED);\n }\n\n /**\n * Helper: does match starting at start, with RE2 anchor flag.\n * @param {number} startByte\n * @param {number} anchor\n * @returns {boolean}\n * @private\n */\n genMatch(startByte, anchor) {\n const res = this.patternInput.re2().matchMachineInput(this.matcherInput, startByte, this.matcherInputLength, anchor, 1);\n const ok = res[0];\n if (!ok) {\n return false;\n }\n this.groups = res[1];\n this.hasMatch = true;\n this.hasGroups = false;\n this.anchorFlag = anchor;\n return true;\n }\n\n /**\n * Helper: return substring for [start, end).\n * @param {number} start\n * @param {number} end\n * @returns {string}\n */\n substring(start, end) {\n if (this.matcherInput.isUTF8Encoding()) {\n return Utils.utf8ByteArrayToString(this.matcherInput.asBytes().slice(start, end));\n }\n return this.matcherInput.asCharSequence().substring(start, end).toString();\n }\n\n /**\n * Helper for Pattern: return input length.\n * @returns {number}\n */\n inputLength() {\n return this.matcherInputLength;\n }\n\n /**\n * Appends to result two strings: the text from the append position up to the beginning of the\n * most recent match, and then the replacement with submatch groups substituted for references of\n * the form {@code $n}, where {@code n} is the group number in decimal. It advances the append\n * position to where the most recent match ended.\n *\n * To embed a literal {@code $}, use \\$ (actually {@code \"\\\\$\"} with string escapes). The escape\n * is only necessary when {@code $} is followed by a digit, but it is always allowed. Only\n * {@code $} and {@code \\} need escaping, but any character can be escaped.\n *\n * The group number {@code n} in {@code $n} is always at least one digit and expands to use more\n * digits as long as the resulting number is a valid group number for this pattern. To cut it off\n * earlier, escape the first digit that should not be used.\n *\n * @param {string} replacement the replacement string\n * @param {boolean} [perlMode=false] activate perl/js mode (different behaviour for capture groups and special characters)\n * @returns {string}\n * @throws IllegalStateException if there was no most recent match\n * @throws IndexOutOfBoundsException if replacement refers to an invalid group\n * @private\n */\n appendReplacement(replacement, perlMode = false) {\n let res = '';\n const s = this.start();\n const e = this.end();\n if (this.appendPos < s) {\n res += this.substring(this.appendPos, s);\n }\n this.appendPos = e;\n res += perlMode ? this.appendReplacementInternalPerl(replacement) : this.appendReplacementInternal(replacement);\n return res;\n }\n\n /**\n * @param {string} replacement - the replacement string\n * @returns {string}\n * @private\n */\n appendReplacementInternal(replacement) {\n let res = '';\n let last = 0;\n const m = replacement.length;\n for (let i = 0; i < m - 1; i++) {\n if (replacement.codePointAt(i) === Codepoint.CODES.get('\\\\')) {\n if (last < i) {\n res += replacement.substring(last, i);\n }\n i++;\n last = i;\n continue;\n }\n if (replacement.codePointAt(i) === Codepoint.CODES.get('$')) {\n let c = replacement.codePointAt(i + 1);\n if (Codepoint.CODES.get('0') <= c && c <= Codepoint.CODES.get('9')) {\n let n = c - Codepoint.CODES.get('0');\n if (last < i) {\n res += replacement.substring(last, i);\n }\n for (i += 2; i < m; i++) {\n c = replacement.codePointAt(i);\n if (c < Codepoint.CODES.get('0') || c > Codepoint.CODES.get('9') || n * 10 + c - Codepoint.CODES.get('0') > this.patternGroupCount) {\n break;\n }\n n = n * 10 + c - Codepoint.CODES.get('0');\n }\n if (n > this.patternGroupCount) {\n throw new RE2JSGroupException(`n > number of groups: ${n}`);\n }\n const group = this.group(n);\n if (group !== null) {\n res += group;\n }\n last = i;\n i--;\n continue;\n } else if (c === Codepoint.CODES.get('{')) {\n if (last < i) {\n res += replacement.substring(last, i);\n }\n i++;\n let j = i + 1;\n while (j < replacement.length && replacement.codePointAt(j) !== Codepoint.CODES.get('}') && replacement.codePointAt(j) !== Codepoint.CODES.get(' ')) {\n j++;\n }\n if (j === replacement.length || replacement.codePointAt(j) !== Codepoint.CODES.get('}')) {\n throw new RE2JSGroupException(\"named capture group is missing trailing '}'\");\n }\n const groupName = replacement.substring(i + 1, j);\n res += this.group(groupName);\n last = j + 1;\n }\n }\n }\n if (last < m) {\n res += replacement.substring(last, m);\n }\n return res;\n }\n\n /**\n * @param {string} replacement - the replacement string\n * @returns {string}\n * @private\n */\n appendReplacementInternalPerl(replacement) {\n let res = '';\n let last = 0;\n const m = replacement.length;\n for (let i = 0; i < m - 1; i++) {\n if (replacement.codePointAt(i) === Codepoint.CODES.get('$')) {\n let c = replacement.codePointAt(i + 1);\n if (Codepoint.CODES.get('$') === c) {\n if (last < i) {\n res += replacement.substring(last, i);\n }\n res += '$';\n i++;\n last = i + 1;\n continue;\n } else if (Codepoint.CODES.get('&') === c) {\n if (last < i) {\n res += replacement.substring(last, i);\n }\n const group = this.group(0);\n if (group !== null) {\n res += group;\n } else {\n res += '$&';\n }\n i++;\n last = i + 1;\n continue;\n } else if (Codepoint.CODES.get('1') <= c && c <= Codepoint.CODES.get('9')) {\n let n = c - Codepoint.CODES.get('0');\n if (last < i) {\n res += replacement.substring(last, i);\n }\n for (i += 2; i < m; i++) {\n c = replacement.codePointAt(i);\n if (c < Codepoint.CODES.get('0') || c > Codepoint.CODES.get('9') || n * 10 + c - Codepoint.CODES.get('0') > this.patternGroupCount) {\n break;\n }\n n = n * 10 + c - Codepoint.CODES.get('0');\n }\n if (n > this.patternGroupCount) {\n res += `$${n}`;\n last = i;\n i--;\n continue;\n }\n const group = this.group(n);\n if (group !== null) {\n res += group;\n }\n last = i;\n i--;\n continue;\n } else if (c === Codepoint.CODES.get('<')) {\n if (last < i) {\n res += replacement.substring(last, i);\n }\n i++;\n let j = i + 1;\n while (j < replacement.length && replacement.codePointAt(j) !== Codepoint.CODES.get('>') && replacement.codePointAt(j) !== Codepoint.CODES.get(' ')) {\n j++;\n }\n if (j === replacement.length || replacement.codePointAt(j) !== Codepoint.CODES.get('>')) {\n res += replacement.substring(i - 1, j + 1);\n last = j + 1;\n continue;\n }\n const groupName = replacement.substring(i + 1, j);\n if (Object.prototype.hasOwnProperty.call(this.namedGroups, groupName)) {\n res += this.group(groupName);\n } else {\n res += `$<${groupName}>`;\n }\n last = j + 1;\n }\n }\n }\n if (last < m) {\n res += replacement.substring(last, m);\n }\n return res;\n }\n\n /**\n * Return the substring of the input from the append position to the end of the\n * input.\n * @returns {string}\n */\n appendTail() {\n return this.substring(this.appendPos, this.matcherInputLength);\n }\n\n /**\n * Returns the input with all matches replaced by {@code replacement}, interpreted as for\n * {@code appendReplacement}.\n *\n * @param {string} replacement - the replacement string\n * @param {boolean} [perlMode=false] - activate perl/js mode (different behaviour for capture groups and special characters)\n * @returns {string} the input string with the matches replaced\n * @throws IndexOutOfBoundsException if replacement refers to an invalid group and perlMode is false\n */\n replaceAll(replacement, perlMode = false) {\n return this.replace(replacement, true, perlMode);\n }\n\n /**\n * Returns the input with the first match replaced by {@code replacement}, interpreted as for\n * {@code appendReplacement}.\n *\n * @param {string} replacement - the replacement string\n * @param {boolean} [perlMode=false] - activate perl/js mode (different behaviour for capture groups and special characters)\n * @returns {string} the input string with the first match replaced\n * @throws IndexOutOfBoundsException if replacement refers to an invalid group and perlMode is false\n */\n replaceFirst(replacement, perlMode = false) {\n return this.replace(replacement, false, perlMode);\n }\n\n /**\n * Helper: replaceAll/replaceFirst hybrid.\n * @param {string} replacement - the replacement string\n * @param {boolean} [all=true] - replace all matches\n * @param {boolean} [perlMode=false] - activate perl/js mode (different behaviour for capture groups and special characters)\n * @returns {string}\n * @private\n */\n replace(replacement, all = true, perlMode = false) {\n let res = '';\n this.reset();\n while (this.find()) {\n res += this.appendReplacement(replacement, perlMode);\n if (!all) {\n break;\n }\n }\n res += this.appendTail();\n return res;\n }\n}\n\n/**\n * MachineInput abstracts different representations of the input text supplied to the Machine. It\n * provides one-character lookahead.\n */\nclass MachineInputBase {\n static EOF() {\n return -1 << 3;\n }\n\n // can we look ahead without losing info?\n canCheckPrefix() {\n return true;\n }\n\n // Returns the end position in the same units as step().\n endPos() {\n return this.end;\n }\n}\n\n// An implementation of MachineInput for UTF-8 byte arrays.\n// |pos| and |width| are byte indices.\nclass MachineUTF8Input extends MachineInputBase {\n constructor(bytes, start = 0, end = bytes.length) {\n super();\n this.bytes = bytes;\n this.start = start;\n this.end = end;\n }\n\n // Returns the rune at the specified index; the units are\n // unspecified, but could be UTF-8 byte, UTF-16 char, or rune\n // indices. Returns the width (in the same units) of the rune in\n // the lower 3 bits, and the rune (Unicode code point) in the high\n // bits. Never negative, except for EOF which is represented as -1\n // << 3 | 0.\n step(i) {\n i += this.start;\n if (i >= this.end) {\n return MachineInputBase.EOF();\n }\n let x = this.bytes[i++] & 255;\n if ((x & 128) === 0) {\n return x << 3 | 1;\n } else if ((x & 224) === 192) {\n x = x & 31;\n if (i >= this.end) {\n return MachineInputBase.EOF();\n }\n x = x << 6 | this.bytes[i++] & 63;\n return x << 3 | 2;\n } else if ((x & 240) === 224) {\n x = x & 15;\n if (i + 1 >= this.end) {\n return MachineInputBase.EOF();\n }\n x = x << 6 | this.bytes[i++] & 63;\n x = x << 6 | this.bytes[i++] & 63;\n return x << 3 | 3;\n } else {\n x = x & 7;\n if (i + 2 >= this.end) {\n return MachineInputBase.EOF();\n }\n x = x << 6 | this.bytes[i++] & 63;\n x = x << 6 | this.bytes[i++] & 63;\n x = x << 6 | this.bytes[i++] & 63;\n return x << 3 | 4;\n }\n }\n\n // Returns the index relative to |pos| at which |re2.prefix| is found\n // in this input stream, or a negative value if not found.\n index(re2, pos) {\n pos += this.start;\n const i = this.indexOf(this.bytes, re2.prefixUTF8, pos);\n return i < 0 ? i : i - pos;\n }\n\n // Returns a bitmask of EMPTY_* flags.\n context(pos) {\n pos += this.start;\n let r1 = -1;\n if (pos > this.start && pos <= this.end) {\n let start = pos - 1;\n r1 = this.bytes[start--];\n if (r1 >= 128) {\n let lim = pos - 4;\n if (lim < this.start) {\n lim = this.start;\n }\n while (start >= lim && (this.bytes[start] & 192) === 128) {\n start--;\n }\n if (start < this.start) {\n start = this.start;\n }\n r1 = this.step(start) >> 3;\n }\n }\n const r2 = pos < this.end ? this.step(pos) >> 3 : -1;\n return Utils.emptyOpContext(r1, r2);\n }\n\n // Returns the index of the first occurrence of array |target| within\n // array |source| after |fromIndex|, or -1 if not found.\n indexOf(source, target, fromIndex = 0) {\n let targetLength = target.length;\n if (targetLength === 0) {\n return -1;\n }\n let sourceLength = source.length;\n for (let i = fromIndex; i <= sourceLength - targetLength; i++) {\n for (let j = 0; j < targetLength; j++) {\n if (source[i + j] !== target[j]) {\n break;\n } else if (j === targetLength - 1) {\n return i;\n }\n }\n }\n return -1;\n }\n}\n\n// |pos| and |width| are in JS \"char\" units.\nclass MachineUTF16Input extends MachineInputBase {\n constructor(charSequence, start = 0, end = charSequence.length) {\n super();\n this.charSequence = charSequence;\n this.start = start;\n this.end = end;\n }\n\n // Returns the rune at the specified index; the units are\n // unspecified, but could be UTF-8 byte, UTF-16 char, or rune\n // indices. Returns the width (in the same units) of the rune in\n // the lower 3 bits, and the rune (Unicode code point) in the high\n // bits. Never negative, except for EOF which is represented as -1\n // << 3 | 0.\n step(pos) {\n pos += this.start;\n if (pos < this.end) {\n const rune = this.charSequence.codePointAt(pos);\n return rune << 3 | Utils.charCount(rune);\n } else {\n return MachineInputBase.EOF();\n }\n }\n\n // Returns the index relative to |pos| at which |re2.prefix| is found\n // in this input stream, or a negative value if not found.\n index(re2, pos) {\n pos += this.start;\n const i = this.charSequence.indexOf(re2.prefix, pos);\n return i < 0 ? i : i - pos;\n }\n\n // Returns a bitmask of EMPTY_* flags.\n context(pos) {\n pos += this.start;\n const r1 = pos > 0 && pos <= this.charSequence.length ? this.charSequence.codePointAt(pos - 1) : -1;\n const r2 = pos < this.charSequence.length ? this.charSequence.codePointAt(pos) : -1;\n return Utils.emptyOpContext(r1, r2);\n }\n}\nclass MachineInput {\n static fromUTF8(bytes, start = 0, end = bytes.length) {\n return new MachineUTF8Input(bytes, start, end);\n }\n static fromUTF16(charSequence, start = 0, end = charSequence.length) {\n return new MachineUTF16Input(charSequence, start, end);\n }\n}\n\n/**\n * A single instruction in the regular expression virtual machine.\n *\n * @see http://swtch.com/~rsc/regexp/regexp2.html\n */\nclass Inst {\n static ALT = 1;\n static ALT_MATCH = 2;\n static CAPTURE = 3;\n static EMPTY_WIDTH = 4;\n static FAIL = 5;\n static MATCH = 6;\n static NOP = 7;\n static RUNE = 8;\n static RUNE1 = 9;\n static RUNE_ANY = 10;\n static RUNE_ANY_NOT_NL = 11;\n static isRuneOp(op) {\n return Inst.RUNE <= op && op <= Inst.RUNE_ANY_NOT_NL;\n }\n\n // Returns an RE2 expression matching exactly |runes|.\n static escapeRunes(runes) {\n let out = '\"';\n for (let rune of runes) {\n out += Utils.escapeRune(rune);\n }\n out += '\"';\n return out;\n }\n constructor(op) {\n this.op = op;\n this.out = 0; // all but MATCH, FAIL\n this.arg = 0; // ALT, ALT_MATCH, CAPTURE, EMPTY_WIDTH\n // length==1 => exact match\n // otherwise a list of [lo,hi] pairs. hi is *inclusive*.\n this.runes = [];\n }\n\n // MatchRune returns true if the instruction matches (and consumes) r.\n // It should only be called when op == InstRune.\n matchRune(r) {\n // Special case: single-rune slice is from literal string, not char\n // class.\n if (this.runes.length === 1) {\n const r0 = this.runes[0];\n // If this pattern is case-insensitive, apply Unicode case folding to compare the two runes.\n // Note that this may result in a case-folding loop when executed,\n // so attempt to reduce the chance of that occurring\n // by performing case folding on |r0| from the pattern rather than |r| from the input.\n if ((this.arg & RE2Flags.FOLD_CASE) !== 0) {\n return Unicode.equalsIgnoreCase(r0, r);\n }\n return r === r0;\n }\n // Peek at the first few pairs.\n // Should handle ASCII well.\n for (let j = 0; j < this.runes.length && j <= 8; j += 2) {\n if (r < this.runes[j]) {\n return false;\n }\n if (r <= this.runes[j + 1]) {\n return true;\n }\n }\n // Otherwise binary search.\n let lo = 0;\n let hi = this.runes.length / 2 | 0;\n while (lo < hi) {\n const m = lo + ((hi - lo) / 2 | 0);\n const c = this.runes[2 * m];\n if (c <= r) {\n if (r <= this.runes[2 * m + 1]) {\n return true;\n }\n lo = m + 1;\n } else {\n hi = m;\n }\n }\n return false;\n }\n /**\n *\n * @returns {string}\n */\n toString() {\n switch (this.op) {\n case Inst.ALT:\n return `alt -> ${this.out}, ${this.arg}`;\n case Inst.ALT_MATCH:\n return `altmatch -> ${this.out}, ${this.arg}`;\n case Inst.CAPTURE:\n return `cap ${this.arg} -> ${this.out}`;\n case Inst.EMPTY_WIDTH:\n return `empty ${this.arg} -> ${this.out}`;\n case Inst.MATCH:\n return 'match';\n case Inst.FAIL:\n return 'fail';\n case Inst.NOP:\n return `nop -> ${this.out}`;\n case Inst.RUNE:\n if (this.runes === null) {\n return 'rune ';\n }\n return ['rune ', Inst.escapeRunes(this.runes), (this.arg & RE2Flags.FOLD_CASE) !== 0 ? '/i' : '', ' -> ', this.out].join('');\n case Inst.RUNE1:\n return `rune1 ${Inst.escapeRunes(this.runes)} -> ${this.out}`;\n case Inst.RUNE_ANY:\n return `any -> ${this.out}`;\n case Inst.RUNE_ANY_NOT_NL:\n return `anynotnl -> ${this.out}`;\n default:\n throw new Error('unhandled case in Inst.toString');\n }\n }\n}\n\n// A logical thread in the NFA.\nclass Thread {\n constructor() {\n this.inst = null;\n this.cap = [];\n }\n}\n\n// A queue is a 'sparse array' holding pending threads of execution. See:\n// research.swtch.com/2008/03/using-uninitialized-memory-for-fun-and.html\nclass Queue {\n constructor() {\n this.sparse = []; // may contain stale but in-bounds values.\n this.densePcs = []; // may contain stale pc in slots >= size\n this.denseThreads = []; // may contain stale Thread in slots >= size\n this.size = 0;\n }\n contains(pc) {\n const j = this.sparse[pc];\n return j < this.size && this.densePcs[j] === pc;\n }\n isEmpty() {\n return this.size === 0;\n }\n add(pc) {\n const j = this.size++;\n this.sparse[pc] = j;\n this.denseThreads[j] = null;\n this.densePcs[j] = pc;\n return j;\n }\n clear() {\n this.sparse = [];\n this.densePcs = [];\n this.denseThreads = [];\n this.size = 0;\n }\n toString() {\n let out = '{';\n for (let i = 0; i < this.size; i++) {\n if (i !== 0) {\n out += ', ';\n }\n out += this.densePcs[i];\n }\n out += '}';\n return out;\n }\n}\n// A Machine matches an input string of Unicode characters against an\n// RE2 instance using a simple NFA.\n//\n// Called by RE2.doExecute.\nclass Machine {\n static fromRE2(re2) {\n const m = new Machine();\n m.prog = re2.prog;\n m.re2 = re2;\n m.q0 = new Queue(m.prog.numInst());\n m.q1 = new Queue(m.prog.numInst());\n m.pool = [];\n m.poolSize = 0;\n m.matched = false;\n m.matchcap = Array(m.prog.numCap < 2 ? 2 : m.prog.numCap).fill(0);\n m.ncap = 0;\n return m;\n }\n static fromMachine(machine) {\n const m = new Machine();\n m.re2 = machine.re2;\n m.prog = machine.prog;\n m.q0 = machine.q0;\n m.q1 = machine.q1;\n m.pool = machine.pool;\n m.poolSize = machine.poolSize;\n m.matched = machine.matched;\n m.matchcap = machine.matchcap;\n m.ncap = machine.ncap;\n return m;\n }\n\n // init() reinitializes an existing Machine for re-use on a new input.\n init(ncap) {\n this.ncap = ncap;\n if (ncap > this.matchcap.length) {\n this.initNewCap(ncap);\n } else {\n this.resetCap(ncap);\n }\n }\n resetCap(ncap) {\n for (let i = 0; i < this.poolSize; i++) {\n const t = this.pool[i];\n t.cap = Array(ncap).fill(0);\n }\n }\n initNewCap(ncap) {\n for (let i = 0; i < this.poolSize; i++) {\n const t = this.pool[i];\n t.cap = Array(ncap).fill(0);\n }\n this.matchcap = Array(ncap).fill(0);\n }\n submatches() {\n if (this.ncap === 0) {\n return Utils.emptyInts();\n }\n return this.matchcap.slice(0, this.ncap);\n }\n\n // alloc() allocates a new thread with the given instruction.\n // It uses the free pool if possible.\n alloc(inst) {\n let t;\n if (this.poolSize > 0) {\n this.poolSize--;\n t = this.pool[this.poolSize];\n } else {\n t = new Thread();\n }\n t.inst = inst;\n return t;\n }\n\n // Frees all threads on the thread queue, returning them to the free pool.\n freeQueue(queue, from = 0) {\n const numberOfThread = queue.size - from;\n const requiredPoolLength = this.poolSize + numberOfThread;\n if (this.pool.length < requiredPoolLength) {\n this.pool = this.pool.slice(0, Math.max(this.pool.length * 2, requiredPoolLength));\n }\n for (let i = from; i < queue.size; i++) {\n const t = queue.denseThreads[i];\n if (t !== null) {\n this.pool[this.poolSize] = t;\n this.poolSize++;\n }\n }\n queue.clear();\n }\n\n // freeThread() returns t to the free pool.\n freeThread(t) {\n if (this.pool.length <= this.poolSize) {\n this.pool = this.pool.slice(0, this.pool.length * 2);\n }\n this.pool[this.poolSize] = t;\n this.poolSize++;\n }\n match(input, pos, anchor) {\n const startCond = this.re2.cond;\n if (startCond === Utils.EMPTY_ALL) {\n return false;\n }\n if ((anchor === RE2Flags.ANCHOR_START || anchor === RE2Flags.ANCHOR_BOTH) && pos !== 0) {\n return false;\n }\n this.matched = false;\n this.matchcap = Array(this.prog.numCap).fill(-1);\n let runq = this.q0;\n let nextq = this.q1;\n let r = input.step(pos);\n let rune = r >> 3;\n let width = r & 7;\n let rune1 = -1;\n let width1 = 0;\n if (r !== MachineInputBase.EOF()) {\n r = input.step(pos + width);\n rune1 = r >> 3;\n width1 = r & 7;\n }\n let flag;\n if (pos === 0) {\n flag = Utils.emptyOpContext(-1, rune);\n } else {\n flag = input.context(pos);\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (runq.isEmpty()) {\n if ((startCond & Utils.EMPTY_BEGIN_TEXT) !== 0 && pos !== 0) {\n break;\n }\n if (this.matched) {\n break;\n }\n if (!(this.re2.prefix.length === 0) && rune1 !== this.re2.prefixRune && input.canCheckPrefix()) {\n const advance = input.index(this.re2, pos);\n if (advance < 0) {\n break;\n }\n pos += advance;\n r = input.step(pos);\n rune = r >> 3;\n width = r & 7;\n r = input.step(pos + width);\n rune1 = r >> 3;\n width1 = r & 7;\n }\n }\n if (!this.matched && (pos === 0 || anchor === RE2Flags.UNANCHORED)) {\n if (this.ncap > 0) {\n this.matchcap[0] = pos;\n }\n this.add(runq, this.prog.start, pos, this.matchcap, flag, null);\n }\n const nextPos = pos + width;\n flag = input.context(nextPos);\n this.step(runq, nextq, pos, nextPos, rune, flag, anchor, pos === input.endPos());\n if (width === 0) {\n break;\n }\n if (this.ncap === 0 && this.matched) {\n break;\n }\n pos += width;\n rune = rune1;\n width = width1;\n if (rune !== -1) {\n r = input.step(pos + width);\n rune1 = r >> 3;\n width1 = r & 7;\n }\n const tmpq = runq;\n runq = nextq;\n nextq = tmpq;\n }\n this.freeQueue(nextq);\n return this.matched;\n }\n step(runq, nextq, pos, nextPos, c, nextCond, anchor, atEnd) {\n const longest = this.re2.longest;\n for (let j = 0; j < runq.size; j++) {\n let t = runq.denseThreads[j];\n if (t === null) {\n continue;\n }\n if (longest && this.matched && this.ncap > 0 && this.matchcap[0] < t.cap[0]) {\n this.freeThread(t);\n continue;\n }\n const i = t.inst;\n let add = false;\n switch (i.op) {\n case Inst.MATCH:\n if (anchor === RE2Flags.ANCHOR_BOTH && !atEnd) {\n break;\n }\n if (this.ncap > 0 && (!longest || !this.matched || this.matchcap[1] < pos)) {\n t.cap[1] = pos;\n this.matchcap = t.cap.slice(0, this.ncap);\n }\n if (!longest) {\n this.freeQueue(runq, j + 1);\n }\n this.matched = true;\n break;\n case Inst.RUNE:\n add = i.matchRune(c);\n break;\n case Inst.RUNE1:\n add = c === i.runes[0];\n break;\n case Inst.RUNE_ANY:\n add = true;\n break;\n case Inst.RUNE_ANY_NOT_NL:\n add = c !== Codepoint.CODES.get('\\n');\n break;\n default:\n throw new Error('bad inst');\n }\n if (add) {\n t = this.add(nextq, i.out, nextPos, t.cap, nextCond, t);\n }\n if (t !== null) {\n this.freeThread(t);\n runq.denseThreads[j] = null;\n }\n }\n runq.clear();\n }\n add(q, pc, pos, cap, cond, t) {\n if (pc === 0) {\n return t;\n }\n if (q.contains(pc)) {\n return t;\n }\n const d = q.add(pc);\n const inst = this.prog.inst[pc];\n switch (inst.op) {\n case Inst.FAIL:\n break;\n case Inst.ALT:\n case Inst.ALT_MATCH:\n t = this.add(q, inst.out, pos, cap, cond, t);\n t = this.add(q, inst.arg, pos, cap, cond, t);\n break;\n case Inst.EMPTY_WIDTH:\n if ((inst.arg & ~cond) === 0) {\n t = this.add(q, inst.out, pos, cap, cond, t);\n }\n break;\n case Inst.NOP:\n t = this.add(q, inst.out, pos, cap, cond, t);\n break;\n case Inst.CAPTURE:\n if (inst.arg < this.ncap) {\n const opos = cap[inst.arg];\n cap[inst.arg] = pos;\n this.add(q, inst.out, pos, cap, cond, null);\n cap[inst.arg] = opos;\n } else {\n t = this.add(q, inst.out, pos, cap, cond, t);\n }\n break;\n case Inst.MATCH:\n case Inst.RUNE:\n case Inst.RUNE1:\n case Inst.RUNE_ANY:\n case Inst.RUNE_ANY_NOT_NL:\n if (t === null) {\n t = this.alloc(inst);\n } else {\n t.inst = inst;\n }\n if (this.ncap > 0 && t.cap !== cap) {\n t.cap = cap.slice(0, this.ncap);\n }\n q.denseThreads[d] = t;\n t = null;\n break;\n default:\n throw new Error('unhandled');\n }\n return t;\n }\n}\n\n/**\n * Regular expression abstract syntax tree. Produced by parser, used by compiler. NB, this\n * corresponds to {@code syntax.regexp} in the Go implementation; Go's {@code regexp} is called\n * {@code RE2} in Java.\n */\nclass Regexp {\n static Op = (() => createEnum(['NO_MATCH',\n // Matches no strings.\n 'EMPTY_MATCH',\n // Matches empty string.\n 'LITERAL',\n // Matches runes[] sequence\n 'CHAR_CLASS',\n // Matches Runes interpreted as range pair list\n 'ANY_CHAR_NOT_NL',\n // Matches any character except '\\n'\n 'ANY_CHAR',\n // Matches any character\n 'BEGIN_LINE',\n // Matches empty string at end of line\n 'END_LINE',\n // Matches empty string at end of line\n 'BEGIN_TEXT',\n // Matches empty string at beginning of text\n 'END_TEXT',\n // Matches empty string at end of text\n 'WORD_BOUNDARY',\n // Matches word boundary `\\b`\n 'NO_WORD_BOUNDARY',\n // Matches word non-boundary `\\B`\n 'CAPTURE',\n // Capturing subexpr with index cap, optional name name\n 'STAR',\n // Matches subs[0] zero or more times.\n 'PLUS',\n // Matches subs[0] one or more times.\n 'QUEST',\n // Matches subs[0] zero or one times.\n 'REPEAT',\n // Matches subs[0] [min, max] times; max=-1 => no limit.\n 'CONCAT',\n // Matches concatenation of subs[]\n 'ALTERNATE',\n // Matches union of subs[]\n // Pseudo ops, used internally by Parser for parsing stack:\n 'LEFT_PAREN', 'VERTICAL_BAR']))();\n static isPseudoOp(op) {\n return op >= Regexp.Op.LEFT_PAREN;\n }\n static emptySubs() {\n return [];\n }\n static quoteIfHyphen(rune) {\n if (rune === Codepoint.CODES.get('-')) {\n return '\\\\';\n }\n return '';\n }\n static fromRegexp(re) {\n const regex = new Regexp(re.op);\n regex.flags = re.flags;\n regex.subs = re.subs;\n regex.runes = re.runes;\n regex.cap = re.cap;\n regex.min = re.min;\n regex.max = re.max;\n regex.name = re.name;\n regex.namedGroups = re.namedGroups;\n return regex;\n }\n constructor(op) {\n this.op = op; // operator\n this.flags = 0; // bitmap of parse flags\n // subexpressions, if any. Never null.\n // subs[0] is used as the freelist.\n this.subs = Regexp.emptySubs();\n this.runes = []; // matched runes, for LITERAL, CHAR_CLASS\n this.min = 0; // min for REPEAT\n this.max = 0; // max for REPEAT\n this.cap = 0; // capturing index, for CAPTURE\n this.name = null; // capturing name, for CAPTURE\n this.namedGroups = {}; // map of group name -> capturing index\n }\n reinit() {\n this.flags = 0;\n this.subs = Regexp.emptySubs();\n this.runes = [];\n this.cap = 0;\n this.min = 0;\n this.max = 0;\n this.name = null;\n this.namedGroups = {};\n }\n toString() {\n return this.appendTo();\n }\n\n // appendTo() appends the Perl syntax for |this| regular expression to out\n appendTo() {\n let out = '';\n switch (this.op) {\n case Regexp.Op.NO_MATCH:\n out += '[^\\\\x00-\\\\x{10FFFF}]';\n break;\n case Regexp.Op.EMPTY_MATCH:\n out += '(?:)';\n break;\n case Regexp.Op.STAR:\n case Regexp.Op.PLUS:\n case Regexp.Op.QUEST:\n case Regexp.Op.REPEAT:\n {\n const sub = this.subs[0];\n if (sub.op > Regexp.Op.CAPTURE || sub.op === Regexp.Op.LITERAL && sub.runes.length > 1) {\n out += `(?:${sub.appendTo()})`;\n } else {\n out += sub.appendTo();\n }\n switch (this.op) {\n case Regexp.Op.STAR:\n out += '*';\n break;\n case Regexp.Op.PLUS:\n out += '+';\n break;\n case Regexp.Op.QUEST:\n out += '?';\n break;\n case Regexp.Op.REPEAT:\n out += `{${this.min}`;\n if (this.min !== this.max) {\n out += ',';\n if (this.max >= 0) {\n out += this.max;\n }\n }\n out += '}';\n break;\n }\n if ((this.flags & RE2Flags.NON_GREEDY) !== 0) {\n out += '?';\n }\n break;\n }\n case Regexp.Op.CONCAT:\n {\n for (let sub of this.subs) {\n if (sub.op === Regexp.Op.ALTERNATE) {\n out += `(?:${sub.appendTo()})`;\n } else {\n out += sub.appendTo();\n }\n }\n break;\n }\n case Regexp.Op.ALTERNATE:\n {\n let sep = '';\n for (let sub of this.subs) {\n out += sep;\n sep = '|';\n out += sub.appendTo();\n }\n break;\n }\n case Regexp.Op.LITERAL:\n if ((this.flags & RE2Flags.FOLD_CASE) !== 0) {\n out += '(?i:';\n }\n for (let rune of this.runes) {\n out += Utils.escapeRune(rune);\n }\n if ((this.flags & RE2Flags.FOLD_CASE) !== 0) {\n out += ')';\n }\n break;\n case Regexp.Op.ANY_CHAR_NOT_NL:\n out += '(?-s:.)';\n break;\n case Regexp.Op.ANY_CHAR:\n out += '(?s:.)';\n break;\n case Regexp.Op.CAPTURE:\n if (this.name === null || this.name.length === 0) {\n out += '(';\n } else {\n out += `(?P<${this.name}>`;\n }\n if (this.subs[0].op !== Regexp.Op.EMPTY_MATCH) {\n out += this.subs[0].appendTo();\n }\n out += ')';\n break;\n case Regexp.Op.BEGIN_TEXT:\n out += '\\\\A';\n break;\n case Regexp.Op.END_TEXT:\n if ((this.flags & RE2Flags.WAS_DOLLAR) !== 0) {\n out += '(?-m:$)';\n } else {\n out += '\\\\z';\n }\n break;\n case Regexp.Op.BEGIN_LINE:\n out += '^';\n break;\n case Regexp.Op.END_LINE:\n out += '$';\n break;\n case Regexp.Op.WORD_BOUNDARY:\n out += '\\\\b';\n break;\n case Regexp.Op.NO_WORD_BOUNDARY:\n out += '\\\\B';\n break;\n case Regexp.Op.CHAR_CLASS:\n if (this.runes.length % 2 !== 0) {\n out += '[invalid char class]';\n break;\n }\n out += '[';\n if (this.runes.length === 0) {\n out += '^\\\\x00-\\\\x{10FFFF}';\n } else if (this.runes[0] === 0 && this.runes[this.runes.length - 1] === Unicode.MAX_RUNE) {\n out += '^';\n for (let i = 1; i < this.runes.length - 1; i += 2) {\n const lo = this.runes[i] + 1;\n const hi = this.runes[i + 1] - 1;\n out += Regexp.quoteIfHyphen(lo);\n out += Utils.escapeRune(lo);\n if (lo !== hi) {\n out += '-';\n out += Regexp.quoteIfHyphen(hi);\n out += Utils.escapeRune(hi);\n }\n }\n } else {\n for (let i = 0; i < this.runes.length; i += 2) {\n const lo = this.runes[i];\n const hi = this.runes[i + 1];\n out += Regexp.quoteIfHyphen(lo);\n out += Utils.escapeRune(lo);\n if (lo !== hi) {\n out += '-';\n out += Regexp.quoteIfHyphen(hi);\n out += Utils.escapeRune(hi);\n }\n }\n }\n out += ']';\n break;\n default:\n out += this.op;\n break;\n }\n return out;\n }\n\n // maxCap() walks the regexp to find the maximum capture index.\n maxCap() {\n let m = 0;\n if (this.op === Regexp.Op.CAPTURE) {\n m = this.cap;\n }\n if (this.subs !== null) {\n for (let sub of this.subs) {\n const n = sub.maxCap();\n if (m < n) {\n m = n;\n }\n }\n }\n return m;\n }\n\n // equals() returns true if this and that have identical structure.\n equals(that) {\n if (!(that !== null && that instanceof Regexp)) {\n return false;\n }\n if (this.op !== that.op) {\n return false;\n }\n switch (this.op) {\n case Regexp.Op.END_TEXT:\n {\n if ((this.flags & RE2Flags.WAS_DOLLAR) !== (that.flags & RE2Flags.WAS_DOLLAR)) {\n return false;\n }\n break;\n }\n case Regexp.Op.LITERAL:\n case Regexp.Op.CHAR_CLASS:\n {\n if (this.runes === null && that.runes === null) {\n break;\n }\n if (this.runes === null || that.runes === null) {\n return false;\n }\n if (this.runes.length !== that.runes.length) {\n return false;\n }\n for (let i = 0; i < this.runes.length; i++) {\n if (this.runes[i] !== that.runes[i]) {\n return false;\n }\n }\n break;\n }\n case Regexp.Op.ALTERNATE:\n case Regexp.Op.CONCAT:\n {\n if (this.subs.length !== that.subs.length) {\n return false;\n }\n for (let i = 0; i < this.subs.length; ++i) {\n if (!this.subs[i].equals(that.subs[i])) {\n return false;\n }\n }\n break;\n }\n case Regexp.Op.STAR:\n case Regexp.Op.PLUS:\n case Regexp.Op.QUEST:\n {\n if ((this.flags & RE2Flags.NON_GREEDY) !== (that.flags & RE2Flags.NON_GREEDY) || !this.subs[0].equals(that.subs[0])) {\n return false;\n }\n break;\n }\n case Regexp.Op.REPEAT:\n {\n if ((this.flags & RE2Flags.NON_GREEDY) !== (that.flags & RE2Flags.NON_GREEDY) || this.min !== that.min || this.max !== that.max || !this.subs[0].equals(that.subs[0])) {\n return false;\n }\n break;\n }\n case Regexp.Op.CAPTURE:\n {\n if (this.cap !== that.cap || (this.name === null ? that.name !== null : this.name !== that.name) || !this.subs[0].equals(that.subs[0])) {\n return false;\n }\n break;\n }\n }\n return true;\n }\n}\n\n/**\n * A Prog is a compiled regular expression program.\n */\nclass Prog {\n constructor() {\n this.inst = [];\n this.start = 0; // index of start instruction\n // number of CAPTURE insts in re\n // 2 => implicit ( and ) for whole match $0\n this.numCap = 2;\n }\n\n // Returns the instruction at the specified pc.\n // Precondition: pc > 0 && pc < numInst().\n getInst(pc) {\n return this.inst[pc];\n }\n\n // Returns the number of instructions in this program.\n numInst() {\n return this.inst.length;\n }\n\n // Adds a new instruction to this program, with operator |op| and |pc| equal\n // to |numInst()|.\n addInst(op) {\n this.inst.push(new Inst(op));\n }\n\n // skipNop() follows any no-op or capturing instructions and returns the\n // resulting instruction.\n skipNop(pc) {\n let i = this.inst[pc];\n while (i.op === Inst.NOP || i.op === Inst.CAPTURE) {\n i = this.inst[pc];\n pc = i.out;\n }\n return i;\n }\n\n // prefix() returns a pair of a literal string that all matches for the\n // regexp must start with, and a boolean which is true if the prefix is the\n // entire match. The string is returned by appending to |prefix|.\n prefix() {\n let prefix = '';\n let i = this.skipNop(this.start);\n if (!Inst.isRuneOp(i.op) || i.runes.length !== 1) {\n return [i.op === Inst.MATCH, prefix];\n }\n while (Inst.isRuneOp(i.op) && i.runes.length === 1 && (i.arg & RE2Flags.FOLD_CASE) === 0) {\n prefix += String.fromCodePoint(i.runes[0]);\n i = this.skipNop(i.out);\n }\n return [i.op === Inst.MATCH, prefix];\n }\n\n // startCond() returns the leading empty-width conditions that must be true\n // in any match. It returns -1 (all bits set) if no matches are possible.\n startCond() {\n let flag = 0;\n let pc = this.start;\n loop: for (;;) {\n const i = this.inst[pc];\n switch (i.op) {\n case Inst.EMPTY_WIDTH:\n flag |= i.arg;\n break;\n case Inst.FAIL:\n return -1;\n case Inst.CAPTURE:\n case Inst.NOP:\n break;\n default:\n break loop;\n }\n pc = i.out;\n }\n return flag;\n }\n\n // --- Patch list ---\n\n // A patchlist is a list of instruction pointers that need to be filled in\n // (patched). Because the pointers haven't been filled in yet, we can reuse\n // their storage to hold the list. It's kind of sleazy, but works well in\n // practice. See http://swtch.com/~rsc/regexp/regexp1.html for inspiration.\n\n // These aren't really pointers: they're integers, so we can reinterpret them\n // this way without using package unsafe. A value l denotes p.inst[l>>1].out\n // (l&1==0) or .arg (l&1==1). l == 0 denotes the empty list, okay because we\n // start every program with a fail instruction, so we'll never want to point\n // at its output link.\n\n next(l) {\n const i = this.inst[l >> 1];\n if ((l & 1) === 0) {\n return i.out;\n }\n return i.arg;\n }\n patch(l, val) {\n while (l !== 0) {\n const i = this.inst[l >> 1];\n if ((l & 1) === 0) {\n l = i.out;\n i.out = val;\n } else {\n l = i.arg;\n i.arg = val;\n }\n }\n }\n append(l1, l2) {\n if (l1 === 0) {\n return l2;\n }\n if (l2 === 0) {\n return l1;\n }\n let last = l1;\n for (;;) {\n const next = this.next(last);\n if (next === 0) {\n break;\n }\n last = next;\n }\n const i = this.inst[last >> 1];\n if ((last & 1) === 0) {\n i.out = l2;\n } else {\n i.arg = l2;\n }\n return l1;\n }\n /**\n *\n * @returns {string}\n */\n toString() {\n let out = '';\n for (let pc = 0; pc < this.inst.length; pc++) {\n const len = out.length;\n out += pc;\n if (pc === this.start) {\n out += '*';\n }\n out += ' '.substring(out.length - len);\n out += this.inst[pc];\n out += '\\n';\n }\n return out;\n }\n}\n\n/**\n * A fragment of a compiled regular expression program.\n *\n * @see http://swtch.com/~rsc/regexp/regexp1.html\n * @class\n */\nclass Frag {\n constructor(i = 0, out = 0, nullable = false) {\n this.i = i; // an instruction address (pc).\n this.out = out; // a patch list; see explanation in Prog.js\n this.nullable = nullable; // whether the fragment can match the empty string\n }\n}\n/**\n * Compiler from {@code Regexp} (RE2 abstract syntax) to {@code RE2} (compiled regular expression).\n *\n * The only entry point is {@link #compileRegexp}.\n */\nclass Compiler {\n static ANY_RUNE_NOT_NL() {\n return [0, Codepoint.CODES.get('\\n') - 1, Codepoint.CODES.get('\\n') + 1, Unicode.MAX_RUNE];\n }\n static ANY_RUNE() {\n return [0, Unicode.MAX_RUNE];\n }\n static compileRegexp(re) {\n const c = new Compiler();\n const f = c.compile(re);\n c.prog.patch(f.out, c.newInst(Inst.MATCH).i);\n c.prog.start = f.i;\n return c.prog;\n }\n constructor() {\n this.prog = new Prog();\n this.newInst(Inst.FAIL);\n }\n newInst(op) {\n this.prog.addInst(op);\n return new Frag(this.prog.numInst() - 1, 0, true);\n }\n\n // Returns a no-op fragment. Sometimes unavoidable.\n nop() {\n const f = this.newInst(Inst.NOP);\n f.out = f.i << 1;\n return f;\n }\n fail() {\n return new Frag();\n }\n\n // Given fragment a, returns (a) capturing as \\n.\n // Given a fragment a, returns a fragment with capturing parens around a.\n cap(arg) {\n const f = this.newInst(Inst.CAPTURE);\n f.out = f.i << 1;\n this.prog.getInst(f.i).arg = arg;\n if (this.prog.numCap < arg + 1) {\n this.prog.numCap = arg + 1;\n }\n return f;\n }\n\n // Given fragments a and b, returns ab; a|b\n cat(f1, f2) {\n // concat of failure is failure\n if (f1.i === 0 || f2.i === 0) {\n return this.fail();\n }\n // eslint-disable-next-line no-warning-comments\n // TODO(rsc): elide nop\n this.prog.patch(f1.out, f2.i);\n return new Frag(f1.i, f2.out, f1.nullable && f2.nullable);\n }\n\n // Given fragments for a and b, returns fragment for a|b.\n alt(f1, f2) {\n // alt of failure is other\n if (f1.i === 0) {\n return f2;\n }\n if (f2.i === 0) {\n return f1;\n }\n const f = this.newInst(Inst.ALT);\n const i = this.prog.getInst(f.i);\n i.out = f1.i;\n i.arg = f2.i;\n f.out = this.prog.append(f1.out, f2.out);\n f.nullable = f1.nullable || f2.nullable;\n return f;\n }\n\n // loop returns the fragment for the main loop of a plus or star.\n // For plus, it can be used directly. with f1.i as the entry.\n // For star, it can be used directly when f1 can't match an empty string.\n // (When f1 can match an empty string, f1* must be implemented as (f1+)?\n // to get the priority match order correct.)\n loop(f1, nongreedy) {\n const f = this.newInst(Inst.ALT);\n const i = this.prog.getInst(f.i);\n if (nongreedy) {\n i.arg = f1.i;\n f.out = f.i << 1;\n } else {\n i.out = f1.i;\n f.out = f.i << 1 | 1;\n }\n this.prog.patch(f1.out, f.i);\n return f;\n }\n\n // Given a fragment for a, returns a fragment for a? or a?? (if nongreedy)\n quest(f1, nongreedy) {\n const f = this.newInst(Inst.ALT);\n const i = this.prog.getInst(f.i);\n if (nongreedy) {\n i.arg = f1.i;\n f.out = f.i << 1;\n } else {\n i.out = f1.i;\n f.out = f.i << 1 | 1;\n }\n f.out = this.prog.append(f.out, f1.out);\n return f;\n }\n\n // Given a fragment a, returns a fragment for a* or a*? (if nongreedy)\n star(f1, nongreedy) {\n if (f1.nullable) {\n return this.quest(this.plus(f1, nongreedy), nongreedy);\n }\n return this.loop(f1, nongreedy);\n }\n\n // Given a fragment for a, returns a fragment for a+ or a+? (if nongreedy)\n plus(f1, nongreedy) {\n return new Frag(f1.i, this.loop(f1, nongreedy).out, f1.nullable);\n }\n\n // op is a bitmask of EMPTY_* flags.\n empty(op) {\n const f = this.newInst(Inst.EMPTY_WIDTH);\n this.prog.getInst(f.i).arg = op;\n f.out = f.i << 1;\n return f;\n }\n\n // flags : parser flags\n rune(runes, flags) {\n const f = this.newInst(Inst.RUNE);\n f.nullable = false;\n const i = this.prog.getInst(f.i);\n i.runes = runes;\n flags &= RE2Flags.FOLD_CASE;\n if (runes.length !== 1 || Unicode.simpleFold(runes[0]) === runes[0]) {\n flags &= -2;\n }\n i.arg = flags;\n f.out = f.i << 1;\n if ((flags & RE2Flags.FOLD_CASE) === 0 && runes.length === 1 || runes.length === 2 && runes[0] === runes[1]) {\n i.op = Inst.RUNE1;\n } else if (runes.length === 2 && runes[0] === 0 && runes[1] === Unicode.MAX_RUNE) {\n i.op = Inst.RUNE_ANY;\n } else if (runes.length === 4 && runes[0] === 0 && runes[1] === Codepoint.CODES.get('\\n') - 1 && runes[2] === Codepoint.CODES.get('\\n') + 1 && runes[3] === Unicode.MAX_RUNE) {\n i.op = Inst.RUNE_ANY_NOT_NL;\n }\n return f;\n }\n compile(re) {\n switch (re.op) {\n case Regexp.Op.NO_MATCH:\n return this.fail();\n case Regexp.Op.EMPTY_MATCH:\n return this.nop();\n case Regexp.Op.LITERAL:\n if (re.runes.length === 0) {\n return this.nop();\n } else {\n let f = null;\n for (let r of re.runes) {\n const f1 = this.rune([r], re.flags);\n f = f === null ? f1 : this.cat(f, f1);\n }\n return f;\n }\n case Regexp.Op.CHAR_CLASS:\n return this.rune(re.runes, re.flags);\n case Regexp.Op.ANY_CHAR_NOT_NL:\n return this.rune(Compiler.ANY_RUNE_NOT_NL(), 0);\n case Regexp.Op.ANY_CHAR:\n return this.rune(Compiler.ANY_RUNE(), 0);\n case Regexp.Op.BEGIN_LINE:\n return this.empty(Utils.EMPTY_BEGIN_LINE);\n case Regexp.Op.END_LINE:\n return this.empty(Utils.EMPTY_END_LINE);\n case Regexp.Op.BEGIN_TEXT:\n return this.empty(Utils.EMPTY_BEGIN_TEXT);\n case Regexp.Op.END_TEXT:\n return this.empty(Utils.EMPTY_END_TEXT);\n case Regexp.Op.WORD_BOUNDARY:\n return this.empty(Utils.EMPTY_WORD_BOUNDARY);\n case Regexp.Op.NO_WORD_BOUNDARY:\n return this.empty(Utils.EMPTY_NO_WORD_BOUNDARY);\n case Regexp.Op.CAPTURE:\n {\n const bra = this.cap(re.cap << 1);\n const sub = this.compile(re.subs[0]);\n const ket = this.cap(re.cap << 1 | 1);\n return this.cat(this.cat(bra, sub), ket);\n }\n case Regexp.Op.STAR:\n return this.star(this.compile(re.subs[0]), (re.flags & RE2Flags.NON_GREEDY) !== 0);\n case Regexp.Op.PLUS:\n return this.plus(this.compile(re.subs[0]), (re.flags & RE2Flags.NON_GREEDY) !== 0);\n case Regexp.Op.QUEST:\n return this.quest(this.compile(re.subs[0]), (re.flags & RE2Flags.NON_GREEDY) !== 0);\n case Regexp.Op.CONCAT:\n {\n if (re.subs.length === 0) {\n return this.nop();\n } else {\n let f = null;\n for (let sub of re.subs) {\n const f1 = this.compile(sub);\n f = f === null ? f1 : this.cat(f, f1);\n }\n return f;\n }\n }\n case Regexp.Op.ALTERNATE:\n {\n if (re.subs.length === 0) {\n return this.nop();\n } else {\n let f = null;\n for (let sub of re.subs) {\n const f1 = this.compile(sub);\n f = f === null ? f1 : this.alt(f, f1);\n }\n return f;\n }\n }\n default:\n throw new RE2JSCompileException('regexp: unhandled case in compile');\n }\n }\n}\n\nclass Simplify {\n // Simplify returns a regexp equivalent to re but without counted\n // repetitions and with various other simplifications, such as\n // rewriting /(?:a+)+/ to /a+/. The resulting regexp will execute\n // correctly but its string representation will not produce the same\n // parse tree, because capturing parentheses may have been duplicated\n // or removed. For example, the simplified form for /(x){1,2}/ is\n // /(x)(x)?/ but both parentheses capture as $1. The returned regexp\n // may share structure with or be the original.\n static simplify(re) {\n if (re === null) {\n return null;\n }\n switch (re.op) {\n case Regexp.Op.CAPTURE:\n case Regexp.Op.CONCAT:\n case Regexp.Op.ALTERNATE:\n {\n let nre = re;\n for (let i = 0; i < re.subs.length; i++) {\n const sub = re.subs[i];\n const nsub = Simplify.simplify(sub);\n if (nre === re && nsub !== sub) {\n nre = Regexp.fromRegexp(re);\n nre.runes = [];\n nre.subs = re.subs.slice(0, re.subs.length);\n }\n if (nre !== re) {\n nre.subs[i] = nsub;\n }\n }\n return nre;\n }\n case Regexp.Op.STAR:\n case Regexp.Op.PLUS:\n case Regexp.Op.QUEST:\n {\n const sub = Simplify.simplify(re.subs[0]);\n return Simplify.simplify1(re.op, re.flags, sub, re);\n }\n case Regexp.Op.REPEAT:\n {\n // Special special case: x{0} matches the empty string\n // and doesn't even need to consider x.\n if (re.min === 0 && re.max === 0) {\n return new Regexp(Regexp.Op.EMPTY_MATCH);\n }\n // The fun begins.\n const sub = Simplify.simplify(re.subs[0]);\n\n // x{n,} means at least n matches of x.\n if (re.max === -1) {\n // Special case: x{0,} is x*.\n if (re.min === 0) {\n return Simplify.simplify1(Regexp.Op.STAR, re.flags, sub, null);\n }\n // Special case: x{1,} is x+.\n if (re.min === 1) {\n return Simplify.simplify1(Regexp.Op.PLUS, re.flags, sub, null);\n }\n // General case: x{4,} is xxxx+.\n const nre = new Regexp(Regexp.Op.CONCAT);\n const subs = [];\n for (let i = 0; i < re.min - 1; i++) {\n subs.push(sub);\n }\n subs.push(Simplify.simplify1(Regexp.Op.PLUS, re.flags, sub, null));\n nre.subs = subs.slice(0);\n return nre;\n }\n // Special case x{0} handled above.\n\n // Special case: x{1} is just x.\n if (re.min === 1 && re.max === 1) {\n return sub;\n }\n\n // General case: x{n,m} means n copies of x and m copies of x?\n // The machine will do less work if we nest the final m copies,\n // so that x{2,5} = xx(x(x(x)?)?)?\n\n // Build leading prefix: xx.\n let prefixSubs = null;\n if (re.min > 0) {\n prefixSubs = [];\n for (let i = 0; i < re.min; i++) {\n prefixSubs.push(sub);\n }\n }\n\n // Build and attach suffix: (x(x(x)?)?)?\n if (re.max > re.min) {\n let suffix = Simplify.simplify1(Regexp.Op.QUEST, re.flags, sub, null);\n for (let i = re.min + 1; i < re.max; i++) {\n const nre2 = new Regexp(Regexp.Op.CONCAT);\n nre2.subs = [sub, suffix];\n suffix = Simplify.simplify1(Regexp.Op.QUEST, re.flags, nre2, null);\n }\n if (prefixSubs === null) {\n return suffix;\n }\n prefixSubs.push(suffix);\n }\n if (prefixSubs !== null) {\n const prefix = new Regexp(Regexp.Op.CONCAT);\n prefix.subs = prefixSubs.slice(0);\n return prefix;\n }\n\n // Some degenerate case like min > max or min < max < 0.\n // Handle as impossible match.\n return new Regexp(Regexp.Op.NO_MATCH);\n }\n }\n return re;\n }\n\n // simplify1 implements Simplify for the unary OpStar,\n // OpPlus, and OpQuest operators. It returns the simple regexp\n // equivalent to\n //\n // Regexp{Op: op, Flags: flags, Sub: {sub}}\n //\n // under the assumption that sub is already simple, and\n // without first allocating that structure. If the regexp\n // to be returned turns out to be equivalent to re, simplify1\n // returns re instead.\n //\n // simplify1 is factored out of Simplify because the implementation\n // for other operators generates these unary expressions.\n // Letting them call simplify1 makes sure the expressions they\n // generate are simple.\n static simplify1(op, flags, sub, re) {\n // Special case: repeat the empty string as much as\n // you want, but it's still the empty string.\n if (sub.op === Regexp.Op.EMPTY_MATCH) {\n return sub;\n }\n\n // The operators are idempotent if the flags match.\n if (op === sub.op && (flags & RE2Flags.NON_GREEDY) === (sub.flags & RE2Flags.NON_GREEDY)) {\n return sub;\n }\n if (re !== null && re.op === op && (re.flags & RE2Flags.NON_GREEDY) === (flags & RE2Flags.NON_GREEDY) && sub === re.subs[0]) {\n return re;\n }\n re = new Regexp(op);\n re.flags = flags;\n re.subs = [sub];\n return re;\n }\n}\n\n// GENERATED BY tools/scripts/make_perl_groups.pl; DO NOT EDIT.\n// ./tools/scripts/make_perl_groups.pl > src/CharGroup.js\n\nclass CharGroup {\n constructor(sign, cls) {\n this.sign = sign;\n this.cls = cls;\n }\n}\nconst code1 = [0x30, 0x39];\nconst code2 = [0x9, 0xa, 0xc, 0xd, 0x20, 0x20];\nconst code3 = [0x30, 0x39, 0x41, 0x5a, 0x5f, 0x5f, 0x61, 0x7a];\nconst PERL_GROUPS = new Map([['\\\\d', new CharGroup(1, code1)], ['\\\\D', new CharGroup(-1, code1)], ['\\\\s', new CharGroup(1, code2)], ['\\\\S', new CharGroup(-1, code2)], ['\\\\w', new CharGroup(1, code3)], ['\\\\W', new CharGroup(-1, code3)]]);\nconst code4 = [0x30, 0x39, 0x41, 0x5a, 0x61, 0x7a];\nconst code5 = [0x41, 0x5a, 0x61, 0x7a];\nconst code6 = [0x0, 0x7f];\nconst code7 = [0x9, 0x9, 0x20, 0x20];\nconst code8 = [0x0, 0x1f, 0x7f, 0x7f];\nconst code9 = [0x30, 0x39];\nconst code10 = [0x21, 0x7e];\nconst code11 = [0x61, 0x7a];\nconst code12 = [0x20, 0x7e];\nconst code13 = [0x21, 0x2f, 0x3a, 0x40, 0x5b, 0x60, 0x7b, 0x7e];\nconst code14 = [0x9, 0xd, 0x20, 0x20];\nconst code15 = [0x41, 0x5a];\nconst code16 = [0x30, 0x39, 0x41, 0x5a, 0x5f, 0x5f, 0x61, 0x7a];\nconst code17 = [0x30, 0x39, 0x41, 0x46, 0x61, 0x66];\nconst POSIX_GROUPS = new Map([['[:alnum:]', new CharGroup(1, code4)], ['[:^alnum:]', new CharGroup(-1, code4)], ['[:alpha:]', new CharGroup(1, code5)], ['[:^alpha:]', new CharGroup(-1, code5)], ['[:ascii:]', new CharGroup(1, code6)], ['[:^ascii:]', new CharGroup(-1, code6)], ['[:blank:]', new CharGroup(1, code7)], ['[:^blank:]', new CharGroup(-1, code7)], ['[:cntrl:]', new CharGroup(1, code8)], ['[:^cntrl:]', new CharGroup(-1, code8)], ['[:digit:]', new CharGroup(1, code9)], ['[:^digit:]', new CharGroup(-1, code9)], ['[:graph:]', new CharGroup(1, code10)], ['[:^graph:]', new CharGroup(-1, code10)], ['[:lower:]', new CharGroup(1, code11)], ['[:^lower:]', new CharGroup(-1, code11)], ['[:print:]', new CharGroup(1, code12)], ['[:^print:]', new CharGroup(-1, code12)], ['[:punct:]', new CharGroup(1, code13)], ['[:^punct:]', new CharGroup(-1, code13)], ['[:space:]', new CharGroup(1, code14)], ['[:^space:]', new CharGroup(-1, code14)], ['[:upper:]', new CharGroup(1, code15)], ['[:^upper:]', new CharGroup(-1, code15)], ['[:word:]', new CharGroup(1, code16)], ['[:^word:]', new CharGroup(-1, code16)], ['[:xdigit:]', new CharGroup(1, code17)], ['[:^xdigit:]', new CharGroup(-1, code17)]]);\n\n/**\n * A \"builder\"-style helper class for manipulating character classes represented as an array of\n * pairs of runes [lo, hi], each denoting an inclusive interval.\n *\n * All methods mutate the internal state and return {@code this}, allowing operations to be chained.\n */\nclass CharClass {\n // Exposed, since useful for debugging CharGroups too.\n static charClassToString(r, len) {\n let result = '[';\n for (let i = 0; i < len; i += 2) {\n if (i > 0) {\n result += ' ';\n }\n const lo = r[i];\n const hi = r[i + 1];\n if (lo === hi) {\n result += `0x${lo.toString(16)}`;\n } else {\n result += `0x${lo.toString(16)}-0x${hi.toString(16)}`;\n }\n }\n result += ']';\n return result;\n }\n\n // cmp() returns the ordering of the pair (a[i], a[i+1]) relative to\n // (pivotFrom, pivotTo), where the first component of the pair (lo) is\n // ordered naturally and the second component (hi) is in reverse order.\n static cmp(array, i, pivotFrom, pivotTo) {\n const cmp = array[i] - pivotFrom;\n return cmp !== 0 ? cmp : pivotTo - array[i + 1];\n }\n\n // qsortIntPair() quicksorts pairs of ints in |array| according to lt().\n // Precondition: |left|, |right|, |this.len| must all be even; |this.len > 1|.\n static qsortIntPair(array, left, right) {\n const pivotIndex = ((left + right) / 2 | 0) & -2;\n const pivotFrom = array[pivotIndex];\n const pivotTo = array[pivotIndex + 1];\n let i = left;\n let j = right;\n while (i <= j) {\n while (i < right && CharClass.cmp(array, i, pivotFrom, pivotTo) < 0) {\n i += 2;\n }\n while (j > left && CharClass.cmp(array, j, pivotFrom, pivotTo) > 0) {\n j -= 2;\n }\n if (i <= j) {\n if (i !== j) {\n let temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n temp = array[i + 1];\n array[i + 1] = array[j + 1];\n array[j + 1] = temp;\n }\n i += 2;\n j -= 2;\n }\n }\n if (left < j) {\n CharClass.qsortIntPair(array, left, j);\n }\n if (i < right) {\n CharClass.qsortIntPair(array, i, right);\n }\n }\n constructor(r = Utils.emptyInts()) {\n this.r = r; // inclusive ranges, pairs of [lo,hi]. r.length is even.\n this.len = r.length; // prefix of |r| that is defined. Even.\n }\n\n // Returns the character class as an int array. Subsequent CharClass\n // operations may mutate this array, so typically this is the last operation\n // performed on a given CharClass instance.\n toArray() {\n if (this.len === this.r.length) {\n return this.r;\n } else {\n return this.r.slice(0, this.len);\n }\n }\n\n // cleanClass() sorts the ranges (pairs of elements) of this CharClass,\n // merges them, and eliminates duplicates.\n cleanClass() {\n if (this.len < 4) {\n return this;\n }\n // Sort by lo increasing, hi decreasing to break ties.\n CharClass.qsortIntPair(this.r, 0, this.len - 2);\n // Merge abutting, overlapping.\n let w = 2; // write index\n for (let i = 2; i < this.len; i += 2) {\n {\n const lo = this.r[i];\n const hi = this.r[i + 1];\n if (lo <= this.r[w - 1] + 1) {\n // merge with previous range\n if (hi > this.r[w - 1]) {\n this.r[w - 1] = hi;\n }\n continue;\n }\n // new disjoint range\n this.r[w] = lo;\n this.r[w + 1] = hi;\n w += 2;\n }\n }\n this.len = w;\n return this;\n }\n\n // appendLiteral() appends the literal |x| to this CharClass.\n appendLiteral(x, flags) {\n return (flags & RE2Flags.FOLD_CASE) !== 0 ? this.appendFoldedRange(x, x) : this.appendRange(x, x);\n }\n\n // appendRange() appends the range [lo-hi] (inclusive) to this CharClass.\n appendRange(lo, hi) {\n // Expand last range or next to last range if it overlaps or abuts.\n // Checking two ranges helps when appending case-folded\n // alphabets, so that one range can be expanding A-Z and the\n // other expanding a-z.\n if (this.len > 0) {\n for (let i = 2; i <= 4; i += 2) {\n // twice, using i=2, i=4\n if (this.len >= i) {\n const rlo = this.r[this.len - i];\n const rhi = this.r[this.len - i + 1];\n if (lo <= rhi + 1 && rlo <= hi + 1) {\n if (lo < rlo) {\n this.r[this.len - i] = lo;\n }\n if (hi > rhi) {\n this.r[this.len - i + 1] = hi;\n }\n return this;\n }\n }\n }\n }\n this.r[this.len++] = lo;\n this.r[this.len++] = hi;\n return this;\n }\n\n // appendFoldedRange() appends the range [lo-hi] and its case\n // folding-equivalent runes to this CharClass.\n appendFoldedRange(lo, hi) {\n // Optimizations.\n if (lo <= Unicode.MIN_FOLD && hi >= Unicode.MAX_FOLD) {\n // Range is full: folding can't add more.\n return this.appendRange(lo, hi);\n }\n if (hi < Unicode.MIN_FOLD || lo > Unicode.MAX_FOLD) {\n // Range is outside folding possibilities.\n return this.appendRange(lo, hi);\n }\n if (lo < Unicode.MIN_FOLD) {\n // [lo, minFold-1] needs no folding.\n this.appendRange(lo, Unicode.MIN_FOLD - 1);\n lo = Unicode.MIN_FOLD;\n }\n if (hi > Unicode.MAX_FOLD) {\n // [maxFold+1, hi] needs no folding.\n this.appendRange(Unicode.MAX_FOLD + 1, hi);\n hi = Unicode.MAX_FOLD;\n }\n\n // Brute force. Depend on appendRange to coalesce ranges on the fly.\n for (let c = lo; c <= hi; c++) {\n this.appendRange(c, c);\n for (let f = Unicode.simpleFold(c); f !== c; f = Unicode.simpleFold(f)) {\n this.appendRange(f, f);\n }\n }\n return this;\n }\n\n // appendClass() appends the class |x| to this CharClass.\n // It assumes |x| is clean. Does not mutate |x|.\n appendClass(x) {\n for (let i = 0; i < x.length; i += 2) {\n this.appendRange(x[i], x[i + 1]);\n }\n return this;\n }\n\n // appendFoldedClass() appends the case folding of the class |x| to this\n // CharClass. Does not mutate |x|.\n appendFoldedClass(x) {\n for (let i = 0; i < x.length; i += 2) {\n this.appendFoldedRange(x[i], x[i + 1]);\n }\n return this;\n }\n\n // appendNegatedClass() append the negation of the class |x| to this\n // CharClass. It assumes |x| is clean. Does not mutate |x|.\n appendNegatedClass(x) {\n let nextLo = 0;\n for (let i = 0; i < x.length; i += 2) {\n const lo = x[i];\n const hi = x[i + 1];\n if (nextLo <= lo - 1) {\n this.appendRange(nextLo, lo - 1);\n }\n nextLo = hi + 1;\n }\n if (nextLo <= Unicode.MAX_RUNE) {\n this.appendRange(nextLo, Unicode.MAX_RUNE);\n }\n return this;\n }\n\n // appendTable() appends the Unicode range table |table| to this CharClass.\n // Does not mutate |table|.\n appendTable(table) {\n for (let triple of table) {\n const lo = triple[0];\n const hi = triple[1];\n const stride = triple[2];\n if (stride === 1) {\n this.appendRange(lo, hi);\n continue;\n }\n for (let c = lo; c <= hi; c += stride) {\n this.appendRange(c, c);\n }\n }\n return this;\n }\n\n // appendNegatedTable() returns the result of appending the negation of range\n // table |table| to this CharClass. Does not mutate |table|.\n appendNegatedTable(table) {\n let nextLo = 0;\n for (let triple of table) {\n const lo = triple[0];\n const hi = triple[1];\n const stride = triple[2];\n if (stride === 1) {\n if (nextLo <= lo - 1) {\n this.appendRange(nextLo, lo - 1);\n }\n nextLo = hi + 1;\n continue;\n }\n for (let c = lo; c <= hi; c += stride) {\n if (nextLo <= c - 1) {\n this.appendRange(nextLo, c - 1);\n }\n nextLo = c + 1;\n }\n }\n if (nextLo <= Unicode.MAX_RUNE) {\n this.appendRange(nextLo, Unicode.MAX_RUNE);\n }\n return this;\n }\n\n // appendTableWithSign() calls append{,Negated}Table depending on sign.\n // Does not mutate |table|.\n appendTableWithSign(table, sign) {\n return sign < 0 ? this.appendNegatedTable(table) : this.appendTable(table);\n }\n\n // negateClass() negates this CharClass, which must already be clean.\n negateClass() {\n let nextLo = 0; // lo end of next class to add\n let w = 0; // write index\n for (let i = 0; i < this.len; i += 2) {\n const lo = this.r[i];\n const hi = this.r[i + 1];\n if (nextLo <= lo - 1) {\n this.r[w] = nextLo;\n this.r[w + 1] = lo - 1;\n w += 2;\n }\n nextLo = hi + 1;\n }\n this.len = w;\n if (nextLo <= Unicode.MAX_RUNE) {\n this.r[this.len++] = nextLo;\n this.r[this.len++] = Unicode.MAX_RUNE;\n }\n return this;\n }\n\n // appendClassWithSign() calls appendClass() if sign is +1 or\n // appendNegatedClass if sign is -1. Does not mutate |x|.\n appendClassWithSign(x, sign) {\n return sign < 0 ? this.appendNegatedClass(x) : this.appendClass(x);\n }\n\n // appendGroup() appends CharGroup |g| to this CharClass, folding iff\n // |foldCase|. Does not mutate |g|.\n appendGroup(g, foldCase) {\n let cls = g.cls;\n if (foldCase) {\n cls = new CharClass().appendFoldedClass(cls).cleanClass().toArray();\n }\n return this.appendClassWithSign(cls, g.sign);\n }\n toString() {\n return CharClass.charClassToString(this.r, this.len);\n }\n}\n\nclass Pair {\n static of(first, second) {\n return new Pair(first, second);\n }\n constructor(first, second) {\n this.first = first;\n this.second = second;\n }\n}\n\n// StringIterator: a stream of runes with an opaque cursor, permitting\n// rewinding. The units of the cursor are not specified beyond the\n// fact that ASCII characters are single width. (Cursor positions\n// could be UTF-8 byte indices, UTF-16 code indices or rune indices.)\n//\n// In particular, be careful with:\n// - skip: only use this to advance over ASCII characters\n// since these always have a width of 1.\n// - skipString: only use this to advance over strings which are\n// known to be at the current position, e.g. due to prior call to\n// lookingAt().\n// Only use pop() to advance over possibly non-ASCII runes.\nclass StringIterator {\n constructor(str) {\n this.str = str;\n this.position = 0;\n }\n\n // Returns the cursor position. Do not interpret the result!\n pos() {\n return this.position;\n }\n\n // Resets the cursor position to a previous value returned by pos().\n rewindTo(pos) {\n this.position = pos;\n }\n\n // Returns true unless the stream is exhausted.\n more() {\n return this.position < this.str.length;\n }\n\n // Returns the rune at the cursor position.\n // Precondition: |more()|.\n peek() {\n return this.str.codePointAt(this.position);\n }\n\n // Advances the cursor by |n| positions, which must be ASCII runes.\n //\n // (In practise, this is only ever used to skip over regexp\n // metacharacters that are ASCII, so there is no numeric difference\n // between indices into UTF-8 bytes, UTF-16 codes and runes.)\n skip(n) {\n this.position += n;\n }\n\n // Advances the cursor by the number of cursor positions in |s|.\n skipString(s) {\n this.position += s.length;\n }\n\n // Returns the rune at the cursor position, and advances the cursor\n // past it. Precondition: |more()|.\n pop() {\n const r = this.str.codePointAt(this.position);\n this.position += Utils.charCount(r);\n return r;\n }\n lookingAt(s) {\n return this.rest().startsWith(s);\n }\n\n // Returns the rest of the pattern as a Java UTF-16 string.\n rest() {\n return this.str.substring(this.position);\n }\n\n // Returns the substring from |beforePos| to the current position.\n // |beforePos| must have been previously returned by |pos()|.\n from(beforePos) {\n return this.str.substring(beforePos, this.position);\n }\n toString() {\n return this.rest();\n }\n}\n/**\n * A parser of regular expression patterns.\n *\n * The only public entry point is {@link #parse(String pattern, int flags)}.\n */\nclass Parser {\n // Unexpected error\n static ERR_INTERNAL_ERROR = 'regexp/syntax: internal error';\n\n // Parse errors\n static ERR_INVALID_CHAR_RANGE = 'invalid character class range';\n static ERR_INVALID_ESCAPE = 'invalid escape sequence';\n static ERR_INVALID_NAMED_CAPTURE = 'invalid named capture';\n static ERR_INVALID_PERL_OP = 'invalid or unsupported Perl syntax';\n static ERR_INVALID_REPEAT_OP = 'invalid nested repetition operator';\n static ERR_INVALID_REPEAT_SIZE = 'invalid repeat count';\n static ERR_MISSING_BRACKET = 'missing closing ]';\n static ERR_MISSING_PAREN = 'missing closing )';\n static ERR_MISSING_REPEAT_ARGUMENT = 'missing argument to repetition operator';\n static ERR_TRAILING_BACKSLASH = 'trailing backslash at end of expression';\n static ERR_DUPLICATE_NAMED_CAPTURE = 'duplicate capture group name';\n static ERR_UNEXPECTED_PAREN = 'unexpected )';\n static ERR_NESTING_DEPTH = 'expression nests too deeply';\n static ERR_LARGE = 'expression too large';\n\n // maxHeight is the maximum height of a regexp parse tree.\n // It is somewhat arbitrarily chosen, but the idea is to be large enough\n // that no one will actually hit in real use but at the same time small enough\n // that recursion on the Regexp tree will not hit the 1GB Go stack limit.\n // The maximum amount of stack for a single recursive frame is probably\n // closer to 1kB, so this could potentially be raised, but it seems unlikely\n // that people have regexps nested even this deeply.\n // We ran a test on Google's C++ code base and turned up only\n // a single use case with depth > 100; it had depth 128.\n // Using depth 1000 should be plenty of margin.\n // As an optimization, we don't even bother calculating heights\n // until we've allocated at least maxHeight Regexp structures.\n static MAX_HEIGHT = 1000;\n\n // maxSize is the maximum size of a compiled regexp in Insts.\n // It too is somewhat arbitrarily chosen, but the idea is to be large enough\n // to allow significant regexps while at the same time small enough that\n // the compiled form will not take up too much memory.\n // 128 MB is enough for a 3.3 million Inst structures, which roughly\n // corresponds to a 3.3 MB regexp.\n static MAX_SIZE = 3355443; // 128 << 20 / (5 * 8) (instSize = byte, 2 uint32, slice is 5 64-bit words)\n\n // maxRunes is the maximum number of runes allowed in a regexp tree\n // counting the runes in all the nodes.\n // Ignoring character classes p.numRunes is always less than the length of the regexp.\n // Character classes can make it much larger: each \\pL adds 1292 runes.\n // 128 MB is enough for 32M runes, which is over 26k \\pL instances.\n // Note that repetitions do not make copies of the rune slices,\n // so \\pL{1000} is only one rune slice, not 1000.\n // We could keep a cache of character classes we've seen,\n // so that all the \\pL we see use the same rune list,\n // but that doesn't remove the problem entirely:\n // consider something like [\\pL01234][\\pL01235][\\pL01236]...[\\pL^&*()].\n // And because the Rune slice is exposed directly in the Regexp,\n // there is not an opportunity to change the representation to allow\n // partial sharing between different character classes.\n // So the limit is the best we can do.\n static MAX_RUNES = 33554432; // 128 << 20 / 4 (runeSize, int32 is 4 bytes)\n\n // RangeTables are represented as int[][], a list of triples (start, end,\n // stride).\n static ANY_TABLE() {\n return [[0, Unicode.MAX_RUNE, 1]];\n }\n\n // unicodeTable() returns the Unicode RangeTable identified by name\n // and the table of additional fold-equivalent code points.\n // Returns null if |name| does not identify a Unicode character range.\n static unicodeTable(name) {\n if (name === 'Any') {\n return Pair.of(Parser.ANY_TABLE(), Parser.ANY_TABLE());\n }\n if (UnicodeTables.CATEGORIES.has(name)) {\n return Pair.of(UnicodeTables.CATEGORIES.get(name), UnicodeTables.FOLD_CATEGORIES.get(name));\n }\n if (UnicodeTables.SCRIPTS.has(name)) {\n return Pair.of(UnicodeTables.SCRIPTS.get(name), UnicodeTables.FOLD_SCRIPT.get(name));\n }\n return null;\n }\n\n // minFoldRune returns the minimum rune fold-equivalent to r.\n static minFoldRune(r) {\n if (r < Unicode.MIN_FOLD || r > Unicode.MAX_FOLD) {\n return r;\n }\n let min = r;\n const r0 = r;\n for (r = Unicode.simpleFold(r); r !== r0; r = Unicode.simpleFold(r)) {\n if (min > r) {\n min = r;\n }\n }\n return min;\n }\n\n // leadingRegexp returns the leading regexp that re begins with.\n // The regexp refers to storage in re or its children.\n static leadingRegexp(re) {\n if (re.op === Regexp.Op.EMPTY_MATCH) {\n return null;\n }\n if (re.op === Regexp.Op.CONCAT && re.subs.length > 0) {\n const sub = re.subs[0];\n if (sub.op === Regexp.Op.EMPTY_MATCH) {\n return null;\n }\n return sub;\n }\n return re;\n }\n static literalRegexp(s, flags) {\n const re = new Regexp(Regexp.Op.LITERAL);\n re.flags = flags;\n re.runes = Utils.stringToRunes(s);\n return re;\n }\n /**\n * Parse regular expression pattern {@code pattern} with mode flags {@code flags}.\n * @param {string} pattern\n * @param {number} flags\n */\n static parse(pattern, flags) {\n return new Parser(pattern, flags).parseInternal();\n }\n\n // parseRepeat parses {min} (max=min) or {min,} (max=-1) or {min,max}.\n // If |t| is not of that form, it returns -1.\n // If |t| has the right form but the values are negative or too big,\n // it returns -2.\n // On success, returns a nonnegative number encoding min/max in the\n // high/low signed halfwords of the result. (Note: min >= 0; max may\n // be -1.)\n //\n // On success, advances |t| beyond the repeat; otherwise |t.pos()| is\n // undefined.\n static parseRepeat(t) {\n const start = t.pos();\n if (!t.more() || !t.lookingAt('{')) {\n return -1;\n }\n t.skip(1);\n const min = Parser.parseInt(t);\n if (min === -1) {\n return -1;\n }\n if (!t.more()) {\n return -1;\n }\n let max;\n if (!t.lookingAt(',')) {\n max = min;\n } else {\n t.skip(1);\n if (!t.more()) {\n return -1;\n }\n if (t.lookingAt('}')) {\n max = -1;\n } else if ((max = Parser.parseInt(t)) === -1) {\n return -1;\n }\n }\n if (!t.more() || !t.lookingAt('}')) {\n return -1;\n }\n t.skip(1);\n if (min < 0 || min > 1000 || max === -2 || max > 1000 || max >= 0 && min > max) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_REPEAT_SIZE, t.from(start));\n }\n return min << 16 | max & Unicode.MAX_BMP;\n }\n\n // isValidCaptureName reports whether name\n // is a valid capture name: [A-Za-z0-9_]+.\n // PCRE limits names to 32 bytes.\n // Python rejects names starting with digits.\n // We don't enforce either of those.\n static isValidCaptureName(name) {\n if (name.length === 0) {\n return false;\n }\n for (let i = 0; i < name.length; i++) {\n const c = name.codePointAt(i);\n if (c !== Codepoint.CODES.get('_') && !Utils.isalnum(c)) {\n return false;\n }\n }\n return true;\n }\n\n // parseInt parses a nonnegative decimal integer.\n // -1 => bad format. -2 => format ok, but integer overflow.\n static parseInt(t) {\n const start = t.pos();\n while (t.more() && t.peek() >= Codepoint.CODES.get('0') && t.peek() <= Codepoint.CODES.get('9')) {\n t.skip(1);\n }\n const n = t.from(start);\n if (n.length === 0 || n.length > 1 && n.codePointAt(0) === Codepoint.CODES.get('0')) {\n return -1;\n }\n if (n.length > 8) {\n return -2;\n }\n return parseFloat(n, 10);\n }\n\n // can this be represented as a character class?\n // single-rune literal string, char class, ., and .|\\n.\n static isCharClass(re) {\n return re.op === Regexp.Op.LITERAL && re.runes.length === 1 || re.op === Regexp.Op.CHAR_CLASS || re.op === Regexp.Op.ANY_CHAR_NOT_NL || re.op === Regexp.Op.ANY_CHAR;\n }\n\n // does re match r?\n static matchRune(re, r) {\n switch (re.op) {\n case Regexp.Op.LITERAL:\n return re.runes.length === 1 && re.runes[0] === r;\n case Regexp.Op.CHAR_CLASS:\n for (let i = 0; i < re.runes.length; i += 2) {\n if (re.runes[i] <= r && r <= re.runes[i + 1]) {\n return true;\n }\n }\n return false;\n case Regexp.Op.ANY_CHAR_NOT_NL:\n return r !== Codepoint.CODES.get('\\n');\n case Regexp.Op.ANY_CHAR:\n return true;\n }\n return false;\n }\n\n // mergeCharClass makes dst = dst|src.\n // The caller must ensure that dst.Op >= src.Op,\n // to reduce the amount of copying.\n static mergeCharClass(dst, src) {\n switch (dst.op) {\n case Regexp.Op.ANY_CHAR:\n break;\n case Regexp.Op.ANY_CHAR_NOT_NL:\n if (Parser.matchRune(src, Codepoint.CODES.get('\\n'))) {\n dst.op = Regexp.Op.ANY_CHAR;\n }\n break;\n case Regexp.Op.CHAR_CLASS:\n if (src.op === Regexp.Op.LITERAL) {\n dst.runes = new CharClass(dst.runes).appendLiteral(src.runes[0], src.flags).toArray();\n } else {\n dst.runes = new CharClass(dst.runes).appendClass(src.runes).toArray();\n }\n break;\n case Regexp.Op.LITERAL:\n if (src.runes[0] === dst.runes[0] && src.flags === dst.flags) {\n break;\n }\n dst.op = Regexp.Op.CHAR_CLASS;\n dst.runes = new CharClass().appendLiteral(dst.runes[0], dst.flags).appendLiteral(src.runes[0], src.flags).toArray();\n break;\n }\n }\n\n // parseEscape parses an escape sequence at the beginning of s\n // and returns the rune.\n // Pre: t at '\\\\'. Post: after escape.\n static parseEscape(t) {\n const startPos = t.pos();\n t.skip(1); // '\\\\'\n if (!t.more()) {\n throw new RE2JSSyntaxException(Parser.ERR_TRAILING_BACKSLASH);\n }\n let c = t.pop();\n bigswitch: switch (c) {\n case Codepoint.CODES.get('1'):\n case Codepoint.CODES.get('2'):\n case Codepoint.CODES.get('3'):\n case Codepoint.CODES.get('4'):\n case Codepoint.CODES.get('5'):\n case Codepoint.CODES.get('6'):\n case Codepoint.CODES.get('7'):\n {\n if (!t.more() || t.peek() < Codepoint.CODES.get('0') || t.peek() > Codepoint.CODES.get('7')) {\n break;\n }\n }\n // eslint-disable-next-line no-fallthrough\n case Codepoint.CODES.get('0'):\n {\n let r = c - Codepoint.CODES.get('0');\n for (let i = 1; i < 3; i++) {\n if (!t.more() || t.peek() < Codepoint.CODES.get('0') || t.peek() > Codepoint.CODES.get('7')) {\n break;\n }\n r = r * 8 + t.peek() - Codepoint.CODES.get('0');\n t.skip(1);\n }\n return r;\n }\n case Codepoint.CODES.get('x'):\n {\n if (!t.more()) {\n break;\n }\n c = t.pop();\n if (c === Codepoint.CODES.get('{')) {\n let nhex = 0;\n let r = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!t.more()) {\n break bigswitch;\n }\n c = t.pop();\n if (c === Codepoint.CODES.get('}')) {\n break;\n }\n const v = Utils.unhex(c);\n if (v < 0) {\n break bigswitch;\n }\n r = r * 16 + v;\n if (r > Unicode.MAX_RUNE) {\n break bigswitch;\n }\n nhex++;\n }\n if (nhex === 0) {\n break bigswitch;\n }\n return r;\n }\n const x = Utils.unhex(c);\n if (!t.more()) {\n break;\n }\n c = t.pop();\n const y = Utils.unhex(c);\n if (x < 0 || y < 0) {\n break;\n }\n return x * 16 + y;\n }\n case Codepoint.CODES.get('a'):\n return Codepoint.CODES.get('\\x07');\n case Codepoint.CODES.get('f'):\n return Codepoint.CODES.get('\\f');\n case Codepoint.CODES.get('n'):\n return Codepoint.CODES.get('\\n');\n case Codepoint.CODES.get('r'):\n return Codepoint.CODES.get('\\r');\n case Codepoint.CODES.get('t'):\n return Codepoint.CODES.get('\\t');\n case Codepoint.CODES.get('v'):\n return Codepoint.CODES.get('\\v');\n default:\n if (c <= Unicode.MAX_ASCII && !Utils.isalnum(c)) {\n return c;\n }\n break;\n }\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_ESCAPE, t.from(startPos));\n }\n\n // parseClassChar parses a character class character and returns it.\n // wholeClassPos is the position of the start of the entire class \"[...\".\n // Pre: t at class char; Post: t after it.\n static parseClassChar(t, wholeClassPos) {\n if (!t.more()) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_BRACKET, t.from(wholeClassPos));\n }\n if (t.lookingAt('\\\\')) {\n return Parser.parseEscape(t);\n }\n return t.pop();\n }\n static concatRunes(x, y) {\n return [...x, ...y];\n }\n constructor(wholeRegexp, flags = 0) {\n this.wholeRegexp = wholeRegexp;\n // Flags control the behavior of the parser and record information about\n // regexp context.\n this.flags = flags;\n // number of capturing groups seen\n this.numCap = 0;\n this.namedGroups = {};\n // Stack of parsed expressions.\n this.stack = [];\n this.free = null;\n // checks\n this.numRegexp = 0; // number of regexps allocated\n this.numRunes = 0; // number of runes in char classes\n this.repeats = 0; // product of all repetitions seen\n this.height = null; // regexp height, for height limit check\n this.size = null; // regexp compiled size, for size limit check\n }\n\n // Allocate a Regexp, from the free list if possible.\n newRegexp(op) {\n let re = this.free;\n if (re !== null && re.subs !== null && re.subs.length > 0) {\n this.free = re.subs[0];\n re.reinit();\n re.op = op;\n } else {\n re = new Regexp(op);\n this.numRegexp += 1;\n }\n return re;\n }\n reuse(re) {\n if (this.height !== null && Object.prototype.hasOwnProperty.call(this.height, re)) {\n delete this.height[re];\n }\n if (re.subs !== null && re.subs.length > 0) {\n re.subs[0] = this.free;\n }\n this.free = re;\n }\n checkLimits(re) {\n if (this.numRunes > Parser.MAX_RUNES) {\n throw new RE2JSSyntaxException(Parser.ERR_LARGE);\n }\n this.checkSize(re);\n this.checkHeight(re);\n }\n checkSize(re) {\n if (this.size === null) {\n // We haven't started tracking size yet.\n // Do a relatively cheap check to see if we need to start.\n // Maintain the product of all the repeats we've seen\n // and don't track if the total number of regexp nodes\n // we've seen times the repeat product is in budget.\n if (this.repeats === 0) {\n this.repeats = 1;\n }\n if (re.op === Regexp.Op.REPEAT) {\n let n = re.max;\n if (n === -1) {\n n = re.min;\n }\n if (n <= 0) {\n n = 1;\n }\n if (n > Parser.MAX_SIZE / this.repeats) {\n this.repeats = Parser.MAX_SIZE;\n } else {\n this.repeats *= n;\n }\n }\n if (this.numRegexp < Parser.MAX_SIZE / this.repeats) {\n return;\n }\n\n // We need to start tracking size.\n // Make the map and belatedly populate it\n // with info about everything we've constructed so far.\n this.size = {};\n for (let reEx of this.stack) {\n this.checkSize(reEx);\n }\n }\n if (this.calcSize(re, true) > Parser.MAX_SIZE) {\n throw new RE2JSSyntaxException(Parser.ERR_LARGE);\n }\n }\n calcSize(re, force = false) {\n if (!force) {\n if (Object.prototype.hasOwnProperty.call(this.size, re)) {\n return this.size[re];\n }\n }\n let size = 0;\n switch (re.op) {\n case Regexp.Op.LITERAL:\n {\n size = re.runes.length;\n break;\n }\n case Regexp.Op.CAPTURE:\n case Regexp.Op.STAR:\n {\n // star can be 1+ or 2+; assume 2 pessimistically\n size = 2 + this.calcSize(re.subs[0]);\n break;\n }\n case Regexp.Op.PLUS:\n case Regexp.Op.QUEST:\n {\n size = 1 + this.calcSize(re.subs[0]);\n break;\n }\n case Regexp.Op.CONCAT:\n {\n for (let sub of re.subs) {\n size = size + this.calcSize(sub);\n }\n break;\n }\n case Regexp.Op.ALTERNATE:\n {\n for (let sub of re.subs) {\n size = size + this.calcSize(sub);\n }\n if (re.subs.length > 1) {\n size = size + re.subs.length - 1;\n }\n break;\n }\n case Regexp.Op.REPEAT:\n {\n let sub = this.calcSize(re.subs[0]);\n if (re.max === -1) {\n if (re.min === 0) {\n size = 2 + sub; // x*\n } else {\n size = 1 + re.min * sub; // xxx+\n }\n break;\n }\n // x{2,5} = xx(x(x(x)?)?)?\n size = re.max * sub + (re.max - re.min);\n break;\n }\n }\n size = Math.max(1, size);\n this.size[re] = size;\n return size;\n }\n checkHeight(re) {\n if (this.numRegexp < Parser.MAX_HEIGHT) {\n return;\n }\n if (this.height === null) {\n this.height = {};\n for (let reEx of this.stack) {\n this.checkHeight(reEx);\n }\n }\n if (this.calcHeight(re, true) > Parser.MAX_HEIGHT) {\n throw new RE2JSSyntaxException(Parser.ERR_NESTING_DEPTH);\n }\n }\n calcHeight(re, force = false) {\n if (!force) {\n if (Object.prototype.hasOwnProperty.call(this.height, re)) {\n return this.height[re];\n }\n }\n let h = 1;\n for (let sub of re.subs) {\n const hsub = this.calcHeight(sub);\n if (h < 1 + hsub) {\n h = 1 + hsub;\n }\n }\n this.height[re] = h;\n return h;\n }\n\n // Parse stack manipulation.\n\n pop() {\n return this.stack.pop();\n }\n popToPseudo() {\n const n = this.stack.length;\n let i = n;\n while (i > 0 && !Regexp.isPseudoOp(this.stack[i - 1].op)) {\n i--;\n }\n const r = this.stack.slice(i, n);\n this.stack = this.stack.slice(0, i);\n return r;\n }\n\n // push pushes the regexp re onto the parse stack and returns the regexp.\n // Returns null for a CHAR_CLASS that can be merged with the top-of-stack.\n push(re) {\n this.numRunes += re.runes.length;\n if (re.op === Regexp.Op.CHAR_CLASS && re.runes.length === 2 && re.runes[0] === re.runes[1]) {\n if (this.maybeConcat(re.runes[0], this.flags & -2)) {\n return null;\n }\n re.op = Regexp.Op.LITERAL;\n re.runes = [re.runes[0]];\n re.flags = this.flags & -2;\n } else if (re.op === Regexp.Op.CHAR_CLASS && re.runes.length === 4 && re.runes[0] === re.runes[1] && re.runes[2] === re.runes[3] && Unicode.simpleFold(re.runes[0]) === re.runes[2] && Unicode.simpleFold(re.runes[2]) === re.runes[0] || re.op === Regexp.Op.CHAR_CLASS && re.runes.length === 2 && re.runes[0] + 1 === re.runes[1] && Unicode.simpleFold(re.runes[0]) === re.runes[1] && Unicode.simpleFold(re.runes[1]) === re.runes[0]) {\n // Case-insensitive rune like [Aa] or [Δδ].\n if (this.maybeConcat(re.runes[0], this.flags | RE2Flags.FOLD_CASE)) {\n return null;\n }\n // Rewrite as (case-insensitive) literal.\n re.op = Regexp.Op.LITERAL;\n re.runes = [re.runes[0]];\n re.flags = this.flags | RE2Flags.FOLD_CASE;\n } else {\n // Incremental concatenation.\n this.maybeConcat(-1, 0);\n }\n this.stack.push(re);\n this.checkLimits(re);\n return re;\n }\n\n // maybeConcat implements incremental concatenation\n // of literal runes into string nodes. The parser calls this\n // before each push, so only the top fragment of the stack\n // might need processing. Since this is called before a push,\n // the topmost literal is no longer subject to operators like *\n // (Otherwise ab* would turn into (ab)*.)\n // If (r >= 0 and there's a node left over, maybeConcat uses it\n // to push r with the given flags.\n // maybeConcat reports whether r was pushed.\n maybeConcat(r, flags) {\n const n = this.stack.length;\n if (n < 2) {\n return false;\n }\n const re1 = this.stack[n - 1];\n const re2 = this.stack[n - 2];\n if (re1.op !== Regexp.Op.LITERAL || re2.op !== Regexp.Op.LITERAL || (re1.flags & RE2Flags.FOLD_CASE) !== (re2.flags & RE2Flags.FOLD_CASE)) {\n return false;\n }\n // Push re1 into re2.\n re2.runes = Parser.concatRunes(re2.runes, re1.runes);\n // Reuse re1 if possible.\n if (r >= 0) {\n re1.runes = [r];\n re1.flags = flags;\n return true;\n }\n this.pop();\n this.reuse(re1);\n return false; // did not push r\n }\n\n // newLiteral returns a new LITERAL Regexp with the given flags\n newLiteral(r, flags) {\n const re = this.newRegexp(Regexp.Op.LITERAL);\n re.flags = flags;\n if ((flags & RE2Flags.FOLD_CASE) !== 0) {\n r = Parser.minFoldRune(r);\n }\n re.runes = [r];\n return re;\n }\n\n // literal pushes a literal regexp for the rune r on the stack\n // and returns that regexp.\n literal(r) {\n this.push(this.newLiteral(r, this.flags));\n }\n\n // op pushes a regexp with the given op onto the stack\n // and returns that regexp.\n op(op) {\n const re = this.newRegexp(op);\n re.flags = this.flags;\n return this.push(re);\n }\n\n // repeat replaces the top stack element with itself repeated according to\n // op, min, max. beforePos is the start position of the repetition operator.\n // Pre: t is positioned after the initial repetition operator.\n // Post: t advances past an optional perl-mode '?', or stays put.\n // Or, it fails with RE2JSSyntaxException.\n repeat(op, min, max, beforePos, t, lastRepeatPos) {\n let flags = this.flags;\n if ((flags & RE2Flags.PERL_X) !== 0) {\n if (t.more() && t.lookingAt('?')) {\n t.skip(1);\n flags ^= RE2Flags.NON_GREEDY;\n }\n if (lastRepeatPos !== -1) {\n // In Perl it is not allowed to stack repetition operators:\n // a** is a syntax error, not a doubled star, and a++ means\n // something else entirely, which we don't support!\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_REPEAT_OP, t.from(lastRepeatPos));\n }\n }\n const n = this.stack.length;\n if (n === 0) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_REPEAT_ARGUMENT, t.from(beforePos));\n }\n const sub = this.stack[n - 1];\n if (Regexp.isPseudoOp(sub.op)) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_REPEAT_ARGUMENT, t.from(beforePos));\n }\n const re = this.newRegexp(op);\n re.min = min;\n re.max = max;\n re.flags = flags;\n re.subs = [sub];\n this.stack[n - 1] = re;\n this.checkLimits(re);\n if (op === Regexp.Op.REPEAT && (min >= 2 || max >= 2) && !this.repeatIsValid(re, 1000)) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_REPEAT_SIZE, t.from(beforePos));\n }\n }\n\n // repeatIsValid reports whether the repetition re is valid.\n // Valid means that the combination of the top-level repetition\n // and any inner repetitions does not exceed n copies of the\n // innermost thing.\n // This function rewalks the regexp tree and is called for every repetition,\n // so we have to worry about inducing quadratic behavior in the parser.\n // We avoid this by only calling repeatIsValid when min or max >= 2.\n // In that case the depth of any >= 2 nesting can only get to 9 without\n // triggering a parse error, so each subtree can only be rewalked 9 times.\n repeatIsValid(re, n) {\n if (re.op === Regexp.Op.REPEAT) {\n let m = re.max;\n if (m === 0) {\n return true;\n }\n if (m < 0) {\n m = re.min;\n }\n if (m > n) {\n return false;\n }\n if (m > 0) {\n n = Math.trunc(n / m);\n }\n }\n for (let sub of re.subs) {\n if (!this.repeatIsValid(sub, n)) {\n return false;\n }\n }\n return true;\n }\n\n // concat replaces the top of the stack (above the topmost '|' or '(') with\n // its concatenation.\n concat() {\n this.maybeConcat(-1, 0);\n const subs = this.popToPseudo();\n if (subs.length === 0) {\n return this.push(this.newRegexp(Regexp.Op.EMPTY_MATCH));\n }\n return this.push(this.collapse(subs, Regexp.Op.CONCAT));\n }\n\n // alternate replaces the top of the stack (above the topmost '(') with its\n // alternation.\n alternate() {\n // Scan down to find pseudo-operator (.\n // There are no | above (.\n const subs = this.popToPseudo();\n // Make sure top class is clean.\n // All the others already are (see swapVerticalBar).\n if (subs.length > 0) {\n this.cleanAlt(subs[subs.length - 1]);\n }\n // Empty alternate is special case\n // (shouldn't happen but easy to handle).\n if (subs.length === 0) {\n return this.push(this.newRegexp(Regexp.Op.NO_MATCH));\n }\n return this.push(this.collapse(subs, Regexp.Op.ALTERNATE));\n }\n\n // cleanAlt cleans re for eventual inclusion in an alternation.\n cleanAlt(re) {\n if (re.op === Regexp.Op.CHAR_CLASS) {\n re.runes = new CharClass(re.runes).cleanClass().toArray();\n if (re.runes.length === 2 && re.runes[0] === 0 && re.runes[1] === Unicode.MAX_RUNE) {\n re.runes = [];\n re.op = Regexp.Op.ANY_CHAR;\n } else if (re.runes.length === 4 && re.runes[0] === 0 && re.runes[1] === Codepoint.CODES.get('\\n') - 1 && re.runes[2] === Codepoint.CODES.get('\\n') + 1 && re.runes[3] === Unicode.MAX_RUNE) {\n re.runes = [];\n re.op = Regexp.Op.ANY_CHAR_NOT_NL;\n }\n }\n }\n\n // collapse returns the result of applying op to subs[start:end].\n // If (sub contains op nodes, they all get hoisted up\n // so that there is never a concat of a concat or an\n // alternate of an alternate.\n collapse(subs, op) {\n if (subs.length === 1) {\n return subs[0];\n }\n // Concatenate subs iff op is same.\n // Compute length in first pass.\n let len = 0;\n for (let sub of subs) {\n len += sub.op === op ? sub.subs.length : 1;\n }\n let newsubs = new Array(len).fill(null);\n let i = 0;\n for (let sub of subs) {\n if (sub.op === op) {\n newsubs.splice(i, sub.subs.length, ...sub.subs);\n i += sub.subs.length;\n this.reuse(sub);\n } else {\n newsubs[i++] = sub;\n }\n }\n let re = this.newRegexp(op);\n re.subs = newsubs;\n if (op === Regexp.Op.ALTERNATE) {\n // re.subs = this.factor(re.subs, re.flags)\n re.subs = this.factor(re.subs);\n if (re.subs.length === 1) {\n const old = re;\n re = re.subs[0];\n this.reuse(old);\n }\n }\n return re;\n }\n\n // factor factors common prefixes from the alternation list sub. It\n // returns a replacement list that reuses the same storage and frees\n // (passes to p.reuse) any removed *Regexps.\n //\n // For example,\n // ABC|ABD|AEF|BCX|BCY\n // simplifies by literal prefix extraction to\n // A(B(C|D)|EF)|BC(X|Y)\n // which simplifies by character class introduction to\n // A(B[CD]|EF)|BC[XY]\n //\n factor(array) {\n if (array.length < 2) {\n return array;\n }\n // The following code is subtle, because it's a literal JS\n // translation of code that makes clever use of Go \"slices\".\n // A slice is a triple (array, offset, length), and the Go\n // implementation uses two slices, |sub| and |out| backed by the\n // same array. In JS, we have to be explicit about all of these\n // variables, so:\n //\n // Go JS\n // sub (array, s, lensub)\n // out (array, 0, lenout) // (always a prefix of |array|)\n //\n // In the comments we'll use the logical notation of go slices, e.g. sub[i]\n // even though the JS code will read array[s + i].\n\n let s = 0; // offset of first |sub| within array.\n let lensub = array.length; // = len(sub)\n let lenout = 0; // = len(out)\n // Round 1: Factor out common literal prefixes.\n // Note: (str, strlen) and (istr, istrlen) are like Go slices\n // onto a prefix of some Regexp's runes array (hence offset=0).\n let str = null;\n let strlen = 0;\n let strflags = 0;\n let start = 0;\n for (let i = 0; i <= lensub; i++) {\n // Invariant: the Regexps that were in sub[0:start] have been\n // used or marked for reuse, and the slice space has been reused\n // for out (len <= start).\n //\n // Invariant: sub[start:i] consists of regexps that all begin\n // with str as modified by strflags.\n let istr = null;\n let istrlen = 0;\n let iflags = 0;\n if (i < lensub) {\n // NB, we inlined Go's leadingString() since Java has no pair return.\n let re = array[s + i];\n if (re.op === Regexp.Op.CONCAT && re.subs.length > 0) {\n re = re.subs[0];\n }\n if (re.op === Regexp.Op.LITERAL) {\n istr = re.runes;\n istrlen = re.runes.length;\n iflags = re.flags & RE2Flags.FOLD_CASE;\n }\n // istr is the leading literal string that re begins with.\n // The string refers to storage in re or its children.\n if (iflags === strflags) {\n let same = 0;\n while (same < strlen && same < istrlen && str[same] === istr[same]) {\n same++;\n }\n if (same > 0) {\n // Matches at least one rune in current range.\n // Keep going around.\n strlen = same;\n continue;\n }\n }\n }\n // Found end of a run with common leading literal string:\n // sub[start:i] all begin with str[0:strlen], but sub[i]\n // does not even begin with str[0].\n //\n // Factor out common string and append factored expression to out.\n if (i === start) ; else if (i === start + 1) {\n // Just one: don't bother factoring.\n array[lenout++] = array[s + start];\n } else {\n // Construct factored form: prefix(suffix1|suffix2|...)\n const prefix = this.newRegexp(Regexp.Op.LITERAL);\n prefix.flags = strflags;\n prefix.runes = str.slice(0, strlen);\n for (let j = start; j < i; j++) {\n array[s + j] = this.removeLeadingString(array[s + j], strlen);\n this.checkLimits(array[s + j]);\n }\n // Recurse.\n const suffix = this.collapse(array.slice(s + start, s + i), Regexp.Op.ALTERNATE);\n const re = this.newRegexp(Regexp.Op.CONCAT);\n re.subs = [prefix, suffix];\n array[lenout++] = re;\n }\n // Prepare for next iteration.\n start = i;\n str = istr;\n strlen = istrlen;\n strflags = iflags;\n }\n // In Go: sub = out\n lensub = lenout;\n s = 0;\n // Round 2: Factor out common complex prefixes,\n // just the first piece of each concatenation,\n // whatever it is. This is good enough a lot of the time.\n start = 0;\n lenout = 0;\n let first = null;\n for (let i = 0; i <= lensub; i++) {\n // Invariant: the Regexps that were in sub[0:start] have been\n // used or marked for reuse, and the slice space has been reused\n // for out (lenout <= start).\n //\n // Invariant: sub[start:i] consists of regexps that all begin with\n // ifirst.\n let ifirst = null;\n if (i < lensub) {\n ifirst = Parser.leadingRegexp(array[s + i]);\n if (first !== null && first.equals(ifirst) && (Parser.isCharClass(first) || first.op === Regexp.Op.REPEAT && first.min === first.max && Parser.isCharClass(first.subs[0]))) {\n continue;\n }\n }\n // Found end of a run with common leading regexp:\n // sub[start:i] all begin with first but sub[i] does not.\n //\n // Factor out common regexp and append factored expression to out.\n if (i === start) ; else if (i === start + 1) {\n // Just one: don't bother factoring.\n array[lenout++] = array[s + start];\n } else {\n // Construct factored form: prefix(suffix1|suffix2|...)\n const prefix = first;\n for (let j = start; j < i; j++) {\n const reuse = j !== start; // prefix came from sub[start]\n array[s + j] = this.removeLeadingRegexp(array[s + j], reuse);\n this.checkLimits(array[s + j]);\n }\n // recurse\n const suffix = this.collapse(array.slice(s + start, s + i), Regexp.Op.ALTERNATE);\n const re = this.newRegexp(Regexp.Op.CONCAT);\n re.subs = [prefix, suffix];\n array[lenout++] = re;\n }\n // Prepare for next iteration.\n start = i;\n first = ifirst;\n }\n // In Go: sub = out\n lensub = lenout;\n s = 0;\n // Round 3: Collapse runs of single literals into character classes.\n start = 0;\n lenout = 0;\n for (let i = 0; i <= lensub; i++) {\n // Invariant: the Regexps that were in sub[0:start] have been\n // used or marked for reuse, and the slice space has been reused\n // for out (lenout <= start).\n //\n // Invariant: sub[start:i] consists of regexps that are either\n // literal runes or character classes.\n if (i < lensub && Parser.isCharClass(array[s + i])) {\n continue;\n }\n // sub[i] is not a char or char class;\n // emit char class for sub[start:i]...\n if (i === start) ; else if (i === start + 1) {\n // Just one: don't bother factoring.\n array[lenout++] = array[s + start];\n } else {\n // Make new char class.\n // Start with most complex regexp in sub[start].\n let max = start;\n for (let j = start + 1; j < i; j++) {\n const subMax = array[s + max];\n const subJ = array[s + j];\n if (subMax.op < subJ.op || subMax.op === subJ.op && (subMax.runes !== null ? subMax.runes.length : 0) < (subJ.runes !== null ? subJ.runes.length : 0)) {\n max = j;\n }\n }\n // swap sub[start], sub[max].\n const tmp = array[s + start];\n array[s + start] = array[s + max];\n array[s + max] = tmp;\n for (let j = start + 1; j < i; j++) {\n Parser.mergeCharClass(array[s + start], array[s + j]);\n this.reuse(array[s + j]);\n }\n this.cleanAlt(array[s + start]);\n array[lenout++] = array[s + start];\n }\n // ... and then emit sub[i].\n if (i < lensub) {\n array[lenout++] = array[s + i];\n }\n start = i + 1;\n }\n // In Go: sub = out\n lensub = lenout;\n s = 0;\n // Round 4: Collapse runs of empty matches into a single empty match.\n start = 0;\n lenout = 0;\n for (let i = 0; i < lensub; ++i) {\n if (i + 1 < lensub && array[s + i].op === Regexp.Op.EMPTY_MATCH && array[s + i + 1].op === Regexp.Op.EMPTY_MATCH) {\n continue;\n }\n array[lenout++] = array[s + i];\n }\n // In Go: sub = out\n lensub = lenout;\n s = 0;\n return array.slice(s, lensub);\n }\n\n // removeLeadingString removes the first n leading runes\n // from the beginning of re. It returns the replacement for re.\n removeLeadingString(re, n) {\n if (re.op === Regexp.Op.CONCAT && re.subs.length > 0) {\n // Removing a leading string in a concatenation\n // might simplify the concatenation.\n const sub = this.removeLeadingString(re.subs[0], n);\n re.subs[0] = sub;\n if (sub.op === Regexp.Op.EMPTY_MATCH) {\n this.reuse(sub);\n switch (re.subs.length) {\n case 0:\n case 1:\n // Impossible but handle.\n re.op = Regexp.Op.EMPTY_MATCH;\n re.subs = null;\n break;\n case 2:\n {\n const old = re;\n re = re.subs[1];\n this.reuse(old);\n break;\n }\n default:\n re.subs = re.subs.slice(1, re.subs.length);\n break;\n }\n }\n return re;\n }\n if (re.op === Regexp.Op.LITERAL) {\n re.runes = re.runes.slice(n, re.runes.length);\n if (re.runes.length === 0) {\n re.op = Regexp.Op.EMPTY_MATCH;\n }\n }\n return re;\n }\n\n // removeLeadingRegexp removes the leading regexp in re.\n // It returns the replacement for re.\n // If reuse is true, it passes the removed regexp (if no longer needed) to\n // reuse.\n removeLeadingRegexp(re, reuse) {\n if (re.op === Regexp.Op.CONCAT && re.subs.length > 0) {\n if (reuse) {\n this.reuse(re.subs[0]);\n }\n re.subs = re.subs.slice(1, re.subs.length);\n switch (re.subs.length) {\n case 0:\n {\n re.op = Regexp.Op.EMPTY_MATCH;\n re.subs = Regexp.emptySubs();\n break;\n }\n case 1:\n {\n const old = re;\n re = re.subs[0];\n this.reuse(old);\n break;\n }\n }\n return re;\n }\n if (reuse) {\n this.reuse(re);\n }\n return this.newRegexp(Regexp.Op.EMPTY_MATCH);\n }\n parseInternal() {\n if ((this.flags & RE2Flags.LITERAL) !== 0) {\n // Trivial parser for literal string.\n return Parser.literalRegexp(this.wholeRegexp, this.flags);\n }\n // Otherwise, must do real work.\n let lastRepeatPos = -1;\n let min = -1;\n let max = -1;\n const t = new StringIterator(this.wholeRegexp);\n while (t.more()) {\n {\n let repeatPos = -1;\n bigswitch: switch (t.peek()) {\n case Codepoint.CODES.get('('):\n if ((this.flags & RE2Flags.PERL_X) !== 0 && t.lookingAt('(?')) {\n // Flag changes and non-capturing groups.\n this.parsePerlFlags(t);\n break;\n }\n this.op(Regexp.Op.LEFT_PAREN).cap = ++this.numCap;\n t.skip(1); // '('\n break;\n case Codepoint.CODES.get('|'):\n this.parseVerticalBar(); // '|'\n t.skip(1); // '|'\n break;\n case Codepoint.CODES.get(')'):\n this.parseRightParen();\n t.skip(1); // ')'\n break;\n case Codepoint.CODES.get('^'):\n if ((this.flags & RE2Flags.ONE_LINE) !== 0) {\n this.op(Regexp.Op.BEGIN_TEXT);\n } else {\n this.op(Regexp.Op.BEGIN_LINE);\n }\n t.skip(1); // '^'\n break;\n case Codepoint.CODES.get('$'):\n if ((this.flags & RE2Flags.ONE_LINE) !== 0) {\n this.op(Regexp.Op.END_TEXT).flags |= RE2Flags.WAS_DOLLAR;\n } else {\n this.op(Regexp.Op.END_LINE);\n }\n t.skip(1); // '$'\n break;\n case Codepoint.CODES.get('.'):\n if ((this.flags & RE2Flags.DOT_NL) !== 0) {\n this.op(Regexp.Op.ANY_CHAR);\n } else {\n this.op(Regexp.Op.ANY_CHAR_NOT_NL);\n }\n t.skip(1); // '.'\n break;\n case Codepoint.CODES.get('['):\n this.parseClass(t);\n break;\n case Codepoint.CODES.get('*'):\n case Codepoint.CODES.get('+'):\n case Codepoint.CODES.get('?'):\n {\n repeatPos = t.pos();\n let op = null;\n switch (t.pop()) {\n case Codepoint.CODES.get('*'):\n op = Regexp.Op.STAR;\n break;\n case Codepoint.CODES.get('+'):\n op = Regexp.Op.PLUS;\n break;\n case Codepoint.CODES.get('?'):\n op = Regexp.Op.QUEST;\n break;\n }\n this.repeat(op, min, max, repeatPos, t, lastRepeatPos);\n // (min and max are now dead.)\n break;\n }\n case Codepoint.CODES.get('{'):\n {\n repeatPos = t.pos();\n const minMax = Parser.parseRepeat(t);\n if (minMax < 0) {\n // If the repeat cannot be parsed, { is a literal.\n t.rewindTo(repeatPos);\n this.literal(t.pop()); // '{'\n break;\n }\n min = minMax >> 16;\n max = (minMax & Unicode.MAX_BMP) << 16 >> 16;\n this.repeat(Regexp.Op.REPEAT, min, max, repeatPos, t, lastRepeatPos);\n break;\n }\n case Codepoint.CODES.get('\\\\'):\n {\n const savedPos = t.pos();\n t.skip(1); // '\\\\'\n if ((this.flags & RE2Flags.PERL_X) !== 0 && t.more()) {\n const c = t.pop();\n switch (c) {\n case Codepoint.CODES.get('A'):\n this.op(Regexp.Op.BEGIN_TEXT);\n break bigswitch;\n case Codepoint.CODES.get('b'):\n this.op(Regexp.Op.WORD_BOUNDARY);\n break bigswitch;\n case Codepoint.CODES.get('B'):\n this.op(Regexp.Op.NO_WORD_BOUNDARY);\n break bigswitch;\n case Codepoint.CODES.get('C'):\n // any byte; not supported\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_ESCAPE, '\\\\C');\n case Codepoint.CODES.get('Q'):\n {\n // \\Q ... \\E: the ... is always literals\n let lit = t.rest();\n const i = lit.indexOf('\\\\E');\n if (i >= 0) {\n lit = lit.substring(0, i);\n }\n t.skipString(lit);\n t.skipString('\\\\E');\n let j = 0;\n while (j < lit.length) {\n const codepoint = lit.codePointAt(j);\n this.literal(codepoint);\n j += Utils.charCount(codepoint);\n }\n break bigswitch;\n }\n case Codepoint.CODES.get('z'):\n this.op(Regexp.Op.END_TEXT);\n break bigswitch;\n default:\n t.rewindTo(savedPos);\n break;\n }\n }\n const re = this.newRegexp(Regexp.Op.CHAR_CLASS);\n re.flags = this.flags;\n // Look for Unicode character group like \\p{Han}\n if (t.lookingAt('\\\\p') || t.lookingAt('\\\\P')) {\n const cc = new CharClass();\n if (this.parseUnicodeClass(t, cc)) {\n re.runes = cc.toArray();\n this.push(re);\n break bigswitch;\n }\n }\n // Perl character class escape.\n const cc = new CharClass();\n if (this.parsePerlClassEscape(t, cc)) {\n re.runes = cc.toArray();\n this.push(re);\n break bigswitch;\n }\n t.rewindTo(savedPos);\n this.reuse(re);\n // Ordinary single-character escape.\n this.literal(Parser.parseEscape(t));\n break;\n }\n default:\n this.literal(t.pop());\n break;\n }\n lastRepeatPos = repeatPos;\n }\n }\n this.concat();\n if (this.swapVerticalBar()) {\n this.pop(); // pop vertical bar\n }\n this.alternate();\n const n = this.stack.length;\n if (n !== 1) {\n throw new RE2JSSyntaxException(Parser.ERR_MISSING_PAREN, this.wholeRegexp);\n }\n this.stack[0].namedGroups = this.namedGroups;\n return this.stack[0];\n }\n\n // parsePerlFlags parses a Perl flag setting or non-capturing group or both,\n // like (?i) or (?: or (?i:.\n // Pre: t at \"(?\". Post: t after \")\".\n // Sets numCap.\n parsePerlFlags(t) {\n const startPos = t.pos();\n // Check for named captures, first introduced in Python's regexp library.\n // As usual, there are three slightly different syntaxes:\n //\n // (?Pexpr) the original, introduced by Python\n // (?expr) the .NET alteration, adopted by Perl 5.10\n // (?'name'expr) another .NET alteration, adopted by Perl 5.10\n //\n // Perl 5.10 gave in and implemented the Python version too,\n // but they claim that the last two are the preferred forms.\n // PCRE and languages based on it (specifically, PHP and Ruby)\n // support all three as well. EcmaScript 4 uses only the Python form.\n //\n // In both the open source world (via Code Search) and the\n // Google source tree, (?Pexpr) and (?expr) are the\n // dominant forms of named captures and both are supported.\n const s = t.rest();\n if (s.startsWith('(?P<') || s.startsWith('(?<')) {\n // Pull out name.\n const begin = s.charAt(2) === 'P' ? 4 : 3;\n const end = s.indexOf('>');\n if (end < 0) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_NAMED_CAPTURE, s);\n }\n const name = s.substring(begin, end); // \"name\"\n t.skipString(name);\n t.skip(begin + 1); // \"(?P<>\" or \"(?<>\"\n if (!Parser.isValidCaptureName(name)) {\n // \"(?P\"\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_NAMED_CAPTURE, s.substring(0, end + 1)); // \"(?P\" or \"(?\"\n }\n // Like ordinary capture, but named.\n const re = this.op(Regexp.Op.LEFT_PAREN);\n re.cap = ++this.numCap;\n if (this.namedGroups[name]) {\n throw new RE2JSSyntaxException(Parser.ERR_DUPLICATE_NAMED_CAPTURE, name);\n }\n this.namedGroups[name] = this.numCap;\n re.name = name;\n return;\n }\n // Non-capturing group. Might also twiddle Perl flags.\n t.skip(2); // \"(?\"\n\n let flags = this.flags;\n let sign = 1;\n let sawFlag = false;\n loop: while (t.more()) {\n {\n const c = t.pop();\n switch (c) {\n case Codepoint.CODES.get('i'):\n flags |= RE2Flags.FOLD_CASE;\n sawFlag = true;\n break;\n case Codepoint.CODES.get('m'):\n flags &= -17;\n sawFlag = true;\n break;\n case Codepoint.CODES.get('s'):\n flags |= RE2Flags.DOT_NL;\n sawFlag = true;\n break;\n case Codepoint.CODES.get('U'):\n flags |= RE2Flags.NON_GREEDY;\n sawFlag = true;\n break;\n // Switch to negation.\n case Codepoint.CODES.get('-'):\n if (sign < 0) {\n break loop;\n }\n sign = -1;\n // Invert flags so that | above turn into &~ and vice versa.\n // We'll invert flags again before using it below.\n flags = ~flags;\n sawFlag = false;\n break;\n // End of flags, starting group or not.\n case Codepoint.CODES.get(':'):\n case Codepoint.CODES.get(')'):\n if (sign < 0) {\n if (!sawFlag) {\n break loop;\n }\n flags = ~flags;\n }\n if (c === Codepoint.CODES.get(':')) {\n // Open new group\n this.op(Regexp.Op.LEFT_PAREN);\n }\n this.flags = flags;\n return;\n default:\n // Flags.\n break loop;\n }\n }\n }\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_PERL_OP, t.from(startPos));\n }\n\n // parseVerticalBar handles a | in the input.\n parseVerticalBar() {\n this.concat();\n // The concatenation we just parsed is on top of the stack.\n // If it sits above an opVerticalBar, swap it below\n // (things below an opVerticalBar become an alternation).\n // Otherwise, push a new vertical bar.\n if (!this.swapVerticalBar()) {\n this.op(Regexp.Op.VERTICAL_BAR);\n }\n }\n\n // If the top of the stack is an element followed by an opVerticalBar\n // swapVerticalBar swaps the two and returns true.\n // Otherwise it returns false.\n swapVerticalBar() {\n const n = this.stack.length;\n // If above and below vertical bar are literal or char class,\n // can merge into a single char class.\n if (n >= 3 && this.stack[n - 2].op === Regexp.Op.VERTICAL_BAR && Parser.isCharClass(this.stack[n - 1]) && Parser.isCharClass(this.stack[n - 3])) {\n let re1 = this.stack[n - 1];\n let re3 = this.stack[n - 3];\n // Make re3 the more complex of the two.\n if (re1.op > re3.op) {\n const tmp = re3;\n re3 = re1;\n re1 = tmp;\n this.stack[n - 3] = re3;\n }\n Parser.mergeCharClass(re3, re1);\n this.reuse(re1);\n this.pop();\n return true;\n }\n if (n >= 2) {\n const re1 = this.stack[n - 1];\n const re2 = this.stack[n - 2];\n if (re2.op === Regexp.Op.VERTICAL_BAR) {\n if (n >= 3) {\n // Now out of reach.\n // Clean opportunistically.\n this.cleanAlt(this.stack[n - 3]);\n }\n this.stack[n - 2] = re1;\n this.stack[n - 1] = re2;\n return true;\n }\n }\n return false;\n }\n\n // parseRightParen handles a ')' in the input.\n parseRightParen() {\n this.concat();\n if (this.swapVerticalBar()) {\n this.pop(); // pop vertical bar\n }\n this.alternate();\n const n = this.stack.length;\n if (n < 2) {\n throw new RE2JSSyntaxException(Parser.ERR_UNEXPECTED_PAREN, this.wholeRegexp);\n }\n const re1 = this.pop();\n const re2 = this.pop();\n if (re2.op !== Regexp.Op.LEFT_PAREN) {\n throw new RE2JSSyntaxException(Parser.ERR_UNEXPECTED_PAREN, this.wholeRegexp);\n }\n // Restore flags at time of paren.\n this.flags = re2.flags;\n if (re2.cap === 0) {\n // Just for grouping.\n this.push(re1);\n } else {\n re2.op = Regexp.Op.CAPTURE;\n re2.subs = [re1];\n this.push(re2);\n }\n }\n\n // parsePerlClassEscape parses a leading Perl character class escape like \\d\n // from the beginning of |t|. If one is present, it appends the characters\n // to cc and returns true. The iterator is advanced past the escape\n // on success, undefined on failure, in which case false is returned.\n parsePerlClassEscape(t, cc) {\n const beforePos = t.pos();\n if ((this.flags & RE2Flags.PERL_X) === 0 || !t.more() || t.pop() !== Codepoint.CODES.get('\\\\') || !t.more()) {\n return false;\n }\n t.pop(); // e.g. advance past 'd' in \"\\\\d\"\n const p = t.from(beforePos);\n const g = PERL_GROUPS.has(p) ? PERL_GROUPS.get(p) : null;\n if (g === null) {\n return false;\n }\n cc.appendGroup(g, (this.flags & RE2Flags.FOLD_CASE) !== 0);\n return true;\n }\n\n // parseNamedClass parses a leading POSIX named character class like\n // [:alnum:] from the beginning of t. If one is present, it appends the\n // characters to cc, advances the iterator, and returns true.\n // Pre: t at \"[:\". Post: t after \":]\".\n // On failure (no class of than name), throws RE2JSSyntaxException.\n // On misparse, returns false; t.pos() is undefined.\n parseNamedClass(t, cc) {\n // (Go precondition check deleted.)\n const cls = t.rest();\n const i = cls.indexOf(':]');\n if (i < 0) {\n return false;\n }\n const name = cls.substring(0, i + 2); // \"[:alnum:]\"\n t.skipString(name);\n const g = POSIX_GROUPS.has(name) ? POSIX_GROUPS.get(name) : null;\n if (g === null) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, name);\n }\n cc.appendGroup(g, (this.flags & RE2Flags.FOLD_CASE) !== 0);\n return true;\n }\n\n // parseUnicodeClass() parses a leading Unicode character class like \\p{Han}\n // from the beginning of t. If one is present, it appends the characters to\n // to |cc|, advances |t| and returns true.\n //\n // Returns false if such a pattern is not present or UNICODE_GROUPS\n // flag is not enabled; |t.pos()| is not advanced in this case.\n // Indicates error by throwing RE2JSSyntaxException.\n parseUnicodeClass(t, cc) {\n const startPos = t.pos();\n if ((this.flags & RE2Flags.UNICODE_GROUPS) === 0 || !t.lookingAt('\\\\p') && !t.lookingAt('\\\\P')) {\n return false;\n }\n t.skip(1); // '\\\\'\n // Committed to parse or throw exception.\n let sign = 1;\n let c = t.pop(); // 'p' or 'P'\n if (c === Codepoint.CODES.get('P')) {\n sign = -1;\n }\n if (!t.more()) {\n t.rewindTo(startPos);\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.rest());\n }\n c = t.pop();\n let name;\n if (c !== Codepoint.CODES.get('{')) {\n // Single-letter name.\n name = Utils.runeToString(c);\n } else {\n // Name is in braces.\n const rest = t.rest();\n const end = rest.indexOf('}');\n if (end < 0) {\n t.rewindTo(startPos);\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.rest());\n }\n name = rest.substring(0, end); // e.g. \"Han\"\n t.skipString(name);\n t.skip(1);\n // Don't use skip(end) because it assumes UTF-16 coding, and\n // StringIterator doesn't guarantee that.\n }\n // Group can have leading negation too.\n // \\p{^Han} == \\P{Han}, \\P{^Han} == \\p{Han}.\n if (!(name.length === 0) && name.codePointAt(0) === Codepoint.CODES.get('^')) {\n sign = 0 - sign; // -sign\n name = name.substring(1);\n }\n const pair = Parser.unicodeTable(name);\n if (pair === null) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.from(startPos));\n }\n const tab = pair.first;\n const fold = pair.second; // fold-equivalent table\n // Variation of CharClass.appendGroup() for tables.\n if ((this.flags & RE2Flags.FOLD_CASE) === 0 || fold === null) {\n cc.appendTableWithSign(tab, sign);\n } else {\n // Merge and clean tab and fold in a temporary buffer.\n // This is necessary for the negative case and just tidy\n // for the positive case.\n const tmp = new CharClass().appendTable(tab).appendTable(fold).cleanClass().toArray();\n cc.appendClassWithSign(tmp, sign);\n }\n return true;\n }\n\n // parseClass parses a character class and pushes it onto the parse stack.\n //\n // NOTES:\n // Pre: at '['; Post: after ']'.\n // Mutates stack. Advances iterator. May throw.\n parseClass(t) {\n const startPos = t.pos();\n t.skip(1); // '['\n const re = this.newRegexp(Regexp.Op.CHAR_CLASS);\n re.flags = this.flags;\n const cc = new CharClass();\n let sign = 1;\n if (t.more() && t.lookingAt('^')) {\n sign = -1;\n t.skip(1); // '^'\n // If character class does not match \\n, add it here,\n // so that negation later will do the right thing.\n if ((this.flags & RE2Flags.CLASS_NL) === 0) {\n cc.appendRange(Codepoint.CODES.get('\\n'), Codepoint.CODES.get('\\n'));\n }\n }\n let first = true; // ']' and '-' are okay as first char in class\n while (!t.more() || t.peek() !== Codepoint.CODES.get(']') || first) {\n // POSIX: - is only okay unescaped as first or last in class.\n // Perl: - is okay anywhere.\n if (t.more() && t.lookingAt('-') && (this.flags & RE2Flags.PERL_X) === 0 && !first) {\n const s = t.rest();\n if (s === '-' || !s.startsWith('-]')) {\n t.rewindTo(startPos);\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.rest());\n }\n }\n first = false;\n const beforePos = t.pos();\n // Look for POSIX [:alnum:] etc.\n if (t.lookingAt('[:')) {\n if (this.parseNamedClass(t, cc)) {\n continue;\n }\n t.rewindTo(beforePos);\n }\n\n // Look for Unicode character group like \\p{Han}.\n if (this.parseUnicodeClass(t, cc)) {\n continue;\n }\n\n // Look for Perl character class symbols (extension).\n if (this.parsePerlClassEscape(t, cc)) {\n continue;\n }\n t.rewindTo(beforePos);\n\n // Single character or simple range.\n const lo = Parser.parseClassChar(t, startPos);\n let hi = lo;\n if (t.more() && t.lookingAt('-')) {\n t.skip(1);\n if (t.more() && t.lookingAt(']')) {\n // [a-] means (a|-) so check for final ].\n t.skip(-1);\n } else {\n hi = Parser.parseClassChar(t, startPos);\n if (hi < lo) {\n throw new RE2JSSyntaxException(Parser.ERR_INVALID_CHAR_RANGE, t.from(beforePos));\n }\n }\n }\n if ((this.flags & RE2Flags.FOLD_CASE) === 0) {\n cc.appendRange(lo, hi);\n } else {\n cc.appendFoldedRange(lo, hi);\n }\n }\n t.skip(1); // ']'\n\n cc.cleanClass();\n if (sign < 0) {\n cc.negateClass();\n }\n re.runes = cc.toArray();\n this.push(re);\n }\n}\n\nclass AtomicReference {\n constructor(initialValue) {\n this.value = initialValue;\n }\n\n // Returns the current value\n get() {\n return this.value;\n }\n\n // Sets to the given value\n set(newValue) {\n this.value = newValue;\n }\n\n // Atomically sets to the given value and returns true if the current value == the expected value\n compareAndSet(expect, update) {\n if (this.value === expect) {\n this.value = update;\n return true;\n }\n return false;\n }\n}\n\n/**\n * An RE2 class instance is a compiled representation of an RE2 regular expression, independent of\n * the public Java-like Pattern/Matcher API.\n *\n * This class also contains various implementation helpers for RE2 regular expressions.\n *\n * Use the {@link #quoteMeta(String)} utility function to quote all regular expression\n * metacharacters in an arbitrary string.\n *\n */\nclass RE2 {\n // This is visible for testing.\n static initTest(expr) {\n const re2 = RE2.compile(expr);\n const res = new RE2(re2.expr, re2.prog, re2.numSubexp, re2.longest);\n res.cond = re2.cond;\n res.prefix = re2.prefix;\n res.prefixUTF8 = re2.prefixUTF8;\n res.prefixComplete = re2.prefixComplete;\n res.prefixRune = re2.prefixRune;\n return res;\n }\n\n /**\n * Parses a regular expression and returns, if successful, an {@code RE2} instance that can be\n * used to match against text.\n *\n * When matching against text, the regexp returns a match that begins as early as possible in the\n * input (leftmost), and among those it chooses the one that a backtracking search would have\n * found first. This so-called leftmost-first matching is the same semantics that Perl, Python,\n * and other implementations use, although this package implements it without the expense of\n * backtracking. For POSIX leftmost-longest matching, see {@link #compilePOSIX}.\n */\n static compile(expr) {\n return RE2.compileImpl(expr, RE2Flags.PERL, false);\n }\n\n /**\n * {@code compilePOSIX} is like {@link #compile} but restricts the regular expression to POSIX ERE\n * (egrep) syntax and changes the match semantics to leftmost-longest.\n *\n * That is, when matching against text, the regexp returns a match that begins as early as\n * possible in the input (leftmost), and among those it chooses a match that is as long as\n * possible. This so-called leftmost-longest matching is the same semantics that early regular\n * expression implementations used and that POSIX specifies.\n *\n * However, there can be multiple leftmost-longest matches, with different submatch choices, and\n * here this package diverges from POSIX. Among the possible leftmost-longest matches, this\n * package chooses the one that a backtracking search would have found first, while POSIX\n * specifies that the match be chosen to maximize the length of the first subexpression, then the\n * second, and so on from left to right. The POSIX rule is computationally prohibitive and not\n * even well-defined. See http://swtch.com/~rsc/regexp/regexp2.html#posix\n */\n static compilePOSIX(expr) {\n return RE2.compileImpl(expr, RE2Flags.POSIX, true);\n }\n\n // Exposed to ExecTests.\n static compileImpl(expr, mode, longest) {\n let re = Parser.parse(expr, mode);\n const maxCap = re.maxCap();\n re = Simplify.simplify(re);\n const prog = Compiler.compileRegexp(re);\n const re2 = new RE2(expr, prog, maxCap, longest);\n const [prefixCompl, prefixStr] = prog.prefix();\n re2.prefixComplete = prefixCompl;\n re2.prefix = prefixStr;\n re2.prefixUTF8 = Utils.stringToUtf8ByteArray(re2.prefix);\n if (re2.prefix.length > 0) {\n re2.prefixRune = re2.prefix.codePointAt(0);\n }\n re2.namedGroups = re.namedGroups;\n return re2;\n }\n\n /**\n * Returns true iff textual regular expression {@code pattern} matches string {@code s}.\n *\n * More complicated queries need to use {@link #compile} and the full {@code RE2} interface.\n */\n // This is visible for testing.\n static match(pattern, s) {\n return RE2.compile(pattern).match(s);\n }\n constructor(expr, prog, numSubexp = 0, longest = 0) {\n this.expr = expr; // as passed to Compile\n this.prog = prog; // compiled program\n this.numSubexp = numSubexp;\n this.longest = longest;\n this.cond = prog.startCond(); // EMPTY_* bitmask: empty-width conditions\n this.prefix = null; // required UTF-16 prefix in unanchored matches\n this.prefixUTF8 = null; // required UTF-8 prefix in unanchored matches\n this.prefixComplete = false; // true if prefix is the entire regexp\n this.prefixRune = 0; // first rune in prefix\n this.pooled = new AtomicReference(); // Cache of machines for running regexp. Forms a Treiber stack.\n }\n\n /**\n * Returns the number of parenthesized subexpressions in this regular expression.\n */\n numberOfCapturingGroups() {\n return this.numSubexp;\n }\n\n /**\n * Returns the number of instructions in this compiled regular expression program.\n */\n numberOfInstructions() {\n return this.prog.numInst();\n }\n\n // get() returns a machine to use for matching |this|. It uses |this|'s\n // machine cache if possible, to avoid unnecessary allocation.\n get() {\n // Pop a machine off the stack if available.\n let head;\n do {\n head = this.pooled.get();\n } while (head && !this.pooled.compareAndSet(head, head.next));\n return head;\n }\n\n // Clears the memory associated with this machine.\n reset() {\n this.pooled.set(null);\n }\n\n // put() returns a machine to |this|'s machine cache. There is no attempt to\n // limit the size of the cache, so it will grow to the maximum number of\n // simultaneous matches run using |this|. (The cache empties when |this|\n // gets garbage collected or reset is called.)\n put(m, isNew) {\n // To avoid allocation in the single-thread or uncontended case, reuse a node only if\n // it was the only element in the stack when it was popped, and it's the only element\n // in the stack when it's pushed back after use.\n let head = this.pooled.get();\n do {\n head = this.pooled.get();\n if (!isNew && head) {\n // If an element had a null next pointer and it was previously in the stack, another thread\n // might be trying to pop it out right now, and if it sees the same node now in the\n // stack the pop will succeed, but the new top of the stack will be the stale (null) value\n // of next. Allocate a new Machine so that the CAS will not succeed if this node has been\n // popped and re-pushed.\n m = Machine.fromMachine(m);\n isNew = true;\n }\n\n // Without this comparison, TSAN will complain about a race condition:\n // Thread A, B, and C all attempt to do a match on the same pattern.\n //\n // A: Allocates Machine 1; executes match; put machine 1. State is now:\n //\n // pooled -> machine 1 -> null\n //\n // B reads pooled, sees machine 1\n //\n // C reads pooled, sees machine 1\n //\n // B successfully CASes pooled to null\n //\n // B executes match; put machine 1, which involves setting machine1.next to\n // null (even though it's already null); preempted before CAS\n //\n // C resumes, and reads machine1.next in order to execute cas(head, head.next)\n //\n // There is no happens-before relationship between B's redundant null write\n // and C's read, thus triggering TSAN.\n //\n // Not needed for JS code\n if (m.next !== head) {\n m.next = head;\n }\n } while (!this.pooled.compareAndSet(head, m));\n }\n toString() {\n return this.expr;\n }\n\n // doExecute() finds the leftmost match in the input and returns\n // the position of its subexpressions.\n // Derived from exec.go.\n doExecute(input, pos, anchor, ncap) {\n let m = this.get();\n // The Treiber stack cannot reuse nodes, unless the node to be reused has only ever been at\n // the bottom of the stack (i.e., next == null).\n let isNew = false;\n if (!m) {\n m = Machine.fromRE2(this);\n isNew = true;\n } else if (m.next !== null) {\n m = Machine.fromMachine(m);\n isNew = true;\n }\n m.init(ncap);\n const cap = m.match(input, pos, anchor) ? m.submatches() : null;\n this.put(m, isNew);\n return cap;\n }\n match(s) {\n return this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, 0) !== null;\n }\n\n /**\n * Matches the regular expression against input starting at position start and ending at position\n * end, with the given anchoring. Records the submatch boundaries in group, which is [start, end)\n * pairs of byte offsets. The number of boundaries needed is inferred from the size of the group\n * array. It is most efficient not to ask for submatch boundaries.\n *\n * @param input the input byte array\n * @param start the beginning position in the input\n * @param end the end position in the input\n * @param anchor the anchoring flag (UNANCHORED, ANCHOR_START, ANCHOR_BOTH)\n * @param group the array to fill with submatch positions\n * @param ngroup the number of array pairs to fill in\n * @returns true if a match was found\n */\n matchWithGroup(input, start, end, anchor, ngroup) {\n if (!(input instanceof MatcherInputBase)) {\n input = MatcherInput.utf16(input);\n }\n return this.matchMachineInput(input, start, end, anchor, ngroup);\n }\n matchMachineInput(input, start, end, anchor, ngroup) {\n if (start > end) {\n return [false, null];\n }\n const machineInput = input.isUTF16Encoding() ? MachineInput.fromUTF16(input.asCharSequence(), 0, end) : MachineInput.fromUTF8(input.asBytes(), 0, end);\n const groupMatch = this.doExecute(machineInput, start, anchor, 2 * ngroup);\n if (groupMatch === null) {\n return [false, null];\n }\n return [true, groupMatch];\n }\n\n /**\n * Returns true iff this regexp matches the UTF-8 byte array {@code b}.\n */\n // This is visible for testing.\n matchUTF8(b) {\n return this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, 0) !== null;\n }\n\n /**\n * Returns a copy of {@code src} in which all matches for this regexp have been replaced by\n * {@code repl}. No support is provided for expressions (e.g. {@code \\1} or {@code $1}) in the\n * replacement string.\n */\n // This is visible for testing.\n replaceAll(src, repl) {\n return this.replaceAllFunc(src, () => repl, 2 * src.length + 1);\n }\n\n /**\n * Returns a copy of {@code src} in which only the first match for this regexp has been replaced\n * by {@code repl}. No support is provided for expressions (e.g. {@code \\1} or {@code $1}) in the\n * replacement string.\n */\n // This is visible for testing.\n replaceFirst(src, repl) {\n return this.replaceAllFunc(src, () => repl, 1);\n }\n\n /**\n * Returns a copy of {@code src} in which at most {@code maxReplaces} matches for this regexp have\n * been replaced by the return value of of function {@code repl} (whose first argument is the\n * matched string). No support is provided for expressions (e.g. {@code \\1} or {@code $1}) in the\n * replacement string.\n */\n // This is visible for testing.\n replaceAllFunc(src, replFunc, maxReplaces) {\n let lastMatchEnd = 0;\n let searchPos = 0;\n let out = '';\n const input = MachineInput.fromUTF16(src);\n let numReplaces = 0;\n while (searchPos <= src.length) {\n const a = this.doExecute(input, searchPos, RE2Flags.UNANCHORED, 2);\n if (a === null || a.length === 0) {\n break;\n }\n out += src.substring(lastMatchEnd, a[0]);\n if (a[1] > lastMatchEnd || a[0] === 0) {\n out += replFunc(src.substring(a[0], a[1]));\n numReplaces++;\n }\n lastMatchEnd = a[1];\n const width = input.step(searchPos) & 7;\n if (searchPos + width > a[1]) {\n searchPos += width;\n } else if (searchPos + 1 > a[1]) {\n searchPos++;\n } else {\n searchPos = a[1];\n }\n if (numReplaces >= maxReplaces) {\n break;\n }\n }\n out += src.substring(lastMatchEnd);\n return out;\n }\n\n // The number of capture values in the program may correspond\n // to fewer capturing expressions than are in the regexp.\n // For example, \"(a){0}\" turns into an empty program, so the\n // maximum capture in the program is 0 but we need to return\n // an expression for \\1. Pad returns a with -1s appended as needed;\n // the result may alias a.\n pad(a) {\n if (a === null) {\n return null;\n }\n let n = (1 + this.numSubexp) * 2;\n if (a.length < n) {\n let a2 = new Array(n).fill(-1);\n for (let i = 0; i < a.length; i++) {\n a2[i] = a[i];\n }\n a = a2;\n }\n return a;\n }\n\n // Find matches in input.\n allMatches(input, n, deliverFun = v => v) {\n let result = [];\n const end = input.endPos();\n if (n < 0) {\n n = end + 1;\n }\n let pos = 0;\n let i = 0;\n let prevMatchEnd = -1;\n while (i < n && pos <= end) {\n const matches = this.doExecute(input, pos, RE2Flags.UNANCHORED, this.prog.numCap);\n if (matches === null || matches.length === 0) {\n break;\n }\n let accept = true;\n if (matches[1] === pos) {\n if (matches[0] === prevMatchEnd) {\n accept = false;\n }\n const r = input.step(pos);\n if (r < 0) {\n pos = end + 1;\n } else {\n pos += r & 7;\n }\n } else {\n pos = matches[1];\n }\n prevMatchEnd = matches[1];\n if (accept) {\n result.push(deliverFun(this.pad(matches)));\n i++;\n }\n }\n return result;\n }\n\n // Legacy Go-style interface; preserved (package-private) for better\n // test coverage.\n //\n // There are 16 methods of RE2 that match a regular expression and\n // identify the matched text. Their names are matched by this regular\n // expression:\n //\n // find(All)?(UTF8)?(Submatch)?(Index)?\n //\n // If 'All' is present, the routine matches successive non-overlapping\n // matches of the entire expression. Empty matches abutting a\n // preceding match are ignored. The return value is an array\n // containing the successive return values of the corresponding\n // non-All routine. These routines take an extra integer argument, n;\n // if n >= 0, the function returns at most n matches/submatches.\n //\n // If 'UTF8' is present, the argument is a UTF-8 encoded byte[] array;\n // otherwise it is a UTF-16 encoded js string; return values\n // are adjusted as appropriate.\n //\n // If 'Submatch' is present, the return value is an list identifying\n // the successive submatches of the expression. Submatches are\n // matches of parenthesized subexpressions within the regular\n // expression, numbered from left to right in order of opening\n // parenthesis. Submatch 0 is the match of the entire expression,\n // submatch 1 the match of the first parenthesized subexpression, and\n // so on.\n //\n // If 'Index' is present, matches and submatches are identified by\n // byte index pairs within the input string: result[2*n:2*n+1]\n // identifies the indexes of the nth submatch. The pair for n==0\n // identifies the match of the entire expression. If 'Index' is not\n // present, the match is identified by the text of the match/submatch.\n // If an index is negative, it means that subexpression did not match\n // any string in the input.\n\n /**\n * Returns an array holding the text of the leftmost match in {@code b} of this regular\n * expression.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findUTF8(b) {\n const a = this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, 2);\n if (a === null) {\n return null;\n }\n return b.slice(a[0], a[1]);\n }\n\n /**\n * Returns a two-element array of integers defining the location of the leftmost match in\n * {@code b} of this regular expression. The match itself is at {@code b[loc[0]...loc[1]]}.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findUTF8Index(b) {\n const a = this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, 2);\n if (a === null) {\n return null;\n }\n return a.slice(0, 2);\n }\n\n /**\n * Returns a string holding the text of the leftmost match in {@code s} of this regular\n * expression.\n *\n * If there is no match, the return value is an empty string, but it will also be empty if the\n * regular expression successfully matches an empty string. Use {@link #findIndex} or\n * {@link #findSubmatch} if it is necessary to distinguish these cases.\n */\n // This is visible for testing.\n find(s) {\n const a = this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, 2);\n if (a === null) {\n return '';\n }\n return s.substring(a[0], a[1]);\n }\n\n /**\n * Returns a two-element array of integers defining the location of the leftmost match in\n * {@code s} of this regular expression. The match itself is at\n * {@code s.substring(loc[0], loc[1])}.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findIndex(s) {\n return this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, 2);\n }\n\n /**\n * Returns an array of arrays the text of the leftmost match of the regular expression in\n * {@code b} and the matches, if any, of its subexpressions, as defined by the Submatch description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findUTF8Submatch(b) {\n const a = this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, this.prog.numCap);\n if (a === null) {\n return null;\n }\n const ret = new Array(1 + this.numSubexp).fill(null);\n for (let i = 0; i < ret.length; i++) {\n if (2 * i < a.length && a[2 * i] >= 0) {\n ret[i] = b.slice(a[2 * i], a[2 * i + 1]);\n }\n }\n return ret;\n }\n\n /**\n * Returns an array holding the index pairs identifying the leftmost match of this regular\n * expression in {@code b} and the matches, if any, of its subexpressions, as defined by the the\n * Submatch and Index descriptions above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findUTF8SubmatchIndex(b) {\n return this.pad(this.doExecute(MachineInput.fromUTF8(b), 0, RE2Flags.UNANCHORED, this.prog.numCap));\n }\n\n /**\n * Returns an array of strings holding the text of the leftmost match of the regular expression in\n * {@code s} and the matches, if any, of its subexpressions, as defined by the Submatch description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findSubmatch(s) {\n const a = this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, this.prog.numCap);\n if (a === null) {\n return null;\n }\n const ret = new Array(1 + this.numSubexp).fill(null);\n for (let i = 0; i < ret.length; i++) {\n if (2 * i < a.length && a[2 * i] >= 0) {\n ret[i] = s.substring(a[2 * i], a[2 * i + 1]);\n }\n }\n return ret;\n }\n\n /**\n * Returns an array holding the index pairs identifying the leftmost match of this regular\n * expression in {@code s} and the matches, if any, of its subexpressions, as defined by the Submatch description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findSubmatchIndex(s) {\n return this.pad(this.doExecute(MachineInput.fromUTF16(s), 0, RE2Flags.UNANCHORED, this.prog.numCap));\n }\n\n /**\n * {@code findAllUTF8()} is the All version of {@link #findUTF8}; it returns a\n * list of up to {@code n} successive matches of the expression, as defined by the All description above.\n *\n * A return value of null indicates no match.\n *\n * TODO(adonovan): think about defining a byte slice view class, like a read-only Go slice backed\n * by |b|.\n */\n // This is visible for testing.\n findAllUTF8(b, n) {\n const result = this.allMatches(MachineInput.fromUTF8(b), n, match => b.slice(match[0], match[1]));\n if (result.length === 0) {\n return null;\n }\n return result;\n }\n\n /**\n * {@code findAllUTF8Index} is the All version of {@link #findUTF8Index}; it\n * returns a list of up to {@code n} successive matches of the expression, as defined by the All description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllUTF8Index(b, n) {\n const result = this.allMatches(MachineInput.fromUTF8(b), n, match => match.slice(0, 2));\n if (result.length === 0) {\n return null;\n }\n return result;\n }\n\n /**\n * {@code findAll} is the All version of {@link #find}; it returns a list of up\n * to {@code n} successive matches of the expression, as defined by the All\n * description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAll(s, n) {\n const result = this.allMatches(MachineInput.fromUTF16(s), n, match => s.substring(match[0], match[1]));\n if (result.length === 0) {\n return null;\n }\n return result;\n }\n\n /**\n * {@code findAllIndex} is the All version of {@link #findIndex}; it returns a\n * list of up to {@code n} successive matches of the expression, as defined by the All description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllIndex(s, n) {\n const result = this.allMatches(MachineInput.fromUTF16(s), n, match => match.slice(0, 2));\n if (result.length === 0) {\n return null;\n }\n return result;\n }\n\n /**\n * {@code findAllUTF8Submatch} is the All version of {@link #findUTF8Submatch};\n * it returns a list of up to {@code n} successive matches of the expression, as defined by the All description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllUTF8Submatch(b, n) {\n const result = this.allMatches(MachineInput.fromUTF8(b), n, match => {\n let slice = new Array(match.length / 2 | 0).fill(null);\n for (let j = 0; j < slice.length; j++) {\n if (match[2 * j] >= 0) {\n slice[j] = b.slice(match[2 * j], match[2 * j + 1]);\n }\n }\n return slice;\n });\n if (result.length === 0) {\n return null;\n }\n return result;\n }\n\n /**\n * {@code findAllUTF8SubmatchIndex} is the All version of\n * {@link #findUTF8SubmatchIndex}; it returns a list of up to {@code n} successive matches of the\n * expression, as defined by the All description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllUTF8SubmatchIndex(b, n) {\n const result = this.allMatches(MachineInput.fromUTF8(b), n);\n if (result.length === 0) {\n return null;\n }\n return result;\n }\n\n /**\n * {@code findAllSubmatch} is the All version of {@link #findSubmatch}; it\n * returns a list of up to {@code n} successive matches of the expression, as defined by the All description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllSubmatch(s, n) {\n const result = this.allMatches(MachineInput.fromUTF16(s), n, match => {\n let slice = new Array(match.length / 2 | 0).fill(null);\n for (let j = 0; j < slice.length; j++) {\n if (match[2 * j] >= 0) {\n slice[j] = s.substring(match[2 * j], match[2 * j + 1]);\n }\n }\n return slice;\n });\n if (result.length === 0) {\n return null;\n }\n return result;\n }\n\n /**\n * {@code findAllSubmatchIndex} is the All version of\n * {@link #findSubmatchIndex}; it returns a list of up to {@code n} successive matches of the\n * expression, as defined by the All description above.\n *\n * A return value of null indicates no match.\n */\n // This is visible for testing.\n findAllSubmatchIndex(s, n) {\n const result = this.allMatches(MachineInput.fromUTF16(s), n);\n if (result.length === 0) {\n return null;\n }\n return result;\n }\n}\n\n/**\n * Transform JS regex string to RE2 regex string\n */\nclass TranslateRegExpString {\n static isUpperCaseAlpha(ch) {\n return 'A' <= ch && ch <= 'Z';\n }\n static isHexadecimal(ch) {\n return '0' <= ch && ch <= '9' || 'A' <= ch && ch <= 'F' || 'a' <= ch && ch <= 'f';\n }\n static getUtf8CharSize(ch) {\n const code = ch.charCodeAt(0);\n if (code < 0x80) return 1; // 1-byte (ASCII)\n if (code < 0x800) return 2; // 2-byte\n if (code < 0x10000) return 3; // 3-byte\n return 4; // 4-byte (surrogate pairs, rare characters)\n }\n static translate(data) {\n if (typeof data !== 'string') {\n return data;\n }\n let result = '';\n let changed = false;\n let size = data.length;\n if (size === 0) {\n result = '(?:)';\n changed = true;\n }\n let i = 0;\n while (i < size) {\n let ch = data[i];\n if (ch === '\\\\') {\n if (i + 1 < size) {\n ch = data[i + 1];\n switch (ch) {\n case '\\\\':\n {\n result += '\\\\\\\\';\n i += 2;\n continue;\n }\n case 'c':\n {\n if (i + 2 < size) {\n let nextCh = data[i + 2];\n if (TranslateRegExpString.isUpperCaseAlpha(nextCh)) {\n result += '\\\\x';\n result += (nextCh.charCodeAt(0) - 64 >> 4).toString(16).toUpperCase();\n result += (nextCh.charCodeAt(0) - 64 & 15).toString(16).toUpperCase();\n i += 3;\n changed = true;\n continue;\n }\n }\n result += '\\\\c';\n i += 2;\n continue;\n }\n case 'u':\n {\n if (i + 2 < size) {\n let nextCh = data[i + 2];\n if (TranslateRegExpString.isHexadecimal(nextCh)) {\n result += '\\\\x{' + nextCh;\n i += 3;\n for (let j = 0; j < 3 && i < size; ++i, ++j) {\n nextCh = data[i];\n if (!TranslateRegExpString.isHexadecimal(nextCh)) {\n break;\n }\n result += nextCh;\n }\n result += '}';\n changed = true;\n continue;\n } else if (nextCh === '{') {\n result += '\\\\x';\n i += 2;\n changed = true;\n continue;\n }\n }\n result += '\\\\u';\n i += 2;\n continue;\n }\n default:\n {\n result += '\\\\';\n let symSize = TranslateRegExpString.getUtf8CharSize(ch);\n result += data.substring(i + 1, i + 1 + symSize);\n i += symSize + 1;\n continue;\n }\n }\n }\n } else if (ch === '/') {\n result += '\\\\/';\n i += 1;\n changed = true;\n continue;\n } else if (ch === '(' && i + 2 < size && data[i + 1] === '?' && data[i + 2] === '<') {\n if (i + 3 >= size || data[i + 3] !== '=' && data[i + 3] !== '!') {\n result += '(?P<';\n i += 3;\n changed = true;\n continue;\n }\n }\n let symSize = TranslateRegExpString.getUtf8CharSize(ch);\n result += data.substring(i, i + symSize);\n i += symSize;\n }\n return changed ? result : data;\n }\n}\n\n/**\n * A compiled representation of an RE2 regular expression\n *\n * The matching functions take {@code String} arguments instead of the more general Java\n * {@code CharSequence} since the latter doesn't provide UTF-16 decoding.\n *\n *\n * @author rsc@google.com (Russ Cox)\n * @class\n */\nclass RE2JS {\n /**\n * Flag: case insensitive matching.\n */\n static CASE_INSENSITIVE = 1;\n /**\n * Flag: dot ({@code .}) matches all characters, including newline.\n */\n static DOTALL = 2;\n /**\n * Flag: multiline matching: {@code ^} and {@code $} match at beginning and end of line, not just\n * beginning and end of input.\n */\n static MULTILINE = 4;\n /**\n * Flag: Unicode groups (e.g. {@code \\p\\ Greek\\} ) will be syntax errors.\n */\n static DISABLE_UNICODE_GROUPS = 8;\n /**\n * Flag: matches longest possible string.\n */\n static LONGEST_MATCH = 16;\n\n /**\n * Returns a literal pattern string for the specified string.\n *\n * This method produces a string that can be used to create a RE2JS that would\n * match the string s as if it were a literal pattern.\n *\n * Metacharacters or escape sequences in the input sequence will be given no special meaning.\n *\n * @param {string} str The string to be literalized\n * @returns {string} A literal string replacement\n */\n static quote(str) {\n return Utils.quoteMeta(str);\n }\n\n /**\n * Translates a given regular expression string to ensure compatibility with RE2JS.\n *\n * This function preprocesses the input regex string by applying necessary transformations,\n * such as escaping special characters (e.g., `/`), converting named capture groups to\n * RE2JS-compatible syntax, and handling Unicode sequences properly. It ensures that the\n * resulting regex is safe and properly formatted before compilation.\n *\n * @param {string} expr - The regular expression string to be translated.\n * @returns {string} - The transformed regular expression string, ready for compilation.\n */\n static translateRegExp(expr) {\n return TranslateRegExpString.translate(expr);\n }\n\n /**\n * Helper: create new RE2JS with given regex and flags. Flregex is the regex with flags applied.\n * @param {string} regex\n * @param {number} [flags=0]\n * @returns {RE2JS}\n */\n static compile(regex, flags = 0) {\n let fregex = regex;\n if ((flags & RE2JS.CASE_INSENSITIVE) !== 0) {\n fregex = `(?i)${fregex}`;\n }\n if ((flags & RE2JS.DOTALL) !== 0) {\n fregex = `(?s)${fregex}`;\n }\n if ((flags & RE2JS.MULTILINE) !== 0) {\n fregex = `(?m)${fregex}`;\n }\n if ((flags & ~(RE2JS.MULTILINE | RE2JS.DOTALL | RE2JS.CASE_INSENSITIVE | RE2JS.DISABLE_UNICODE_GROUPS | RE2JS.LONGEST_MATCH)) !== 0) {\n throw new RE2JSFlagsException('Flags should only be a combination of MULTILINE, DOTALL, CASE_INSENSITIVE, DISABLE_UNICODE_GROUPS, LONGEST_MATCH');\n }\n let re2Flags = RE2Flags.PERL;\n if ((flags & RE2JS.DISABLE_UNICODE_GROUPS) !== 0) {\n re2Flags &= -129;\n }\n const p = new RE2JS(regex, flags);\n // The compiled RE2 regexp.\n p.re2Input = RE2.compileImpl(fregex, re2Flags, (flags & RE2JS.LONGEST_MATCH) !== 0);\n return p;\n }\n\n /**\n * Matches a string against a regular expression.\n *\n * @param {string} regex the regular expression\n * @param {string|number[]} input the input\n * @returns {boolean} true if the regular expression matches the entire input\n * @throws RE2JSSyntaxException if the regular expression is malformed\n */\n static matches(regex, input) {\n return RE2JS.compile(regex).matcher(input).matches();\n }\n\n /**\n * This is visible for testing.\n * @private\n */\n static initTest(pattern, flags, re2) {\n if (pattern == null) {\n throw new Error('pattern is null');\n }\n if (re2 == null) {\n throw new Error('re2 is null');\n }\n const p = new RE2JS(pattern, flags);\n // The compiled RE2 regexp.\n p.re2Input = re2;\n return p;\n }\n\n /**\n *\n * @param {string} pattern\n * @param {number} flags\n */\n constructor(pattern, flags) {\n // The pattern string at construction time.\n this.patternInput = pattern;\n // The flags at construction time.\n this.flagsInput = flags;\n }\n\n /**\n * Releases memory used by internal caches associated with this pattern. Does not change the\n * observable behaviour. Useful for tests that detect memory leaks via allocation tracking.\n */\n reset() {\n this.re2Input.reset();\n }\n\n /**\n * Returns the flags used in the constructor.\n * @returns {number}\n */\n flags() {\n return this.flagsInput;\n }\n\n /**\n * Returns the pattern used in the constructor.\n * @returns {string}\n */\n pattern() {\n return this.patternInput;\n }\n re2() {\n return this.re2Input;\n }\n\n /**\n * Matches a string against a regular expression.\n *\n * @param {string|number[]} input the input\n * @returns {boolean} true if the regular expression matches the entire input\n */\n matches(input) {\n return this.matcher(input).matches();\n }\n\n /**\n * Creates a new {@code Matcher} matching the pattern against the input.\n *\n * @param {string|number[]} input the input string\n * @returns {Matcher}\n */\n matcher(input) {\n if (Array.isArray(input)) {\n input = MatcherInput.utf8(input);\n }\n return new Matcher(this, input);\n }\n\n /**\n * Splits input around instances of the regular expression. It returns an array giving the strings\n * that occur before, between, and after instances of the regular expression.\n *\n * If {@code limit <= 0}, there is no limit on the size of the returned array. If\n * {@code limit == 0}, empty strings that would occur at the end of the array are omitted. If\n * {@code limit > 0}, at most limit strings are returned. The final string contains the remainder\n * of the input, possibly including additional matches of the pattern.\n *\n * @param {string} input the input string to be split\n * @param {number} [limit=0] the limit\n * @returns {string[]} the split strings\n */\n split(input, limit = 0) {\n const m = this.matcher(input);\n const result = [];\n let emptiesSkipped = 0;\n let last = 0;\n while (m.find()) {\n if (last === 0 && m.end() === 0) {\n // Zero-width match at the beginning, skip\n last = m.end();\n continue;\n }\n if (limit > 0 && result.length === limit - 1) {\n // no more room for matches\n break;\n }\n if (last === m.start()) {\n // Empty match, may or may not be trailing.\n if (limit === 0) {\n emptiesSkipped += 1;\n last = m.end();\n continue;\n }\n } else {\n // If emptiesSkipped > 0 then limit == 0 and we have non-trailing empty matches to add before\n // this non-empty match.\n while (emptiesSkipped > 0) {\n result.push('');\n emptiesSkipped -= 1;\n }\n }\n result.push(m.substring(last, m.start()));\n last = m.end();\n }\n if (limit === 0 && last !== m.inputLength()) {\n // Unlimited match, no more delimiters but we have a non-empty input at the end. Catch up any skipped empty\n // matches, then emit the final match.\n while (emptiesSkipped > 0) {\n result.push('');\n emptiesSkipped -= 1;\n }\n result.push(m.substring(last, m.inputLength()));\n }\n if (limit !== 0 || result.length === 0) {\n result.push(m.substring(last, m.inputLength()));\n }\n return result;\n }\n\n /**\n *\n * @returns {string}\n */\n toString() {\n return this.patternInput;\n }\n\n /**\n * Returns the program size of this pattern.\n *\n *

\n * Similar to the C++ implementation, the program size is a very approximate measure of a regexp's\n * \"cost\". Larger numbers are more expensive than smaller numbers.\n *

\n *\n * @returns {number} the program size of this pattern\n */\n programSize() {\n return this.re2Input.numberOfInstructions();\n }\n\n /**\n * Returns the number of capturing groups in this matcher's pattern. Group zero denotes the entire\n * pattern and is excluded from this count.\n *\n * @returns {number} the number of capturing groups in this pattern\n */\n groupCount() {\n return this.re2Input.numberOfCapturingGroups();\n }\n\n /**\n * Return a map of the capturing groups in this matcher's pattern, where key is the name and value\n * is the index of the group in the pattern.\n * @returns {*}\n */\n namedGroups() {\n return this.re2Input.namedGroups;\n }\n\n /**\n *\n * @param {*} other\n * @returns {boolean}\n */\n equals(other) {\n if (this === other) {\n return true;\n }\n if (other === null || this.constructor !== other.constructor) {\n return false;\n }\n return this.flagsInput === other.flagsInput && this.patternInput === other.patternInput;\n }\n}\n\nexport { RE2JS, RE2JSCompileException, RE2JSException, RE2JSFlagsException, RE2JSGroupException, RE2JSSyntaxException };\n//# sourceMappingURL=index.esm.js.map\n"],"names":["RE2Flags","static","CLASS_NL","DOT_NL","ONE_LINE","PERL_X","UNICODE_GROUPS","Codepoint","Map","toUpperCase","codepoint","s","String","fromCodePoint","length","sOrigin","codePointAt","toLowerCase","UnicodeTables","this","Lu","C","Cc","Cf","Co","Cs","L","Ll","Lm","Lo","Lt","M","Mc","Me","Mn","N","Nd","Nl","No","P","Pc","Pd","Pe","Pf","Pi","Po","Ps","S","Sc","Sk","Sm","So","Z","Zl","Zp","Zs","Adlam","Ahom","Anatolian_Hieroglyphs","Arabic","Armenian","Avestan","Balinese","Bamum","Bassa_Vah","Batak","Bengali","Bhaiksuki","Bopomofo","Brahmi","Braille","Buginese","Buhid","Canadian_Aboriginal","Carian","Caucasian_Albanian","Chakma","Cham","Cherokee","Chorasmian","Common","Coptic","Cuneiform","Cypriot","Cypro_Minoan","Cyrillic","Deseret","Devanagari","Dives_Akuru","Dogra","Duployan","Egyptian_Hieroglyphs","Elbasan","Elymaic","Ethiopic","Garay","Georgian","Glagolitic","Gothic","Grantha","Greek","Gujarati","Gunjala_Gondi","Gurmukhi","Gurung_Khema","Han","Hangul","Hanifi_Rohingya","Hanunoo","Hatran","Hebrew","Hiragana","Imperial_Aramaic","Inherited","Inscriptional_Pahlavi","Inscriptional_Parthian","Javanese","Kaithi","Kannada","Katakana","Kawi","Kayah_Li","Kharoshthi","Khitan_Small_Script","Khmer","Khojki","Khudawadi","Kirat_Rai","Lao","Latin","Lepcha","Limbu","Linear_A","Linear_B","Lisu","Lycian","Lydian","Mahajani","Makasar","Malayalam","Mandaic","Manichaean","Marchen","Masaram_Gondi","Medefaidrin","Meetei_Mayek","Mende_Kikakui","Meroitic_Cursive","Meroitic_Hieroglyphs","Miao","Modi","Mongolian","Mro","Multani","Myanmar","Nabataean","Nag_Mundari","Nandinagari","New_Tai_Lue","Newa","Nko","Nushu","Nyiakeng_Puachue_Hmong","Ogham","Ol_Chiki","Ol_Onal","Old_Hungarian","Old_Italic","Old_North_Arabian","Old_Permic","Old_Persian","Old_Sogdian","Old_South_Arabian","Old_Turkic","Old_Uyghur","Oriya","Osage","Osmanya","Pahawh_Hmong","Palmyrene","Pau_Cin_Hau","Phags_Pa","Phoenician","Psalter_Pahlavi","Rejang","Runic","Samaritan","Saurashtra","Sharada","Shavian","Siddham","SignWriting","Sinhala","Sogdian","Sora_Sompeng","Soyombo","Sundanese","Sunuwar","Syloti_Nagri","Syriac","Tagalog","Tagbanwa","Tai_Le","Tai_Tham","Tai_Viet","Takri","Tamil","Tangsa","Tangut","Telugu","Thaana","Thai","Tibetan","Tifinagh","Tirhuta","Todhri","Toto","Tulu_Tigalari","Ugaritic","Vai","Vithkuqi","Wancho","Warang_Citi","Yezidi","Yi","Zanabazar_Square","foldL","foldLl","foldLt","foldLu","foldM","foldMn","foldCommon","foldGreek","foldInherited","Unicode","is32","ranges","r","lo","hi","m","Math","floor","range","is","MAX_LATIN1","isUpper","Upper","isPrint","simpleFold","CASE_ORBIT","has","get","l","equalsIgnoreCase","r1","r2","MAX_ASCII","CODES","Utils","emptyInts","isalnum","c","unhex","escapeRune","rune","out","METACHARACTERS","indexOf","toString","stringToRunes","str","split","map","runeToString","isWordRune","emptyOpContext","op","EMPTY_BEGIN_TEXT","EMPTY_BEGIN_LINE","EMPTY_END_TEXT","EMPTY_END_LINE","EMPTY_WORD_BOUNDARY","EMPTY_NO_WORD_BOUNDARY","quoteMeta","join","charCount","codePoint","MAX_BMP","stringToUtf8ByteArray","globalThis","TextEncoder","Array","from","encode","p","i","charCodeAt","utf8ByteArrayToString","bytes","TextDecoder","decode","Uint8Array","pos","c1","fromCharCode","c2","u","c3","createEnum","values","initNum","enumObject","val","keyVal","Object","freeze","MatcherInputBase","getEncoding","Error","isUTF8Encoding","Encoding","UTF_8","isUTF16Encoding","UTF_16","Utf8MatcherInput","constructor","super","asCharSequence","asBytes","Utf16MatcherInput","charSequence","MatcherInput","utf16","utf8","input","isArray","RE2JSException","message","name","RE2JSSyntaxException","error","getDescription","getPattern","RE2JSCompileException","RE2JSGroupException","RE2JSFlagsException","Matcher","quoteReplacement","pattern","patternInput","re2","patternGroupCount","numberOfCapturingGroups","groups","namedGroups","numberOfInstructions","resetMatcherInput","reset","matcherInputLength","matcherInput","appendPos","hasMatch","hasGroups","anchorFlag","start","group","groupInt","Number","isFinite","loadGroup","end","programSize","substring","groupCount","res","matchMachineInput","matches","genMatch","ANCHOR_BOTH","lookingAt","ANCHOR_START","find","UNANCHORED","startByte","anchor","slice","inputLength","appendReplacement","replacement","perlMode","e","appendReplacementInternalPerl","appendReplacementInternal","last","n","j","groupName","prototype","hasOwnProperty","call","appendTail","replaceAll","replace","replaceFirst","all","MachineInputBase","EOF","canCheckPrefix","endPos","MachineUTF8Input","step","x","index","prefixUTF8","context","lim","source","target","fromIndex","targetLength","sourceLength","MachineUTF16Input","prefix","MachineInput","fromUTF8","fromUTF16","Inst","isRuneOp","RUNE","RUNE_ANY_NOT_NL","escapeRunes","runes","arg","matchRune","r0","FOLD_CASE","ALT","ALT_MATCH","CAPTURE","EMPTY_WIDTH","MATCH","FAIL","NOP","RUNE1","RUNE_ANY","Thread","inst","cap","Queue","sparse","densePcs","denseThreads","size","contains","pc","isEmpty","add","clear","Machine","fromRE2","prog","q0","numInst","q1","pool","poolSize","matched","matchcap","numCap","fill","ncap","fromMachine","machine","init","initNewCap","resetCap","submatches","alloc","t","freeQueue","queue","numberOfThread","requiredPoolLength","max","freeThread","match","startCond","cond","EMPTY_ALL","flag","runq","nextq","width","rune1","width1","prefixRune","advance","nextPos","tmpq","nextCond","atEnd","longest","q","d","opos","Regexp","isPseudoOp","Op","LEFT_PAREN","emptySubs","quoteIfHyphen","fromRegexp","re","regex","flags","subs","min","reinit","appendTo","NO_MATCH","EMPTY_MATCH","STAR","PLUS","QUEST","REPEAT","sub","LITERAL","NON_GREEDY","CONCAT","ALTERNATE","sep","ANY_CHAR_NOT_NL","ANY_CHAR","BEGIN_TEXT","END_TEXT","WAS_DOLLAR","BEGIN_LINE","END_LINE","WORD_BOUNDARY","NO_WORD_BOUNDARY","CHAR_CLASS","MAX_RUNE","maxCap","equals","that","Prog","getInst","addInst","push","skipNop","loop","next","patch","append","l1","l2","len","Frag","nullable","Compiler","ANY_RUNE_NOT_NL","ANY_RUNE","compileRegexp","f","compile","newInst","nop","fail","cat","f1","f2","alt","nongreedy","quest","star","plus","empty","bra","ket","Simplify","simplify","nre","nsub","simplify1","prefixSubs","suffix","nre2","CharGroup","sign","cls","code1","code2","code3","PERL_GROUPS","code4","code5","code6","code7","code8","code9","code10","code11","code12","code13","code14","code15","code16","code17","POSIX_GROUPS","CharClass","charClassToString","result","cmp","array","pivotFrom","pivotTo","qsortIntPair","left","right","pivotIndex","temp","toArray","cleanClass","w","appendLiteral","appendFoldedRange","appendRange","rlo","rhi","MIN_FOLD","MAX_FOLD","appendClass","appendFoldedClass","appendNegatedClass","nextLo","appendTable","table","triple","stride","appendNegatedTable","appendTableWithSign","negateClass","appendClassWithSign","appendGroup","g","foldCase","Pair","of","first","second","StringIterator","position","rewindTo","more","peek","skip","skipString","pop","rest","startsWith","beforePos","Parser","ANY_TABLE","unicodeTable","CATEGORIES","FOLD_CATEGORIES","SCRIPTS","FOLD_SCRIPT","minFoldRune","leadingRegexp","literalRegexp","parse","parseInternal","parseRepeat","parseInt","ERR_INVALID_REPEAT_SIZE","isValidCaptureName","parseFloat","isCharClass","mergeCharClass","dst","src","parseEscape","startPos","ERR_TRAILING_BACKSLASH","bigswitch","nhex","v","y","ERR_INVALID_ESCAPE","parseClassChar","wholeClassPos","ERR_MISSING_BRACKET","concatRunes","wholeRegexp","stack","free","numRegexp","numRunes","repeats","height","newRegexp","reuse","checkLimits","MAX_RUNES","ERR_LARGE","checkSize","checkHeight","MAX_SIZE","reEx","calcSize","force","MAX_HEIGHT","calcHeight","ERR_NESTING_DEPTH","h","hsub","popToPseudo","maybeConcat","re1","newLiteral","literal","repeat","lastRepeatPos","ERR_INVALID_REPEAT_OP","ERR_MISSING_REPEAT_ARGUMENT","repeatIsValid","trunc","concat","collapse","alternate","cleanAlt","newsubs","splice","factor","old","lensub","lenout","strlen","strflags","istr","istrlen","iflags","same","removeLeadingString","ifirst","removeLeadingRegexp","subMax","subJ","tmp","repeatPos","parsePerlFlags","parseVerticalBar","parseRightParen","parseClass","minMax","savedPos","lit","cc","parseUnicodeClass","parsePerlClassEscape","swapVerticalBar","ERR_MISSING_PAREN","begin","charAt","ERR_INVALID_NAMED_CAPTURE","ERR_DUPLICATE_NAMED_CAPTURE","sawFlag","ERR_INVALID_PERL_OP","VERTICAL_BAR","re3","ERR_UNEXPECTED_PAREN","parseNamedClass","ERR_INVALID_CHAR_RANGE","pair","tab","fold","AtomicReference","initialValue","value","set","newValue","compareAndSet","expect","update","RE2","initTest","expr","numSubexp","prefixComplete","compileImpl","PERL","compilePOSIX","POSIX","mode","prefixCompl","prefixStr","pooled","head","put","isNew","doExecute","matchWithGroup","ngroup","machineInput","groupMatch","matchUTF8","b","repl","replaceAllFunc","replFunc","maxReplaces","lastMatchEnd","searchPos","numReplaces","a","pad","a2","allMatches","deliverFun","prevMatchEnd","accept","findUTF8","findUTF8Index","findIndex","findUTF8Submatch","ret","findUTF8SubmatchIndex","findSubmatch","findSubmatchIndex","findAllUTF8","findAllUTF8Index","findAll","findAllIndex","findAllUTF8Submatch","findAllUTF8SubmatchIndex","findAllSubmatch","findAllSubmatchIndex","TranslateRegExpString","isUpperCaseAlpha","ch","isHexadecimal","getUtf8CharSize","code","translate","data","changed","nextCh","symSize","RE2JS","quote","translateRegExp","fregex","CASE_INSENSITIVE","DOTALL","MULTILINE","DISABLE_UNICODE_GROUPS","LONGEST_MATCH","re2Flags","re2Input","matcher","flagsInput","limit","emptiesSkipped","other"],"sourceRoot":""} \ No newline at end of file diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/546.js b/compose/grafana/plugins/grafana-lokiexplore-app/546.js new file mode 100644 index 0000000..444f860 --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/546.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkgrafana_lokiexplore_app=self.webpackChunkgrafana_lokiexplore_app||[]).push([[546],{8546:(e,a,r)=>{r.r(a),r.d(a,{default:()=>i});var t=r(8531),o=r(2007),l=r(5959),u=r.n(l),n=r(7389),s=r(7781),c=r(6854);const p={[s.AbstractLabelOperator.Equal]:c.KQ.Equal,[s.AbstractLabelOperator.NotEqual]:c.KQ.NotEqual,[s.AbstractLabelOperator.EqualRegEx]:c.KQ.RegexEqual,[s.AbstractLabelOperator.NotEqualRegEx]:c.KQ.RegexNotEqual};function i({datasourceUid:e,streamSelectors:a,from:r,to:c,returnToPreviousSource:i,renderButton:b}){const E=(0,t.useReturnToPrevious)(),f=(0,l.useMemo)((()=>{const t=a[0];if(!t||(null==t?void 0:t.operator)!==s.AbstractLabelOperator.Equal)return null;const o=(0,n.uu)(t.value);let l=new URLSearchParams;return e&&(l=(0,n.xh)(n.I8.DatasourceId,e,l)),r&&(l=(0,n.xh)(n.I8.TimeRangeFrom,r,l)),c&&(l=(0,n.xh)(n.I8.TimeRangeTo,c,l)),a.forEach((e=>{l=(0,n.zH)(n.I8.Labels,`${e.name}|${p[e.operator]}|${(0,n.XH)((0,n.vh)(e.value))},${(0,n.XH)((0,n.rx)(e.value))}`,l)})),(0,n.Rk)(`/explore/${t.name}/${o}/logs`,l)}),[e,r,c,a]);return f?b?b({href:f}):u().createElement(o.LinkButton,{variant:"secondary",href:f,onClick:()=>E(i||"previous")},"Open in Logs Drilldown"):null}}}]); +//# sourceMappingURL=546.js.map?_cache=e0a6d6e5588df727bcf9 \ No newline at end of file diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/546.js.map b/compose/grafana/plugins/grafana-lokiexplore-app/546.js.map new file mode 100644 index 0000000..aec5ddf --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/546.js.map @@ -0,0 +1 @@ +{"version":3,"file":"546.js?_cache=e0a6d6e5588df727bcf9","mappings":"wOAiBA,MAAMA,EAAc,CAClB,CAACC,EAAAA,sBAAsBC,OAAQC,EAAAA,GAAcD,MAC7C,CAACD,EAAAA,sBAAsBG,UAAWD,EAAAA,GAAcC,SAChD,CAACH,EAAAA,sBAAsBI,YAAaF,EAAAA,GAAcG,WAClD,CAACL,EAAAA,sBAAsBM,eAAgBJ,EAAAA,GAAcK,eAGxC,SAASC,GAA0B,cAChDC,EAAa,gBACbC,EAAe,KACfC,EAAI,GACJC,EAAE,uBACFC,EAAsB,aACtBC,IAEA,MAAMC,GAAsBC,EAAAA,EAAAA,uBAEtBC,GAAOC,EAAAA,EAAAA,UAAQ,KACnB,MAAMC,EAAYT,EAAgB,GAElC,IACGS,IAEDA,aAAAA,EAAAA,EAAWC,YAAapB,EAAAA,sBAAsBC,MAE9C,OAAO,KAGT,MAAMoB,GAAaC,EAAAA,EAAAA,IAAaH,EAAUI,OAE1C,IAAIC,EAAS,IAAIC,gBAwBjB,OAtBIhB,IACFe,GAASE,EAAAA,EAAAA,IAAgBC,EAAAA,GAAcC,aAAcnB,EAAee,IAGlEb,IACFa,GAASE,EAAAA,EAAAA,IAAgBC,EAAAA,GAAcE,cAAelB,EAAMa,IAG1DZ,IACFY,GAASE,EAAAA,EAAAA,IAAgBC,EAAAA,GAAcG,YAAalB,EAAIY,IAG1Dd,EAAgBqB,SAASC,IACvBR,GAASS,EAAAA,EAAAA,IACPN,EAAAA,GAAcO,OACd,GAAGF,EAAeG,QAAQpC,EAAYiC,EAAeZ,cAAagB,EAAAA,EAAAA,KAChEC,EAAAA,EAAAA,IAAqBL,EAAeT,YACjCa,EAAAA,EAAAA,KAAoBE,EAAAA,EAAAA,IAAmBN,EAAeT,UAC3DC,EAAAA,KAIGe,EAAAA,EAAAA,IAAa,YAAYpB,EAAUgB,QAAQd,SAAmBG,EAAO,GAC3E,CAACf,EAAeE,EAAMC,EAAIF,IAE7B,OAAKO,EAIDH,EACKA,EAAa,CAAEG,SAItB,kBAACuB,EAAAA,WAAUA,CACTC,QAAQ,YACRxB,KAAMA,EACNyB,QAAS,IAAM3B,EAAoBF,GAA0B,aAC9D,0BAZM,IAgBX,C","sources":["webpack://grafana-lokiexplore-app/./Components/OpenInLogsDrilldownButton/OpenInLogsDrilldownButton.tsx"],"sourcesContent":["import { useReturnToPrevious } from '@grafana/runtime';\nimport { LinkButton } from '@grafana/ui';\nimport React, { useMemo } from 'react';\nimport {\n appendUrlParameter,\n createAppUrl,\n escapeURLDelimiters,\n replaceEscapeChars,\n replaceSlash,\n setUrlParameter,\n stringifyAdHocValues,\n UrlParameters,\n} from 'services/extensions/links';\nimport { OpenInLogsDrilldownButtonProps } from './types';\nimport { AbstractLabelOperator } from '@grafana/data';\nimport { LabelFilterOp } from 'services/filterTypes';\n\nconst operatorMap = {\n [AbstractLabelOperator.Equal]: LabelFilterOp.Equal,\n [AbstractLabelOperator.NotEqual]: LabelFilterOp.NotEqual,\n [AbstractLabelOperator.EqualRegEx]: LabelFilterOp.RegexEqual,\n [AbstractLabelOperator.NotEqualRegEx]: LabelFilterOp.RegexNotEqual,\n};\n\nexport default function OpenInLogsDrilldownButton({\n datasourceUid,\n streamSelectors,\n from,\n to,\n returnToPreviousSource,\n renderButton,\n}: OpenInLogsDrilldownButtonProps) {\n const setReturnToPrevious = useReturnToPrevious();\n\n const href = useMemo(() => {\n const mainLabel = streamSelectors[0];\n\n if (\n !mainLabel ||\n // we can't open in explore logs if main label matcher is something different from equal\n mainLabel?.operator !== AbstractLabelOperator.Equal\n ) {\n return null;\n }\n\n const labelValue = replaceSlash(mainLabel.value);\n\n let params = new URLSearchParams();\n\n if (datasourceUid) {\n params = setUrlParameter(UrlParameters.DatasourceId, datasourceUid, params);\n }\n\n if (from) {\n params = setUrlParameter(UrlParameters.TimeRangeFrom, from, params);\n }\n\n if (to) {\n params = setUrlParameter(UrlParameters.TimeRangeTo, to, params);\n }\n\n streamSelectors.forEach((streamSelector) => {\n params = appendUrlParameter(\n UrlParameters.Labels,\n `${streamSelector.name}|${operatorMap[streamSelector.operator]}|${escapeURLDelimiters(\n stringifyAdHocValues(streamSelector.value)\n )},${escapeURLDelimiters(replaceEscapeChars(streamSelector.value))}`,\n params\n );\n });\n\n return createAppUrl(`/explore/${mainLabel.name}/${labelValue}/logs`, params);\n }, [datasourceUid, from, to, streamSelectors]);\n\n if (!href) {\n return null;\n }\n\n if (renderButton) {\n return renderButton({ href });\n }\n\n return (\n setReturnToPrevious(returnToPreviousSource || 'previous')}\n >\n Open in Logs Drilldown\n \n );\n}\n"],"names":["operatorMap","AbstractLabelOperator","Equal","LabelFilterOp","NotEqual","EqualRegEx","RegexEqual","NotEqualRegEx","RegexNotEqual","OpenInLogsDrilldownButton","datasourceUid","streamSelectors","from","to","returnToPreviousSource","renderButton","setReturnToPrevious","useReturnToPrevious","href","useMemo","mainLabel","operator","labelValue","replaceSlash","value","params","URLSearchParams","setUrlParameter","UrlParameters","DatasourceId","TimeRangeFrom","TimeRangeTo","forEach","streamSelector","appendUrlParameter","Labels","name","escapeURLDelimiters","stringifyAdHocValues","replaceEscapeChars","createAppUrl","LinkButton","variant","onClick"],"sourceRoot":""} \ No newline at end of file diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/649058283f564041551d.wasm b/compose/grafana/plugins/grafana-lokiexplore-app/649058283f564041551d.wasm new file mode 100644 index 0000000000000000000000000000000000000000..55e0ea9ebde6f4a3fb1fcba62861ceb74ef8fef5 GIT binary patch literal 201435 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

#N=Ku~ox?P9kx%$Rq?KOcrQu)3MWPNYWHh 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 literal 0 HcmV?d00001 diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/677.js b/compose/grafana/plugins/grafana-lokiexplore-app/677.js new file mode 100644 index 0000000..0301dc9 --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/677.js @@ -0,0 +1,3 @@ +/*! For license information please see 677.js.LICENSE.txt */ +(self.webpackChunkgrafana_lokiexplore_app=self.webpackChunkgrafana_lokiexplore_app||[]).push([[677],{9736:(e,t,n)=>{"use strict";n.d(t,{H9:()=>Zo,Zx:()=>Lt,yP:()=>zl,mI:()=>Ul,P1:()=>sc,OS:()=>nd,No:()=>id,WY:()=>St,n8:()=>Re,d0:()=>od,UU:()=>N,Oh:()=>au,jD:()=>bu,xK:()=>Kc,gF:()=>Xc,Zv:()=>z,Es:()=>Ll,vA:()=>Qc,G1:()=>qc,Bs:()=>I,So:()=>W,dt:()=>si,dM:()=>lu,WM:()=>Vc,KE:()=>kc,JZ:()=>X,Pj:()=>jl,oh:()=>te,Sh:()=>Di,Lp:()=>Nl,Eb:()=>_s,Lw:()=>cc,Gg:()=>r,jh:()=>Xi,Go:()=>sd,TG:()=>su});var r={};n.r(r),n.d(r,{K2:()=>as});var a=n(1159),o=n(7781),i=n(8531);function s(e,t,n){const r={...t};if(n)for(const e of Object.keys(r))n.includes(e)||delete r[e];return o.urlUtil.renderUrl(o.locationUtil.assureBaseUrl(e),r)}function l(e){const t=(0,a.useParams)(),n=(0,a.useLocation)();return{params:t,isExact:null!==(0,a.matchPath)({path:e,caseSensitive:!1,end:!0},n.pathname),path:n.pathname,url:n.pathname}}const c=new Map;var u=n(5959),d=n.t(u,2),p=n.n(u),f=n(1269);const h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let g;const m=new Uint8Array(16);function v(){if(!g&&(g="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!g))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return g(m)}const b=[];for(let e=0;e<256;++e)b.push((e+256).toString(16).slice(1));function y(e,t=0){return b[e[t+0]]+b[e[t+1]]+b[e[t+2]]+b[e[t+3]]+"-"+b[e[t+4]]+b[e[t+5]]+"-"+b[e[t+6]]+b[e[t+7]]+"-"+b[e[t+8]]+b[e[t+9]]+"-"+b[e[t+10]]+b[e[t+11]]+b[e[t+12]]+b[e[t+13]]+b[e[t+14]]+b[e[t+15]]}const w=function(e,t,n){if(h.randomUUID&&!t&&!e)return h.randomUUID();const r=(e=e||{}).random||(e.rng||v)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return y(r)};const S=p().memo((function({model:e,...t}){var n;const r=null!=(n=e.constructor.Component)?n:x,[a,o]=(0,u.useState)(0);return(0,u.useEffect)((()=>{const t=e.activate();return o((e=>e+1)),t}),[e]),e.isActive||e.renderBeforeActivation?p().createElement(r,{...t,model:e}):null}));function x(e){return null}class E extends o.BusEventWithPayload{}E.type="scene-object-state-change";class C extends o.BusEventWithPayload{}C.type="scene-object-user-action";var R,D=e=>{throw TypeError(e)},_=(e,t,n)=>t.has(e)||D("Cannot "+n);class O{constructor(e){var t,n,r;t=this,(n=R).has(t)?D("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(t):n.set(t,r),((e,t,n)=>{_(e,t,"write to private field"),t.set(e,n)})(this,R,e)}resolve(){return _(e=this,t=R,"read from private field"),n?n.call(e):t.get(e);var e,t,n}}R=new WeakMap;class I{constructor(e){this._isActive=!1,this._activationHandlers=[],this._deactivationHandlers=new Map,this._subs=new f.Subscription,this._refCount=0,this._renderBeforeActivation=!1,e.key||(e.key=w()),this._events=new o.EventBusSrv,this._state=Object.freeze(e),this._setParent(this._state)}get state(){return this._state}get isActive(){return this._isActive}get renderBeforeActivation(){return this._renderBeforeActivation}get parent(){return this._parent}get variableDependency(){return this._variableDependency}get urlSync(){return this._urlSync}get Component(){return S}_setParent(e){A(e,(e=>{e._parent&&e._parent!==this&&console.warn("SceneObject already has a parent set that is different from the new parent. You cannot share the same SceneObject instance in multiple scenes or in multiple different places of the same scene graph. Use SceneObject.clone() to duplicate a SceneObject or store a state key reference and use sceneGraph.findObject to locate it.",e,this),e._parent=this}))}clearParent(){this._parent=void 0}subscribeToState(e){return this._events.subscribe(E,(t=>{t.payload.changedObject===this&&e(t.payload.newState,t.payload.prevState)}))}subscribeToEvent(e,t){return this._events.subscribe(e,t)}setState(e){const t=this._state,n={...this._state,...e};this._state=Object.freeze(n),this._setParent(e),this._handleActivationOfChangedStateProps(t,n),this.publishEvent(new E({prevState:t,newState:n,partialUpdate:e,changedObject:this}),!0)}_handleActivationOfChangedStateProps(e,t){this.isActive&&(e.$behaviors!==t.$behaviors&&this._handleChangedBehaviors(e.$behaviors,t.$behaviors),e.$data!==t.$data&&this._handleChangedStateActivation(e.$data,t.$data),e.$variables!==t.$variables&&this._handleChangedStateActivation(e.$variables,t.$variables),e.$timeRange!==t.$timeRange&&this._handleChangedStateActivation(e.$timeRange,t.$timeRange))}_handleChangedStateActivation(e,t){if(e){const t=this._deactivationHandlers.get(e);t&&(t(),this._deactivationHandlers.delete(e))}t&&this._deactivationHandlers.set(t,t.activate())}_handleChangedBehaviors(e,t){if(e)for(const n of e)if(!t||!t.includes(n)){const e=this._deactivationHandlers.get(n);e&&(e(),this._deactivationHandlers.delete(n))}if(t)for(const n of t)e&&e.includes(n)||this._activateBehavior(n)}publishEvent(e,t){this._events.publish(e),t&&this.parent&&this.parent.publishEvent(e,t)}getRoot(){return this._parent?this._parent.getRoot():this}_internalActivate(){this._isActive=!0;const{$data:e,$variables:t,$timeRange:n,$behaviors:r}=this.state;if(this._activationHandlers.forEach((e=>{const t=e();t&&this._deactivationHandlers.set(t,t)})),n&&!n.isActive&&this._deactivationHandlers.set(n,n.activate()),t&&!t.isActive&&this._deactivationHandlers.set(t,t.activate()),e&&!e.isActive&&this._deactivationHandlers.set(e,e.activate()),r)for(const e of r)this._activateBehavior(e)}_activateBehavior(e){if(e instanceof I)this._deactivationHandlers.set(e,e.activate());else if("function"==typeof e){const t=e(this);t&&this._deactivationHandlers.set(e,t)}}activate(){this.isActive||this._internalActivate(),this._refCount++;let e=!1;return()=>{if(this._refCount--,e){throw new Error("SceneObject cancelation handler returned by activate() called a second time")}e=!0,0===this._refCount&&this._internalDeactivate()}}_internalDeactivate(){this._isActive=!1;for(let e of this._deactivationHandlers.values())e();this._deactivationHandlers.clear(),this._events.removeAllListeners(),this._subs.unsubscribe(),this._subs=new f.Subscription}useState(){return T(this)}forceRender(){this.setState({})}clone(e){return function(e,t){const n=P(e.state,t);return new e.constructor(n)}(this,e)}addActivationHandler(e){this._activationHandlers.push(e)}forEachChild(e){A(this.state,e)}getRef(){return this._ref||(this._ref=new O(this)),this._ref}toJSON(){return{type:Object.getPrototypeOf(this).constructor.name,isActive:this.isActive,state:this.state}}}function T(e,t){var n;const[r,a]=(0,u.useState)(e.state),o=e.state,i=null!=(n=null==t?void 0:t.shouldActivateOrKeepAlive)&&n;return(0,u.useEffect)((()=>{let t;i&&(t=e.activate());const n=e.subscribeToState((e=>{a(e)}));return e.state!==o&&a(e.state),()=>{n.unsubscribe(),t&&t()}}),[e,i]),e.state}function A(e,t){for(const n of Object.values(e))if(n instanceof I&&t(n),Array.isArray(n))for(const e of n)e instanceof I&&t(e)}var k=n(3241);function P(e,t){const n={...e};Object.assign(n,t);for(const e in n){if(t&&void 0!==t[e])continue;const r=n[e];if(r instanceof O)console.warn("Cloning object with SceneObjectRef");else if(r instanceof I)n[e]=r.clone();else if(Array.isArray(r)){const t=[];for(const e of r)e instanceof I?t.push(e.clone()):"object"==typeof e?t.push((0,k.cloneDeep)(e)):t.push(e);n[e]=t}else n[e]="object"==typeof r?(0,k.cloneDeep)(r):r}return n}function L(e,t){let n,r=e;for(;r&&!n;)n=t(r),r=r.parent;return n}class N extends o.DataSourceApi{constructor(e,t){super({name:"RuntimeDataSource-"+e,uid:t,type:e,id:1,readOnly:!0,jsonData:{},access:"direct",meta:{id:e,name:"RuntimeDataSource-"+e,type:o.PluginType.datasource,info:{author:{name:""},description:"",links:[],logos:{large:"",small:""},screenshots:[],updated:"",version:""},module:"",baseUrl:""}})}testDatasource(){return Promise.resolve({})}}const M=new Map;function B(e,t){const n=t.state.$variables;if(!n)return t.parent?B(e,t.parent):null;const r=n.getByName(e);return r||(t.parent?B(e,t.parent):null)}function V(e,t,...n){let r=!1;"undefined"!=typeof window&&(r="true"===localStorage.getItem("grafana.debug.scenes"))}new WeakMap,new WeakMap,new WeakMap,new WeakMap;function j(e){let t=e;for(;t;){if(t.state.$behaviors)for(const e of t.state.$behaviors)if("isQueryController"in e)return e;t=t.parent}}new WeakMap,new WeakMap;var F=n(1625);F.ob.Auto;var $=(e=>(e.NotStarted="NotStarted",e.Loading="Loading",e.Streaming="Streaming",e.Done="Done",e.Error="Error",e))($||{});class z extends I{constructor(e){super({data:U,...e})}getResultsStream(){const e={origin:this,data:this.state.data};return(0,f.of)(e)}}const U={state:$.Done,series:[],timeRange:(0,o.getDefaultTimeRange)()};class W{constructor(e,t){this._sceneObject=e,this._nextChangeShouldAddHistoryStep=!1,this._keys=t.keys}getKeys(){return"function"==typeof this._keys?this._keys():this._keys}getUrlState(){return this._sceneObject.getUrlState()}updateFromUrl(e){this._sceneObject.updateFromUrl(e)}shouldCreateHistoryStep(e){return this._nextChangeShouldAddHistoryStep}performBrowserHistoryAction(e){this._nextChangeShouldAddHistoryStep=!0,e(),this._nextChangeShouldAddHistoryStep=!1}}const H=/^\d+[yYmMsSwWhHdD]$/;function G(e){if("string"!=typeof e)return null;if(-1!==e.indexOf("now"))return e;if(H.test(e))return e;if(8===e.length){const t=(0,o.toUtc)(e,"YYYYMMDD");if(t.isValid())return t.toISOString()}else if(15===e.length){const t=(0,o.toUtc)(e,"YYYYMMDDTHHmmss");if(t.isValid())return t.toISOString()}else if(19===e.length){const t=(0,o.toUtc)(e,"YYYY-MM-DD HH:mm:ss");if(t.isValid())return t.toISOString()}else if(24===e.length){return(0,o.toUtc)(e).toISOString()}const t=parseInt(e,10);return isNaN(t)?null:(0,o.toUtc)(t).toISOString()}function q(e,t,n,r,a,i){const s=a&&"now"===t,l=Date.now();i&&function(e){e!==Q&&(Q=e,(0,o.setWeekStart)(e))}(i);const c=(e,t)=>o.dateMath.toDateTime?o.dateMath.toDateTime(e,t):o.dateMath.parse(e,t.roundUp,t.timezone,t.fiscalYearStartMonth);return{to:c(s?"now-"+a:t,{roundUp:!0,timezone:n,fiscalYearStartMonth:r,now:l}),from:c(e,{roundUp:!1,timezone:n,fiscalYearStartMonth:r,now:l}),raw:{from:e,to:t}}}let Q;function Y(e,t,n){if((0,o.isDateTime)(e))return e.isValid();if(o.dateMath.isMathString(e))return o.dateMath.isValid(e);return(0,o.dateTimeParse)(e,{roundUp:t,timeZone:n}).isValid()}class X extends I{constructor(e={}){var t;const n=e.from&&Y(e.from)?e.from:"now-6h",r=e.to&&Y(e.to)?e.to:"now",a=e.timeZone;super({from:n,to:r,timeZone:a,value:q(n,r,a||(0,o.getTimeZone)(),e.fiscalYearStartMonth,e.UNSAFE_nowDelay,e.weekStart),refreshOnActivate:null!=(t=e.refreshOnActivate)?t:{percent:10},...e}),this._urlSync=new W(this,{keys:["from","to","timezone","time","time.window"]}),this.onTimeRangeChange=e=>{const t={};if("string"==typeof e.raw.from?t.from=e.raw.from:t.from=e.raw.from.toISOString(),"string"==typeof e.raw.to?t.to=e.raw.to:t.to=e.raw.to.toISOString(),t.value=q(t.from,t.to,this.getTimeZone(),this.state.fiscalYearStartMonth,this.state.UNSAFE_nowDelay,this.state.weekStart),t.from!==this.state.from||t.to!==this.state.to){const e=j(this);null==e||e.startProfile("SceneTimeRange"),this._urlSync.performBrowserHistoryAction((()=>{this.setState(t)}))}},this.onTimeZoneChange=e=>{this._urlSync.performBrowserHistoryAction((()=>{this.setState({timeZone:e})}))},this.onRefresh=()=>{this.refreshRange(0),this.publishEvent(new i.RefreshEvent,!0)},this.addActivationHandler(this._onActivate.bind(this))}_onActivate(){if(!this.state.timeZone){const e=this.getTimeZoneSource();e!==this&&this._subs.add(e.subscribeToState(((e,t)=>{void 0!==e.timeZone&&e.timeZone!==t.timeZone&&this.refreshRange(0)})))}return o.rangeUtil.isRelativeTimeRange(this.state.value.raw)&&this.refreshIfStale(),()=>{this.state.weekStart&&(0,o.setWeekStart)(i.config.bootData.user.weekStart)}}refreshIfStale(){var e,t,n,r;let a;void 0!==(null==(t=null==(e=this.state)?void 0:e.refreshOnActivate)?void 0:t.percent)&&(a=this.calculatePercentOfInterval(this.state.refreshOnActivate.percent)),void 0!==(null==(r=null==(n=this.state)?void 0:n.refreshOnActivate)?void 0:r.afterMs)&&(a=Math.min(this.state.refreshOnActivate.afterMs,null!=a?a:1/0)),void 0!==a&&this.refreshRange(a)}getTimeZoneSource(){if(!this.parent||!this.parent.parent)return this;const e=L(this.parent.parent,(e=>{if(e.state.$timeRange&&e.state.$timeRange.state.timeZone)return e.state.$timeRange}));return e||this}refreshRange(e){var t;const n=q(this.state.from,this.state.to,null!=(t=this.state.timeZone)?t:(0,o.getTimeZone)(),this.state.fiscalYearStartMonth,this.state.UNSAFE_nowDelay,this.state.weekStart);n.to.diff(this.state.value.to,"milliseconds")>=e&&this.setState({value:n})}calculatePercentOfInterval(e){const t=this.state.value.to.diff(this.state.value.from,"milliseconds");return Math.ceil(t/e)}getTimeZone(){if(this.state.timeZone)return this.state.timeZone;const e=this.getTimeZoneSource();return e!==this?e.state.timeZone:(0,o.getTimeZone)()}getUrlState(){const e=i.locationService.getSearchObject(),t={from:this.state.from,to:this.state.to,timezone:this.getTimeZone()};return e.time&&e["time.window"]&&(t.time=null,t["time.window"]=null),t}updateFromUrl(e){var t,n,r;const a={};let i=G(e.from),s=G(e.to);if(e.time&&e["time.window"]){const t=function(e,t){const n=isNaN(Date.parse(e))?parseInt(e,10):Date.parse(e);let r;r=t.match(/^\d+$/)&&parseInt(t,10)?parseInt(t,10):o.rangeUtil.intervalToMs(t);return{from:(0,o.toUtc)(n-r/2).toISOString(),to:(0,o.toUtc)(n+r/2).toISOString()}}(Array.isArray(e.time)?e.time[0]:e.time,Array.isArray(e["time.window"])?e["time.window"][0]:e["time.window"]);t.from&&Y(t.from)&&(i=t.from),t.to&&Y(t.to)&&(s=t.to)}if(i&&Y(i)&&(a.from=i),s&&Y(s)&&(a.to=s),"string"==typeof e.timezone&&(a.timeZone=""!==e.timezone?e.timezone:void 0),0!==Object.keys(a).length)return a.value=q(null!=(t=a.from)?t:this.state.from,null!=(n=a.to)?n:this.state.to,null!=(r=a.timeZone)?r:this.getTimeZone(),this.state.fiscalYearStartMonth,this.state.UNSAFE_nowDelay,this.state.weekStart),this.setState(a)}}const K=new z,Z=new X;const J=new class extends I{constructor(){super({variables:[]})}getByName(e){}isVariableLoadingOrWaitingToUpdate(e){return!1}};function ee(e){var t;return null!=(t=L(e,(e=>e.state.$timeRange)))?t:Z}class te extends o.BusEventWithPayload{}function ne(e){return"object"==typeof e&&"formatter"in e}te.type="scene-variable-changed-value";let re,ae={};function oe(e){const t=ae[e];return t||(ae[e]=(0,k.property)(e))}class ie{constructor(e,t){this.state={name:e,value:t,type:"scopedvar"}}getValue(e){let{value:t}=this.state,n=t.value;return n=e?oe(e)(t.value):t.value,"string"===n||"number"===n||"boolean"===n?n:String(n)}getValueText(){const{value:e}=this.state;return null!=e.text?String(e.text):String(e)}}const se=new o.Registry((()=>{const e=[{id:F.$m.Lucene,name:"Lucene",description:"Values are lucene escaped and multi-valued variables generate an OR expression",formatter:e=>{if("string"==typeof e)return le(e);if(Array.isArray(e)){if(0===e.length)return"__empty__";return"("+(0,k.map)(e,(e=>'"'+le(e)+'"')).join(" OR ")+")"}return le(`${e}`)}},{id:F.$m.Raw,name:"raw",description:"Keep value as is",formatter:e=>String(e)},{id:F.$m.Regex,name:"Regex",description:"Values are regex escaped and multi-valued variables generate a (|) expression",formatter:e=>{if("string"==typeof e)return(0,o.escapeRegex)(e);if(Array.isArray(e)){const t=e.map((e=>"string"==typeof e?(0,o.escapeRegex)(e):(0,o.escapeRegex)(String(e))));return 1===t.length?t[0]:"("+t.join("|")+")"}return(0,o.escapeRegex)(`${e}`)}},{id:F.$m.Pipe,name:"Pipe",description:"Values are separated by | character",formatter:e=>"string"==typeof e?e:Array.isArray(e)?e.join("|"):`${e}`},{id:F.$m.Distributed,name:"Distributed",description:"Multiple values are formatted like variable=value",formatter:(e,t,n)=>"string"==typeof e?e:Array.isArray(e)?(e=(0,k.map)(e,((e,t)=>0!==t?n.state.name+"="+e:e)),e.join(",")):`${e}`},{id:F.$m.CSV,name:"Csv",description:"Comma-separated values",formatter:e=>"string"==typeof e?e:(0,k.isArray)(e)?e.join(","):String(e)},{id:F.$m.HTML,name:"HTML",description:"HTML escaping of values",formatter:e=>"string"==typeof e?o.textUtil.escapeHtml(e):(0,k.isArray)(e)?o.textUtil.escapeHtml(e.join(", ")):o.textUtil.escapeHtml(String(e))},{id:F.$m.JSON,name:"JSON",description:"JSON stringify value",formatter:e=>"string"==typeof e?e:JSON.stringify(e)},{id:F.$m.PercentEncode,name:"Percent encode",description:"Useful for URL escaping values",formatter:e=>(0,k.isArray)(e)?ce("{"+e.join(",")+"}"):ce(e)},{id:F.$m.SingleQuote,name:"Single quote",description:"Single quoted values",formatter:e=>{const t=new RegExp("'","g");if((0,k.isArray)(e))return(0,k.map)(e,(e=>`'${(0,k.replace)(e,t,"\\'")}'`)).join(",");let n="string"==typeof e?e:String(e);return`'${(0,k.replace)(n,t,"\\'")}'`}},{id:F.$m.DoubleQuote,name:"Double quote",description:"Double quoted values",formatter:e=>{const t=new RegExp('"',"g");if((0,k.isArray)(e))return(0,k.map)(e,(e=>`"${(0,k.replace)(e,t,'\\"')}"`)).join(",");let n="string"==typeof e?e:String(e);return`"${(0,k.replace)(n,t,'\\"')}"`}},{id:F.$m.SQLString,name:"SQL string",description:"SQL string quoting and commas for use in IN statements and other scenarios",formatter:he},{id:F.$m.Date,name:"Date",description:"Format date in different ways",formatter:(e,t)=>{var n;let r=NaN;if("number"==typeof e?r=e:"string"==typeof e&&(r=parseInt(e,10)),isNaN(r))return"NaN";const a=null!=(n=t[0])?n:"iso";switch(a){case"ms":return String(e);case"seconds":return`${Math.round(r/1e3)}`;case"iso":return(0,o.dateTime)(r).toISOString();default:return(t||[]).length>1?(0,o.dateTime)(r).format(t.join(":")):(0,o.dateTime)(r).format(a)}}},{id:F.$m.Glob,name:"Glob",description:"Format multi-valued variables using glob syntax, example {value1,value2}",formatter:e=>(0,k.isArray)(e)&&e.length>1?"{"+e.join(",")+"}":String(e)},{id:F.$m.Text,name:"Text",description:"Format variables in their text representation. Example in multi-variable scenario A + B + C.",formatter:(e,t,n)=>n.getValueText?n.getValueText():String(e)},{id:F.$m.QueryParam,name:"Query parameter",description:"Format variables as URL parameters. Example in multi-variable scenario A + B + C => var-foo=A&var-foo=B&var-foo=C.",formatter:(e,t,n)=>{if(n.urlSync){const e=n.urlSync.getUrlState();return o.urlUtil.toUrlParams(e)}return Array.isArray(e)?e.map((e=>pe(n.state.name,e))).join("&"):pe(n.state.name,e)}},{id:F.$m.UriEncode,name:"Percent encode as URI",description:"Useful for URL escaping values, taking into URI syntax characters",formatter:e=>(0,k.isArray)(e)?ue("{"+e.join(",")+"}"):ue(e)}];return e}));function le(e){return!1===isNaN(+e)?e:e.replace(/([\!\*\+\-\=<>\s\&\|\(\)\[\]\{\}\^\~\?\:\\/"])/g,"\\$1")}function ce(e){return"object"==typeof e&&(e=String(e)),de(encodeURIComponent(e))}const ue=e=>de(encodeURI(String(e))),de=e=>e.replace(/[!'()*]/g,(e=>"%"+e.charCodeAt(0).toString(16).toUpperCase()));function pe(e,t){return`var-${e}=${ce(t)}`}const fe={"'":"''",'"':'\\"'};function he(e){const t=new RegExp("'|\"","g");if((0,k.isArray)(e))return(0,k.map)(e,(e=>`'${(0,k.replace)(e,t,(e=>{var t;return null!=(t=fe[e])?t:""}))}'`)).join(",");let n="string"==typeof e?e:String(e);return`'${(0,k.replace)(n,t,(e=>{var t;return null!=(t=fe[e])?t:""}))}'`}const ge="All",me="$__all",ve="$__auto",be=/\$(\w+)|\[\[(\w+?)(?::(\w+))?\]\]|\${(\w+)(?:\.([^:^\}]+))?(?::([^\}]+))?}/g,ye="__searchFilter";class we{constructor(e){this._value=e}formatter(){return this._value}}class Se{constructor(e,t){this.state={name:e,type:"time_macro"},this._sceneObject=t}getValue(){const e=ee(this._sceneObject);return"__from"===this.state.name?e.state.value.from.valueOf():e.state.value.to.valueOf()}getValueText(){const e=ee(this._sceneObject);return"__from"===this.state.name?(0,o.dateTimeFormat)(e.state.value.from,{timeZone:e.getTimeZone()}):(0,o.dateTimeFormat)(e.state.value.to,{timeZone:e.getTimeZone()})}}class xe{constructor(e,t,n){this.state={name:e,type:"time_macro",match:n},this._sceneObject=t}getValue(){var e;const t=Hi(this._sceneObject);if(t){const n=null==(e=t.state.data)?void 0:e.request;return n?"__interval_ms"===this.state.name?n.intervalMs:n.interval:this.state.match}return this.state.match}}function Ee(e,t){e.setState(t)}function Ce(){return i.useLocationService?(0,i.useLocationService)():i.locationService}class Re extends I{constructor(){super(...arguments),this._urlSync=new De(this)}validateAndUpdate(){return this.getValueOptions({}).pipe((0,f.map)((e=>(this.updateValueGivenNewOptions(e),{}))))}onCancel(){this.setStateHelper({loading:!1});const e=this.parent;null==e||e.cancel(this)}updateValueGivenNewOptions(e){const{value:t,text:n,options:r}=this.state,a=this.getStateUpdateGivenNewOptions(e,t,n);this.interceptStateUpdateAfterValidation(a),this.setStateHelper(a),(a.value!==t||a.text!==n||this.hasAllValue()&&!(0,k.isEqual)(e,r))&&this.publishEvent(new te(this),!0)}getStateUpdateGivenNewOptions(e,t,n){const r={options:e,loading:!1,value:t,text:n};if(0===e.length)return this.state.defaultToAll||this.state.includeAll?(r.value=me,r.text=ge):this.state.isMulti?(r.value=[],r.text=[]):(r.value="",r.text=""),r;if(this.hasAllValue())return this.state.includeAll?r.text=ge:(r.value=e[0].value,r.text=e[0].label,this.state.isMulti&&(r.value=[r.value],r.text=[r.text])),r;if(this.state.isMulti){const a=(Array.isArray(t)?t:[t]).filter((t=>e.find((e=>e.value===t)))),o=a.map((t=>e.find((e=>e.value===t)).label));if(0===a.length){const t=this.getDefaultMultiState(e);r.value=t.value,r.text=t.text}else(0,k.isEqual)(a,t)||(r.value=a),(0,k.isEqual)(o,n)||(r.text=o);return r}let a=function(e,t,n){let r;for(const a of n){if(a.value===e)return a;a.label===t&&(r=a)}return r}(t,n,e);if(a)r.text=a.label,r.value=a.value;else{const t=this.getDefaultSingleState(e);r.value=t.value,r.text=t.text}return r}interceptStateUpdateAfterValidation(e){const t=e.value===me&&this.state.text===ge;this.skipNextValidation&&e.value!==this.state.value&&e.text!==this.state.text&&!t&&(e.value=this.state.value,e.text=this.state.text),this.skipNextValidation=!1}getValue(){return this.hasAllValue()?this.state.allValue?new _e(this.state.allValue,this):this.state.options.map((e=>e.value)):this.state.value}getValueText(){return this.hasAllValue()?ge:Array.isArray(this.state.text)?this.state.text.join(" + "):String(this.state.text)}hasAllValue(){const e=this.state.value;return e===me||Array.isArray(e)&&e[0]===me}getDefaultMultiState(e){return this.state.defaultToAll?{value:[me],text:[ge]}:e.length>0?{value:[e[0].value],text:[e[0].label]}:{value:[],text:[]}}getDefaultSingleState(e){return this.state.defaultToAll?{value:me,text:ge}:e.length>0?{value:e[0].value,text:e[0].label}:{value:"",text:""}}changeValueTo(e,t,n=!1){var r,a;if(e===this.state.value&&t===this.state.text)return;if(t||(t=Array.isArray(e)?e.map((e=>this.findLabelTextForValue(e))):this.findLabelTextForValue(e)),Array.isArray(e)){if(0===e.length){const n=this.getDefaultMultiState(this.state.options);e=n.value,t=n.text}e[e.length-1]===me?(e=[me],t=[ge]):e[0]===me&&e.length>1&&(e.shift(),Array.isArray(t)&&t.shift())}if((0,k.isEqual)(e,this.state.value)&&(0,k.isEqual)(t,this.state.text))return;const o=()=>this.setStateHelper({value:e,text:t,loading:!1});n?null==(a=(r=this._urlSync).performBrowserHistoryAction)||a.call(r,o):o(),this.publishEvent(new te(this),!0)}findLabelTextForValue(e){if(e===me)return ge;const t=this.state.options.find((t=>t.value===e));if(t)return t.label;const n=this.state.options.find((t=>t.label===e));return n?n.label:e}setStateHelper(e){Ee(this,e)}getOptionsForSelect(e=!0){let t=this.state.options;if(this.state.includeAll&&(t=[{value:me,label:ge},...t]),e&&!Array.isArray(this.state.value)){t.find((e=>e.value===this.state.value))||(t=[{value:this.state.value,label:String(this.state.text)},...t])}return t}refreshOptions(){this.getValueOptions({}).subscribe((e=>{this.updateValueGivenNewOptions(e)}))}}class De{constructor(e){this._sceneObject=e,this._nextChangeShouldAddHistoryStep=!1}getKey(){return`var-${this._sceneObject.state.name}`}getKeys(){return this._sceneObject.state.skipUrlSync?[]:[this.getKey()]}getUrlState(){if(this._sceneObject.state.skipUrlSync)return{};let e=null,t=this._sceneObject.state.value;return e=Array.isArray(t)?t.map(String):this._sceneObject.state.isMulti?[String(t)]:String(t),{[this.getKey()]:e}}updateFromUrl(e){let t=e[this.getKey()];null!=t&&(this._sceneObject.state.includeAll&&(t=function(e){if((0,k.isArray)(e)&&e[0]===ge)return[me];if(e===ge)return me;return e}(t)),this._sceneObject.state.allValue&&this._sceneObject.state.allValue===t&&(t=me),this._sceneObject.isActive||(this._sceneObject.skipNextValidation=!0),this._sceneObject.changeValueTo(t))}performBrowserHistoryAction(e){this._nextChangeShouldAddHistoryStep=!0,e(),this._nextChangeShouldAddHistoryStep=!1}shouldCreateHistoryStep(e){return this._nextChangeShouldAddHistoryStep}}class _e{constructor(e,t){this._value=e,this._variable=t}formatter(e){return e===F.$m.Text?ge:e===F.$m.PercentEncode?se.get(F.$m.PercentEncode).formatter(this._value,[],this._variable):e===F.$m.QueryParam?se.get(F.$m.QueryParam).formatter(ge,[],this._variable):this._value}}function Oe(e,t={}){if(e.state.$variables)for(const n of e.state.$variables.state.variables)n.state.skipUrlSync||t[n.state.name]||(t[n.state.name]=n);return e.parent&&Oe(e.parent,t),t}const Ie=(0,o.getDisplayProcessor)();class Te{constructor(e){this._urlQueryParams=e}formatter(e){if(!e)return this._urlQueryParams;const t=e.split(":");if("exclude"===t[0]&&t.length>1){const e=new URLSearchParams(this._urlQueryParams);for(const n of t[1].split(","))e.delete(n);return`?${e}`}if("include"===t[0]&&t.length>1){const e=new URLSearchParams(this._urlQueryParams),n=t[1].split(",");for(const t of e.keys())n.includes(t)||e.delete(t);return`?${e}`}return this._urlQueryParams}}const Ae=new Map([[o.DataLinkBuiltInVars.includeVars,class{constructor(e,t){this.state={name:e,type:"url_variable"},this._sceneObject=t}getValue(){const e=Oe(this._sceneObject),t=se.get(F.$m.QueryParam),n=[];for(const r of Object.keys(e)){const a=e[r];if(a instanceof Re&&a.hasAllValue()&&!a.state.allValue){n.push(t.formatter(me,[],a));continue}const o=a.getValue();o&&(ne(o)?n.push(o.formatter(F.$m.QueryParam)):n.push(t.formatter(o,[],a)))}return new we(n.join("&"))}getValueText(){return""}}],[o.DataLinkBuiltInVars.keepTime,class{constructor(e,t){this.state={name:e,type:"url_variable"},this._sceneObject=t}getValue(){var e;const t=null==(e=ee(this._sceneObject).urlSync)?void 0:e.getUrlState();return"browser"===(null==t?void 0:t.timezone)&&(t.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone),new we(o.urlUtil.toUrlParams(t))}getValueText(){return""}}],["__value",class{constructor(e,t,n,r){this._match=n,this._scopedVars=r,this.state={name:e,type:"__value"}}getValue(e){var t,n;const r=null==(t=this._scopedVars)?void 0:t.__dataContext;if(!r)return this._match;const{frame:a,rowIndex:i,field:s,calculatedValue:l}=r.value;if(l)switch(e){case"numeric":case"raw":return l.numeric;case"time":return"";default:return(0,o.formattedValueToString)(l)}if(null==i)return this._match;if("time"===e){const e=a.fields.find((e=>e.type===o.FieldType.time));return e?e.values.get(i):void 0}if(!s)return this._match;const c=s.values.get(i);if("raw"===e)return c;const u=(null!=(n=s.display)?n:Ie)(c);return"numeric"===e?u.numeric:(0,o.formattedValueToString)(u)}getValueText(){return""}}],["__data",class{constructor(e,t,n,r){this._match=n,this._scopedVars=r,this.state={name:e,type:"__data"}}getValue(e){var t,n;const r=null==(t=this._scopedVars)?void 0:t.__dataContext;if(!r||!e)return this._match;const{frame:a,rowIndex:i}=r.value;if(void 0===i||void 0===e)return this._match;const s={name:a.name,refId:a.refId,fields:(0,o.getFieldDisplayValuesProxy)({frame:a,rowIndex:i})};return null!=(n=oe(e)(s))?n:""}getValueText(){return""}}],["__series",class{constructor(e,t,n,r){this._match=n,this._scopedVars=r,this.state={name:e,type:"__series"}}getValue(e){var t;const n=null==(t=this._scopedVars)?void 0:t.__dataContext;if(!n||!e)return this._match;if("name"!==e)return this._match;const{frame:r,frameIndex:a}=n.value;return(0,o.getFrameDisplayName)(r,a)}getValueText(){return""}}],["__field",class{constructor(e,t,n,r){this._match=n,this._scopedVars=r,this.state={name:e,type:"__field"}}getValue(e){var t,n;const r=null==(t=this._scopedVars)?void 0:t.__dataContext;if(!r||!e)return this._match;if(void 0===e||""===e)return this._match;const{frame:a,field:i,data:s}=r.value,l=function(e,t,n){return new Proxy({},{get:(r,a)=>"name"===a?e.name:"displayName"===a?(0,o.getFieldDisplayName)(e,t,n):"labels"===a||"formattedLabels"===a?e.labels?{...e.labels,__values:Object.values(e.labels).sort().join(", "),toString:()=>(0,o.formatLabels)(e.labels,"",!0)}:"":void 0})}(i,a,s);return null!=(n=oe(e)(l))?n:""}getValueText(){return""}}],["__url",class{constructor(e,t){this.state={name:e,type:"url_macro"}}getValue(e){var t;const n=i.locationService.getLocation(),r=null!=(t=i.config.appSubUrl)?t:"";switch(null!=e?e:""){case"params":return new Te(n.search);case"path":return r+n.pathname;default:return r+n.pathname+n.search}}getValueText(){return""}}],["__from",Se],["__to",Se],["__timezone",class{constructor(e,t){this.state={name:e,type:"time_macro"},this._sceneObject=t}getValue(){const e=ee(this._sceneObject).getTimeZone();return"browser"===e?Intl.DateTimeFormat().resolvedOptions().timeZone:e}getValueText(){return this.getValue()}}],["__user",class{constructor(e,t){this.state={name:e,type:"user_macro"}}getValue(e){const t=i.config.bootData.user;switch(e){case"login":return t.login;case"email":return t.email;default:return String(t.id)}}getValueText(){return""}}],["__org",class{constructor(e,t){this.state={name:e,type:"org_macro"}}getValue(e){const t=i.config.bootData.user;return"name"===e?t.orgName:String(t.orgId)}getValueText(){return""}}],["__interval",xe],["__interval_ms",xe]]);function ke(e,t,n,r,a){return t&&"string"==typeof t?(be.lastIndex=0,t.replace(be,((t,o,i,s,l,c,u)=>{const d=o||i||l,p=s||u||r,f=function(e,t,n,r){if(n&&n.hasOwnProperty(e)){const t=n[e];if(t)return function(e,t){return re?(re.state.name=e,re.state.value=t):re=new ie(e,t),re}(e,t)}const a=B(e,r);if(a)return a;const o=Ae.get(e);if(o)return new o(e,r,t,n);return null}(d,t,n,e);if(!f)return a&&a.push({match:t,variableName:d,fieldPath:c,format:p,value:t,found:!1}),t;const h=function(e,t,n,r){if(null==n)return"";if(ne(n))return ke(e,n.formatter(r));Array.isArray(n)||"object"!=typeof n||(n=`${n}`);if("function"==typeof r)return r(n,{name:t.state.name,type:t.state.type,multi:t.state.isMulti,includeAll:t.state.includeAll});let a=[];r?(a=r.split(":"),a.length>1?(r=a[0],a=a.slice(1)):a=[]):r=F.$m.Glob;let o=se.getIfExists(r);o||(console.error(`Variable format ${r} not found. Using glob format as fallback.`),o=se.get(F.$m.Glob));return o.formatter(n,a,t)}(e,f,f.getValue(c),p);return a&&a.push({match:t,variableName:d,fieldPath:c,format:p,value:h,found:h!==t}),h}))):null!=t?t:""}function Pe(e){return void 0!==e.useState}function Le(e){return"enrichDataRequest"in e}function Ne(e){return"isDataLayer"in e}function Me(e){return t=>{const n=Xi.getQueryController(e.origin);return n?new f.Observable((r=>{e.cancel||(e.cancel=()=>r.complete()),n.queryStarted(e);let a=!1;const o=t.subscribe({next:t=>{a||t.state===$.Loading||(a=!0,n.queryCompleted(e)),r.next(t)},error:e=>r.error(e),complete:()=>{r.complete()}});return()=>{o.unsubscribe(),a||n.queryCompleted(e)}})):t}}function Be(e){return new f.Observable((t=>{t.next({state:$.Loading});(0,f.from)(e).pipe((0,f.map)((()=>({state:$.Done}))),(0,f.catchError)((()=>(t.next({state:$.Error}),[])))).subscribe({next:e=>t.next(e),complete:()=>t.complete()})}))}async function Ve(e,t){if(null==e?void 0:e.uid){const t=M.get(e.uid);if(t)return t}if(e&&e.query)return e;const n=(0,i.getDataSourceSrv)().get(e,t);if(t.__sceneObject&&t.__sceneObject.value.valueOf()){const e=Xi.getQueryController(t.__sceneObject.value.valueOf());e&&e.state.enableProfiling&&Be(n).pipe(Me({type:"plugin",origin:t.__sceneObject.value.valueOf()})).subscribe((()=>{}))}return await n}class je{constructor(){this._values=new Map}recordCurrentDependencyValuesForSceneObject(e){if(this.clearValues(),e.variableDependency)for(const t of e.variableDependency.getNames()){const n=Xi.lookupVariable(t,e);n&&this._values.set(n.state.name,n.getValue())}}cloneAndRecordCurrentValuesForSceneObject(e){const t=new je;return t.recordCurrentDependencyValuesForSceneObject(e),t}clearValues(){this._values.clear()}hasValues(){return!!this._values}recordCurrentValue(e){this._values.set(e.state.name,e.getValue())}hasRecordedValue(e){return this._values.has(e.state.name)}hasValueChanged(e){if(this._values.has(e.state.name)){if(!ui(this._values.get(e.state.name),e.getValue()))return!0}return!1}hasDependenciesChanged(e){if(!this._values)return!1;if(!e.variableDependency)return!1;for(const t of e.variableDependency.getNames()){const n=Xi.lookupVariable(t,e);if(!n)continue;const r=n.state.name;if(n&&this._values.has(r)){if(!ui(this._values.get(r),n.getValue()))return!0}}return!1}}function Fe(e){return"object"==typeof e&&"getExtraQueries"in e}const $e=(e,t)=>(0,f.of)(t),ze=0;function Ue(e){const t=e.getRoot();return Le(t)?t.enrichDataRequest(e):null}let We,He=new Set;const Ge=new Set;var qe=n(2007),Qe=n(8449);function Ye(e,t="latest"){return Xe(e,t.replace(/\-.*/,""))}function Xe(e,t){const n={};for(const[r,a]of Object.entries(e))Ke(a)?n[r]=Xe(a,t):(Je(a,r),n[r]=Ze(a,t));return n}function Ke(e){if("object"==typeof e){const[t]=Object.keys(e);return!(0,Qe.valid)(t)}return!1}function Ze(e,t){let n,r=Object.keys(e).sort(Qe.compare);if("latest"===t)return e[r[r.length-1]];for(const e of r)(0,Qe.gte)(t,e)&&(n=e);return n||(n=r[r.length-1]),e[n]}function Je(e,t){if(!Object.keys(e).every((e=>(0,Qe.valid)(e))))throw new Error(`Invalid semver version: '${t}'`)}const et="8.5.0",tt={RadioButton:{container:{"10.2.3":"data-testid radio-button"}},Breadcrumbs:{breadcrumb:{"9.4.0":e=>`data-testid ${e} breadcrumb`}},TimePicker:{openButton:{[et]:"data-testid TimePicker Open Button"},overlayContent:{"10.2.3":"data-testid TimePicker Overlay Content"},fromField:{"10.2.3":"data-testid Time Range from field",[et]:"Time Range from field"},toField:{"10.2.3":"data-testid Time Range to field",[et]:"Time Range to field"},applyTimeRange:{[et]:"data-testid TimePicker submit button"},copyTimeRange:{"10.4.0":"data-testid TimePicker copy button"},pasteTimeRange:{"10.4.0":"data-testid TimePicker paste button"},calendar:{label:{"10.2.3":"data-testid Time Range calendar",[et]:"Time Range calendar"},openButton:{"10.2.3":"data-testid Open time range calendar",[et]:"Open time range calendar"},closeButton:{"10.2.3":"data-testid Close time range Calendar",[et]:"Close time range Calendar"}},absoluteTimeRangeTitle:{[et]:"data-testid-absolute-time-range-narrow"}},DataSourcePermissions:{form:{"9.5.0":()=>'form[name="addPermission"]'},roleType:{"9.5.0":"Role to add new permission to"},rolePicker:{"9.5.0":"Built-in role picker"},permissionLevel:{"9.5.0":"Permission Level"}},DateTimePicker:{input:{"10.2.3":"data-testid date-time-input"}},DataSource:{TestData:{QueryTab:{scenarioSelectContainer:{[et]:"Test Data Query scenario select container"},scenarioSelect:{[et]:"Test Data Query scenario select"},max:{[et]:"TestData max"},min:{[et]:"TestData min"},noise:{[et]:"TestData noise"},seriesCount:{[et]:"TestData series count"},spread:{[et]:"TestData spread"},startValue:{[et]:"TestData start value"},drop:{[et]:"TestData drop values"}}},DataSourceHttpSettings:{urlInput:{"10.4.0":"data-testid Datasource HTTP settings url",[et]:"Datasource HTTP settings url"}},Jaeger:{traceIDInput:{[et]:"Trace ID"}},Prometheus:{configPage:{connectionSettings:{[et]:"Data source connection URL"},manageAlerts:{"10.4.0":"prometheus-alerts-manager"},scrapeInterval:{"10.4.0":"data-testid scrape interval"},queryTimeout:{"10.4.0":"data-testid query timeout"},defaultEditor:{"10.4.0":"data-testid default editor"},disableMetricLookup:{"10.4.0":"disable-metric-lookup"},prometheusType:{"10.4.0":"data-testid prometheus type"},prometheusVersion:{"10.4.0":"data-testid prometheus version"},cacheLevel:{"10.4.0":"data-testid cache level"},incrementalQuerying:{"10.4.0":"prometheus-incremental-querying"},queryOverlapWindow:{"10.4.0":"data-testid query overlap window"},disableRecordingRules:{"10.4.0":"disable-recording-rules"},customQueryParameters:{"10.4.0":"data-testid custom query parameters"},httpMethod:{"10.4.0":"data-testid http method"},exemplarsAddButton:{"10.3.0":"data-testid Add exemplar config button",[et]:"Add exemplar config button"},internalLinkSwitch:{"10.3.0":"data-testid Internal link switch",[et]:"Internal link switch"},codeModeMetricNamesSuggestionLimit:{"11.1.0":"data-testid code mode metric names suggestion limit"}},queryEditor:{explain:{"10.4.0":"data-testid prometheus explain switch wrapper"},editorToggle:{"10.4.0":"data-testid QueryEditorModeToggle"},options:{"10.4.0":"data-testid prometheus options"},legend:{"10.4.0":"data-testid prometheus legend wrapper"},format:{"10.4.0":"data-testid prometheus format"},step:{"10.4.0":"prometheus-step"},type:{"10.4.0":"data-testid prometheus type"},exemplars:{"10.4.0":"prometheus-exemplars"},builder:{metricSelect:{"10.4.0":"data-testid metric select"},hints:{"10.4.0":"data-testid prometheus hints"},metricsExplorer:{"10.4.0":"data-testid metrics explorer"},queryAdvisor:{"10.4.0":"data-testid query advisor"}},code:{queryField:{"10.4.0":"data-testid prometheus query field"},metricsCountInfo:{"11.1.0":"data-testid metrics count disclaimer"},metricsBrowser:{openButton:{"10.4.0":"data-testid open metrics browser"},selectMetric:{"10.4.0":"data-testid select a metric"},seriesLimit:{"10.3.1":"data-testid series limit"},metricList:{"10.4.0":"data-testid metric list"},labelNamesFilter:{"10.4.0":"data-testid label names filter"},labelValuesFilter:{"10.4.0":"data-testid label values filter"},useQuery:{"10.4.0":"data-testid use query"},useAsRateQuery:{"10.4.0":"data-testid use as rate query"},validateSelector:{"10.4.0":"data-testid validate selector"},clear:{"10.4.0":"data-testid clear"}}}},exemplarMarker:{"10.3.0":"data-testid Exemplar marker",[et]:"Exemplar marker"},variableQueryEditor:{queryType:{"10.4.0":"data-testid query type"},labelnames:{metricRegex:{"10.4.0":"data-testid label names metric regex"}},labelValues:{labelSelect:{"10.4.0":"data-testid label values label select"}},metricNames:{metricRegex:{"10.4.0":"data-testid metric names metric regex"}},varQueryResult:{"10.4.0":"data-testid variable query result"},seriesQuery:{"10.4.0":"data-testid prometheus series query"},classicQuery:{"10.4.0":"data-testid prometheus classic query"}},annotations:{minStep:{"10.4.0":"prometheus-annotation-min-step"},title:{"10.4.0":"data-testid prometheus annotation title"},tags:{"10.4.0":"data-testid prometheus annotation tags"},text:{"10.4.0":"data-testid prometheus annotation text"},seriesValueAsTimestamp:{"10.4.0":"data-testid prometheus annotation series value as timestamp"}}}},Menu:{MenuComponent:{[et]:e=>`${e} menu`},MenuGroup:{[et]:e=>`${e} menu group`},MenuItem:{[et]:e=>`${e} menu item`},SubMenu:{container:{"10.3.0":"data-testid SubMenu container",[et]:"SubMenu container"},icon:{"10.3.0":"data-testid SubMenu icon",[et]:"SubMenu icon"}}},Panels:{Panel:{title:{[et]:e=>`data-testid Panel header ${e}`},content:{"11.1.0":"data-testid panel content"},headerItems:{"10.2.0":e=>`data-testid Panel header item ${e}`},menuItems:{"9.5.0":e=>`data-testid Panel menu item ${e}`},menu:{"9.5.0":e=>`data-testid Panel menu ${e}`},containerByTitle:{[et]:e=>`${e} panel`},headerCornerInfo:{[et]:e=>`Panel header ${e}`},status:{"10.2.0":e=>`data-testid Panel status ${e}`,[et]:e=>"Panel status"},loadingBar:{"10.0.0":()=>"Panel loading bar"},HoverWidget:{container:{"10.1.0":"data-testid hover-header-container",[et]:"hover-header-container"},dragIcon:{"10.0.0":"data-testid drag-icon"}},PanelDataErrorMessage:{"10.4.0":"data-testid Panel data error message"}},Visualization:{Graph:{container:{"9.5.0":"Graph container"},VisualizationTab:{legendSection:{[et]:"Legend section"}},Legend:{legendItemAlias:{[et]:e=>`gpl alias ${e}`},showLegendSwitch:{[et]:"gpl show legend"}},xAxis:{labels:{[et]:()=>"div.flot-x-axis > div.flot-tick-label"}}},BarGauge:{valueV2:{[et]:"data-testid Bar gauge value"}},PieChart:{svgSlice:{"10.3.0":"data testid Pie Chart Slice"}},Text:{container:{[et]:()=>".markdown-html"}},Table:{header:{[et]:"table header"},footer:{[et]:"table-footer"},body:{"10.2.0":"data-testid table body"}}}},VizLegend:{seriesName:{"10.3.0":e=>`data-testid VizLegend series ${e}`}},Drawer:{General:{title:{[et]:e=>`Drawer title ${e}`},expand:{[et]:"Drawer expand"},contract:{[et]:"Drawer contract"},close:{"10.3.0":"data-testid Drawer close",[et]:"Drawer close"},rcContentWrapper:{"9.4.0":()=>".rc-drawer-content-wrapper"},subtitle:{"10.4.0":"data-testid drawer subtitle"}},DashboardSaveDrawer:{saveButton:{"11.1.0":"data-testid Save dashboard drawer button"},saveAsButton:{"11.1.0":"data-testid Save as dashboard drawer button"},saveAsTitleInput:{"11.1.0":"Save dashboard title field"}}},PanelEditor:{General:{content:{"11.1.0":"data-testid Panel editor content","8.0.0":"Panel editor content"}},OptionsPane:{content:{"11.1.0":"data-testid Panel editor option pane content",[et]:"Panel editor option pane content"},select:{[et]:"Panel editor option pane select"},fieldLabel:{[et]:e=>`${e} field property editor`},fieldInput:{"11.0.0":e=>`data-testid Panel editor option pane field input ${e}`}},DataPane:{content:{"11.1.0":"data-testid Panel editor data pane content",[et]:"Panel editor data pane content"}},applyButton:{"9.2.0":"data-testid Apply changes and go back to dashboard","9.1.0":"Apply changes and go back to dashboard","8.0.0":"panel editor apply"},toggleVizPicker:{"10.0.0":"data-testid toggle-viz-picker","8.0.0":"toggle-viz-picker"},toggleVizOptions:{"10.1.0":"data-testid toggle-viz-options",[et]:"toggle-viz-options"},toggleTableView:{"11.1.0":"data-testid toggle-table-view",[et]:"toggle-table-view"},showZoomField:{"10.2.0":"Map controls Show zoom control field property editor"},showAttributionField:{"10.2.0":"Map controls Show attribution field property editor"},showScaleField:{"10.2.0":"Map controls Show scale field property editor"},showMeasureField:{"10.2.0":"Map controls Show measure tools field property editor"},showDebugField:{"10.2.0":"Map controls Show debug field property editor"},measureButton:{"9.2.0":"show measure tools"}},PanelInspector:{Data:{content:{[et]:"Panel inspector Data content"}},Stats:{content:{[et]:"Panel inspector Stats content"}},Json:{content:{"11.1.0":"data-testid Panel inspector Json content",[et]:"Panel inspector Json content"}},Query:{content:{[et]:"Panel inspector Query content"},refreshButton:{[et]:"Panel inspector Query refresh button"},jsonObjectKeys:{[et]:()=>".json-formatter-key"}}},Tab:{title:{"11.2.0":e=>`data-testid Tab ${e}`},active:{[et]:()=>'[class*="-activeTabStyle"]'}},RefreshPicker:{runButtonV2:{[et]:"data-testid RefreshPicker run button"},intervalButtonV2:{[et]:"data-testid RefreshPicker interval button"}},QueryTab:{content:{[et]:"Query editor tab content"},queryInspectorButton:{[et]:"Query inspector button"},queryHistoryButton:{"10.2.0":"data-testid query-history-button",[et]:"query-history-button"},addQuery:{"10.2.0":"data-testid query-tab-add-query",[et]:"Query editor add query button"},queryGroupTopSection:{"11.2.0":"data-testid query group top section"},addExpression:{"11.2.0":"data-testid query-tab-add-expression"}},QueryHistory:{queryText:{"9.0.0":"Query text"}},QueryEditorRows:{rows:{[et]:"Query editor row"}},QueryEditorRow:{actionButton:{"10.4.0":e=>`data-testid ${e}`},title:{[et]:e=>`Query editor row title ${e}`},container:{[et]:e=>`Query editor row ${e}`}},AlertTab:{content:{"10.2.3":"data-testid Alert editor tab content",[et]:"Alert editor tab content"}},AlertRules:{groupToggle:{"11.0.0":"data-testid group-collapse-toggle"},toggle:{"11.0.0":"data-testid collapse-toggle"},expandedContent:{"11.0.0":"data-testid expanded-content"},previewButton:{"11.1.0":"data-testid alert-rule preview-button"},ruleNameField:{"11.1.0":"data-testid alert-rule name-field"},newFolderButton:{"11.1.0":"data-testid alert-rule new-folder-button"},newFolderNameField:{"11.1.0":"data-testid alert-rule name-folder-name-field"},newFolderNameCreateButton:{"11.1.0":"data-testid alert-rule name-folder-name-create-button"},newEvaluationGroupButton:{"11.1.0":"data-testid alert-rule new-evaluation-group-button"},newEvaluationGroupName:{"11.1.0":"data-testid alert-rule new-evaluation-group-name"},newEvaluationGroupInterval:{"11.1.0":"data-testid alert-rule new-evaluation-group-interval"},newEvaluationGroupCreate:{"11.1.0":"data-testid alert-rule new-evaluation-group-create-button"},step:{"11.5.0":e=>`data-testid alert-rule step-${e}`},stepAdvancedModeSwitch:{"11.5.0":e=>`data-testid advanced-mode-switch step-${e}`}},Alert:{alertV2:{[et]:e=>`data-testid Alert ${e}`}},TransformTab:{content:{"10.1.0":"data-testid Transform editor tab content",[et]:"Transform editor tab content"},newTransform:{"10.1.0":e=>`data-testid New transform ${e}`},transformationEditor:{"10.1.0":e=>`data-testid Transformation editor ${e}`},transformationEditorDebugger:{"10.1.0":e=>`data-testid Transformation editor debugger ${e}`}},Transforms:{card:{"10.1.0":e=>`data-testid New transform ${e}`},disableTransformationButton:{"10.4.0":"data-testid Disable transformation button"},Reduce:{modeLabel:{"10.2.3":"data-testid Transform mode label",[et]:"Transform mode label"},calculationsLabel:{"10.2.3":"data-testid Transform calculations label",[et]:"Transform calculations label"}},SpatialOperations:{actionLabel:{"9.1.2":"root Action field property editor"},locationLabel:{"10.2.0":"root Location Mode field property editor"},location:{autoOption:{"9.1.2":"Auto location option"},coords:{option:{"9.1.2":"Coords location option"},latitudeFieldLabel:{"9.1.2":"root Latitude field field property editor"},longitudeFieldLabel:{"9.1.2":"root Longitude field field property editor"}},geohash:{option:{"9.1.2":"Geohash location option"},geohashFieldLabel:{"9.1.2":"root Geohash field field property editor"}},lookup:{option:{"9.1.2":"Lookup location option"},lookupFieldLabel:{"9.1.2":"root Lookup field field property editor"},gazetteerFieldLabel:{"9.1.2":"root Gazetteer field property editor"}}}},searchInput:{"10.2.3":"data-testid search transformations",[et]:"search transformations"},noTransformationsMessage:{"10.2.3":"data-testid no transformations message"},addTransformationButton:{"10.1.0":"data-testid add transformation button",[et]:"add transformation button"},removeAllTransformationsButton:{"10.4.0":"data-testid remove all transformations button"}},NavBar:{Configuration:{button:{"9.5.0":"Configuration"}},Toggle:{button:{"10.2.3":"data-testid Toggle menu",[et]:"Toggle menu"}},Reporting:{button:{"9.5.0":"Reporting"}}},NavMenu:{Menu:{"10.2.3":"data-testid navigation mega-menu"},item:{"9.5.0":"data-testid Nav menu item"}},NavToolbar:{container:{"9.4.0":"data-testid Nav toolbar"},commandPaletteTrigger:{"11.5.0":"data-testid Command palette trigger"},shareDashboard:{"11.1.0":"data-testid Share dashboard"},markAsFavorite:{"11.1.0":"data-testid Mark as favorite"},editDashboard:{editButton:{"11.1.0":"data-testid Edit dashboard button"},saveButton:{"11.1.0":"data-testid Save dashboard button"},exitButton:{"11.1.0":"data-testid Exit edit mode button"},settingsButton:{"11.1.0":"data-testid Dashboard settings"},addRowButton:{"11.1.0":"data-testid Add row button"},addLibraryPanelButton:{"11.1.0":"data-testid Add a panel from the panel library button"},addVisualizationButton:{"11.1.0":"data-testid Add new visualization menu item"},pastePanelButton:{"11.1.0":"data-testid Paste panel button"},discardChangesButton:{"11.1.0":"data-testid Discard changes button"},discardLibraryPanelButton:{"11.1.0":"data-testid Discard library panel button"},unlinkLibraryPanelButton:{"11.1.0":"data-testid Unlink library panel button"},saveLibraryPanelButton:{"11.1.0":"data-testid Save library panel button"},backToDashboardButton:{"11.1.0":"data-testid Back to dashboard button"}}},PageToolbar:{container:{[et]:()=>".page-toolbar"},item:{[et]:e=>`${e}`},itemButton:{"9.5.0":e=>`data-testid ${e}`}},QueryEditorToolbarItem:{button:{[et]:e=>`QueryEditor toolbar item button ${e}`}},BackButton:{backArrow:{"10.3.0":"data-testid Go Back",[et]:"Go Back"}},OptionsGroup:{group:{"11.1.0":e=>e?`data-testid Options group ${e}`:"data-testid Options group",[et]:e=>e?`Options group ${e}`:"Options group"},toggle:{"11.1.0":e=>e?`data-testid Options group ${e} toggle`:"data-testid Options group toggle",[et]:e=>e?`Options group ${e} toggle`:"Options group toggle"}},PluginVisualization:{item:{[et]:e=>`Plugin visualization item ${e}`},current:{[et]:()=>'[class*="-currentVisualizationItem"]'}},Select:{menu:{"11.5.0":"data-testid Select menu",[et]:"Select options menu"},option:{"11.1.0":"data-testid Select option",[et]:"Select option"},toggleAllOptions:{"11.3.0":"data-testid toggle all options"},input:{[et]:()=>'input[id*="time-options-input"]'},singleValue:{[et]:()=>'div[class*="-singleValue"]'}},FieldConfigEditor:{content:{[et]:"Field config editor content"}},OverridesConfigEditor:{content:{[et]:"Field overrides editor content"}},FolderPicker:{containerV2:{[et]:"data-testid Folder picker select container"},input:{"10.4.0":"data-testid folder-picker-input"}},ReadonlyFolderPicker:{container:{[et]:"data-testid Readonly folder picker select container"}},DataSourcePicker:{container:{"10.0.0":"data-testid Data source picker select container","8.0.0":"Data source picker select container"},inputV2:{"10.1.0":"data-testid Select a data source",[et]:"Select a data source"},dataSourceList:{"10.4.0":"data-testid Data source list dropdown"},advancedModal:{dataSourceList:{"10.4.0":"data-testid Data source list"},builtInDataSourceList:{"10.4.0":"data-testid Built in data source list"}}},TimeZonePicker:{containerV2:{[et]:"data-testid Time zone picker select container"},changeTimeSettingsButton:{"11.0.0":"data-testid Time zone picker Change time settings button"}},WeekStartPicker:{containerV2:{[et]:"data-testid Choose starting day of the week"},placeholder:{[et]:"Choose starting day of the week"}},TraceViewer:{spanBar:{"9.0.0":"data-testid SpanBar--wrapper"}},QueryField:{container:{"10.3.0":"data-testid Query field",[et]:"Query field"}},QueryBuilder:{queryPatterns:{"10.3.0":"data-testid Query patterns",[et]:"Query patterns"},labelSelect:{"10.3.0":"data-testid Select label",[et]:"Select label"},inputSelect:{"11.1.0":"data-testid Select label-input"},valueSelect:{"10.3.0":"data-testid Select value",[et]:"Select value"},matchOperatorSelect:{"10.3.0":"data-testid Select match operator",[et]:"Select match operator"}},ValuePicker:{button:{"10.3.0":e=>`data-testid Value picker button ${e}`},select:{"10.3.0":e=>`data-testid Value picker select ${e}`}},Search:{sectionV2:{[et]:"data-testid Search section"},itemsV2:{[et]:"data-testid Search items"},cards:{[et]:"data-testid Search cards"},collapseFolder:{[et]:e=>`data-testid Collapse folder ${e}`},expandFolder:{[et]:e=>`data-testid Expand folder ${e}`},dashboardItem:{[et]:e=>`data-testid Dashboard search item ${e}`},dashboardCard:{[et]:e=>`data-testid Search card ${e}`},folderHeader:{"9.3.0":e=>`data-testid Folder header ${e}`},folderContent:{"9.3.0":e=>`data-testid Folder content ${e}`},dashboardItems:{[et]:"data-testid Dashboard search item"}},DashboardLinks:{container:{[et]:"data-testid Dashboard link container"},dropDown:{[et]:"data-testid Dashboard link dropdown"},link:{[et]:"data-testid Dashboard link"}},LoadingIndicator:{icon:{"10.4.0":"data-testid Loading indicator",[et]:"Loading indicator"}},CallToActionCard:{buttonV2:{[et]:e=>`data-testid Call to action button ${e}`}},DataLinksContextMenu:{singleLink:{"10.3.0":"data-testid Data link",[et]:"Data link"}},CodeEditor:{container:{"10.2.3":"data-testid Code editor container",[et]:"Code editor container"}},ReactMonacoEditor:{editorLazy:{"11.1.0":"data-testid ReactMonacoEditor editorLazy"}},DashboardImportPage:{textarea:{[et]:"data-testid-import-dashboard-textarea"},submit:{[et]:"data-testid-load-dashboard"}},ImportDashboardForm:{name:{[et]:"data-testid-import-dashboard-title"},submit:{[et]:"data-testid-import-dashboard-submit"}},PanelAlertTabContent:{content:{"10.2.3":"data-testid Unified alert editor tab content",[et]:"Unified alert editor tab content"}},VisualizationPreview:{card:{[et]:e=>`data-testid suggestion-${e}`}},ColorSwatch:{name:{[et]:"data-testid-colorswatch"}},DashboardRow:{title:{[et]:e=>`data-testid dashboard-row-title-${e}`}},UserProfile:{profileSaveButton:{[et]:"data-testid-user-profile-save"},preferencesSaveButton:{[et]:"data-testid-shared-prefs-save"},orgsTable:{[et]:"data-testid-user-orgs-table"},sessionsTable:{[et]:"data-testid-user-sessions-table"},extensionPointTabs:{"10.2.3":"data-testid-extension-point-tabs"},extensionPointTab:{"10.2.3":e=>`data-testid-extension-point-tab-${e}`}},FileUpload:{inputField:{"9.0.0":"data-testid-file-upload-input-field"},fileNameSpan:{"9.0.0":"data-testid-file-upload-file-name"}},DebugOverlay:{wrapper:{"9.2.0":"debug-overlay"}},OrgRolePicker:{input:{"9.5.0":"Role"}},AnalyticsToolbarButton:{button:{"9.5.0":"Dashboard insights"}},Variables:{variableOption:{"9.5.0":"data-testid variable-option"},variableLinkWrapper:{"11.1.1":"data-testid variable-link-wrapper"}},Annotations:{annotationsTypeInput:{"11.1.0":"data-testid annotations-type-input",[et]:"annotations-type-input"},annotationsChoosePanelInput:{"11.1.0":"data-testid choose-panels-input",[et]:"choose-panels-input"},editor:{testButton:{"11.0.0":"data-testid annotations-test-button"},resultContainer:{"11.0.0":"data-testid annotations-query-result-container"}}},Tooltip:{container:{"10.2.0":"data-testid tooltip"}},ReturnToPrevious:{buttonGroup:{"11.0.0":"data-testid dismissable button group"},backButton:{"11.0.0":"data-testid back"},dismissButton:{"11.0.0":"data-testid dismiss"}},SQLQueryEditor:{selectColumn:{"11.0.0":"data-testid select-column"},selectColumnInput:{"11.0.0":"data-testid select-column-input"},selectFunctionParameter:{"11.0.0":e=>`data-testid select-function-parameter-${e}`},selectAggregation:{"11.0.0":"data-testid select-aggregation"},selectAggregationInput:{"11.0.0":"data-testid select-aggregation-input"},selectAlias:{"11.0.0":"data-testid select-alias"},selectAliasInput:{"11.0.0":"data-testid select-alias-input"},selectInputParameter:{"11.0.0":"data-testid select-input-parameter"},filterConjunction:{"11.0.0":"data-testid filter-conjunction"},filterField:{"11.0.0":"data-testid filter-field"},filterOperator:{"11.0.0":"data-testid filter-operator"},headerTableSelector:{"11.0.0":"data-testid header-table-selector"},headerFilterSwitch:{"11.0.0":"data-testid header-filter-switch"},headerGroupSwitch:{"11.0.0":"data-testid header-group-switch"},headerOrderSwitch:{"11.0.0":"data-testid header-order-switch"},headerPreviewSwitch:{"11.0.0":"data-testid header-preview-switch"}},EntityNotFound:{container:{"11.2.0":"data-testid entity-not-found"}},Portal:{container:{"11.5.0":"data-testid portal-container"}}},nt={pages:Ye({Alerting:{AddAlertRule:{url:{"10.1.0":"/alerting/new/alerting",[et]:"/alerting/new"}},EditAlertRule:{url:{[et]:e=>`alerting/${e}/edit`}}},Login:{url:{[et]:"/login"},username:{"10.2.3":"data-testid Username input field",[et]:"Username input field"},password:{"10.2.3":"data-testid Password input field",[et]:"Password input field"},submit:{"10.2.3":"data-testid Login button",[et]:"Login button"},skip:{"10.2.3":"data-testid Skip change password button"}},PasswordlessLogin:{url:{[et]:"/login/passwordless/authenticate"},email:{"10.2.3":"data-testid Email input field",[et]:"Email input field"},submit:{"10.2.3":"data-testid PasswordlessLogin button",[et]:"PasswordlessLogin button"}},Home:{url:{[et]:"/"}},DataSource:{name:{"10.3.0":"data-testid Data source settings page name input field",[et]:"Data source settings page name input field"},delete:{[et]:"Data source settings page Delete button"},readOnly:{"10.3.0":"data-testid Data source settings page read only message",[et]:"Data source settings page read only message"},saveAndTest:{"10.0.0":"data-testid Data source settings page Save and Test button",[et]:"Data source settings page Save and Test button"},alert:{"10.3.0":"data-testid Data source settings page Alert",[et]:"Data source settings page Alert"}},DataSources:{url:{[et]:"/datasources"},dataSources:{[et]:e=>`Data source list item ${e}`}},EditDataSource:{url:{"9.5.0":e=>`/datasources/edit/${e}`},settings:{"9.5.0":"Datasource settings page basic settings"}},AddDataSource:{url:{[et]:"/datasources/new"},dataSourcePluginsV2:{"9.3.1":e=>`Add new data source ${e}`,[et]:e=>`Data source plugin item ${e}`}},ConfirmModal:{delete:{"10.0.0":"data-testid Confirm Modal Danger Button",[et]:"Confirm Modal Danger Button"}},AddDashboard:{url:{[et]:"/dashboard/new"},itemButton:{"9.5.0":e=>`data-testid ${e}`},addNewPanel:{"11.1.0":"data-testid Add new panel","8.0.0":"Add new panel",[et]:"Add new panel"},itemButtonAddViz:{[et]:"Add new visualization menu item"},addNewRow:{"11.1.0":"data-testid Add new row",[et]:"Add new row"},addNewPanelLibrary:{"11.1.0":"data-testid Add new panel from panel library",[et]:"Add new panel from panel library"},Settings:{Annotations:{List:{url:{[et]:"/dashboard/new?orgId=1&editview=annotations"}},Edit:{url:{[et]:e=>`/dashboard/new?editview=annotations&editIndex=${e}`}}},Variables:{List:{url:{"11.3.0":"/dashboard/new?orgId=1&editview=variables",[et]:"/dashboard/new?orgId=1&editview=templating"}},Edit:{url:{"11.3.0":e=>`/dashboard/new?orgId=1&editview=variables&editIndex=${e}`,[et]:e=>`/dashboard/new?orgId=1&editview=templating&editIndex=${e}`}}}}},Dashboard:{url:{[et]:e=>`/d/${e}`},DashNav:{nav:{[et]:"Dashboard navigation"},navV2:{[et]:"data-testid Dashboard navigation"},publicDashboardTag:{"9.1.0":"data-testid public dashboard tag"},shareButton:{"10.4.0":"data-testid share-button"},scrollContainer:{"11.1.0":"data-testid Dashboard canvas scroll container"},newShareButton:{container:{"11.1.0":"data-testid new share button"},shareLink:{"11.1.0":"data-testid new share link-button"},arrowMenu:{"11.1.0":"data-testid new share button arrow menu"},menu:{container:{"11.1.0":"data-testid new share button menu"},shareInternally:{"11.1.0":"data-testid new share button share internally"},shareExternally:{"11.1.1":"data-testid new share button share externally"},shareSnapshot:{"11.2.0":"data-testid new share button share snapshot"}}},NewExportButton:{container:{"11.2.0":"data-testid new export button"},arrowMenu:{"11.2.0":"data-testid new export button arrow menu"},Menu:{container:{"11.2.0":"data-testid new export button menu"},exportAsJson:{"11.2.0":"data-testid new export button export as json"}}},playlistControls:{prev:{"11.0.0":"data-testid playlist previous dashboard button"},stop:{"11.0.0":"data-testid playlist stop dashboard button"},next:{"11.0.0":"data-testid playlist next dashboard button"}}},Controls:{"11.1.0":"data-testid dashboard controls"},SubMenu:{submenu:{[et]:"Dashboard submenu"},submenuItem:{[et]:"data-testid template variable"},submenuItemLabels:{[et]:e=>`data-testid Dashboard template variables submenu Label ${e}`},submenuItemValueDropDownValueLinkTexts:{[et]:e=>`data-testid Dashboard template variables Variable Value DropDown value link text ${e}`},submenuItemValueDropDownDropDown:{[et]:"Variable options"},submenuItemValueDropDownOptionTexts:{[et]:e=>`data-testid Dashboard template variables Variable Value DropDown option text ${e}`},Annotations:{annotationsWrapper:{"10.0.0":"data-testid annotation-wrapper"},annotationLabel:{"10.0.0":e=>`data-testid Dashboard annotations submenu Label ${e}`},annotationToggle:{"10.0.0":e=>`data-testid Dashboard annotations submenu Toggle ${e}`}}},Settings:{Actions:{close:{"9.5.0":"data-testid dashboard-settings-close"}},General:{deleteDashBoard:{"11.1.0":"data-testid Dashboard settings page delete dashboard button"},sectionItems:{[et]:e=>`Dashboard settings section item ${e}`},saveDashBoard:{[et]:"Dashboard settings aside actions Save button"},saveAsDashBoard:{[et]:"Dashboard settings aside actions Save As button"},title:{"11.2.0":"General"}},Annotations:{Edit:{urlParams:{[et]:e=>`editview=annotations&editIndex=${e}`}},List:{url:{[et]:e=>`/d/${e}?editview=annotations`},addAnnotationCTAV2:{[et]:"data-testid Call to action button Add annotation query"},annotations:{"10.4.0":"data-testid list-annotations"}},Settings:{name:{"11.1.0":"data-testid Annotations settings name input",[et]:"Annotations settings name input"}},NewAnnotation:{panelFilterSelect:{"10.0.0":"data-testid annotations-panel-filter"},showInLabel:{"11.1.0":"data-testid show-in-label"},previewInDashboard:{"10.0.0":"data-testid annotations-preview"},delete:{"10.4.0":"data-testid annotations-delete"},apply:{"10.4.0":"data-testid annotations-apply"},enable:{"10.4.0":"data-testid annotation-enable"},hide:{"10.4.0":"data-testid annotation-hide"}}},Variables:{List:{url:{"11.3.0":e=>`/d/${e}?editview=variables`,[et]:e=>`/d/${e}?editview=templating`},addVariableCTAV2:{[et]:"data-testid Call to action button Add variable"},newButton:{[et]:"Variable editor New variable button"},table:{[et]:"Variable editor Table"},tableRowNameFields:{[et]:e=>`Variable editor Table Name field ${e}`},tableRowDefinitionFields:{"10.1.0":e=>`Variable editor Table Definition field ${e}`},tableRowArrowUpButtons:{[et]:e=>`Variable editor Table ArrowUp button ${e}`},tableRowArrowDownButtons:{[et]:e=>`Variable editor Table ArrowDown button ${e}`},tableRowDuplicateButtons:{[et]:e=>`Variable editor Table Duplicate button ${e}`},tableRowRemoveButtons:{[et]:e=>`Variable editor Table Remove button ${e}`}},Edit:{urlParams:{"11.3.0":e=>`editview=variables&editIndex=${e}`,[et]:e=>`editview=templating&editIndex=${e}`},General:{headerLink:{[et]:"Variable editor Header link"},modeLabelNew:{[et]:"Variable editor Header mode New"},modeLabelEdit:{[et]:"Variable editor Header mode Edit"},generalNameInput:{[et]:"Variable editor Form Name field"},generalNameInputV2:{[et]:"data-testid Variable editor Form Name field"},generalTypeSelect:{[et]:"Variable editor Form Type select"},generalTypeSelectV2:{[et]:"data-testid Variable editor Form Type select"},generalLabelInput:{[et]:"Variable editor Form Label field"},generalLabelInputV2:{[et]:"data-testid Variable editor Form Label field"},generalHideSelect:{[et]:"Variable editor Form Hide select"},generalHideSelectV2:{[et]:"data-testid Variable editor Form Hide select"},selectionOptionsAllowCustomValueSwitch:{[et]:"data-testid Variable editor Form Allow Custom Value switch"},selectionOptionsMultiSwitch:{"10.4.0":"data-testid Variable editor Form Multi switch",[et]:"Variable editor Form Multi switch"},selectionOptionsIncludeAllSwitch:{"10.4.0":"data-testid Variable editor Form IncludeAll switch",[et]:"Variable editor Form IncludeAll switch"},selectionOptionsCustomAllInput:{"10.4.0":"data-testid Variable editor Form IncludeAll field",[et]:"Variable editor Form IncludeAll field"},previewOfValuesOption:{"10.4.0":"data-testid Variable editor Preview of Values option",[et]:"Variable editor Preview of Values option"},submitButton:{"10.4.0":"data-testid Variable editor Run Query button",[et]:"Variable editor Submit button"},applyButton:{"9.3.0":"data-testid Variable editor Apply button"}},QueryVariable:{queryOptionsDataSourceSelect:{"10.4.0":"data-testid Select a data source","10.0.0":"data-testid Data source picker select container",[et]:"Data source picker select container"},queryOptionsRefreshSelect:{[et]:"Variable editor Form Query Refresh select"},queryOptionsRefreshSelectV2:{[et]:"data-testid Variable editor Form Query Refresh select"},queryOptionsRegExInput:{[et]:"Variable editor Form Query RegEx field"},queryOptionsRegExInputV2:{[et]:"data-testid Variable editor Form Query RegEx field"},queryOptionsSortSelect:{[et]:"Variable editor Form Query Sort select"},queryOptionsSortSelectV2:{[et]:"data-testid Variable editor Form Query Sort select"},queryOptionsQueryInput:{"10.4.0":"data-testid Variable editor Form Default Variable Query Editor textarea"},valueGroupsTagsEnabledSwitch:{[et]:"Variable editor Form Query UseTags switch"},valueGroupsTagsTagsQueryInput:{[et]:"Variable editor Form Query TagsQuery field"},valueGroupsTagsTagsValuesQueryInput:{[et]:"Variable editor Form Query TagsValuesQuery field"}},ConstantVariable:{constantOptionsQueryInput:{[et]:"Variable editor Form Constant Query field"},constantOptionsQueryInputV2:{[et]:"data-testid Variable editor Form Constant Query field"}},DatasourceVariable:{datasourceSelect:{[et]:"data-testid datasource variable datasource type"}},TextBoxVariable:{textBoxOptionsQueryInput:{[et]:"Variable editor Form TextBox Query field"},textBoxOptionsQueryInputV2:{[et]:"data-testid Variable editor Form TextBox Query field"}},CustomVariable:{customValueInput:{[et]:"data-testid custom-variable-input"}},IntervalVariable:{intervalsValueInput:{[et]:"data-testid interval variable intervals input"},autoEnabledCheckbox:{"10.4.0":"data-testid interval variable auto value checkbox"},stepCountIntervalSelect:{"10.4.0":"data-testid interval variable step count input"},minIntervalInput:{"10.4.0":"data-testid interval variable mininum interval input"}},GroupByVariable:{dataSourceSelect:{"10.4.0":"data-testid Select a data source"},infoText:{"10.4.0":"data-testid group by variable info text"},modeToggle:{"10.4.0":"data-testid group by variable mode toggle"}},AdHocFiltersVariable:{datasourceSelect:{"10.4.0":"data-testid Select a data source"},infoText:{"10.4.0":"data-testid ad-hoc filters variable info text"},modeToggle:{"11.0.0":"data-testid ad-hoc filters variable mode toggle"}}}}},Annotations:{marker:{"10.0.0":"data-testid annotation-marker"}},Rows:{Repeated:{ConfigSection:{warningMessage:{"10.2.0":"data-testid Repeated rows warning message"}}}}},Dashboards:{url:{[et]:"/dashboards"},dashboards:{"10.2.0":e=>`Dashboard search item ${e}`}},SaveDashboardAsModal:{newName:{"10.2.0":"Save dashboard title field"},save:{"10.2.0":"Save dashboard button"}},SaveDashboardModal:{save:{"10.2.0":"Dashboard settings Save Dashboard Modal Save button"},saveVariables:{"10.2.0":"Dashboard settings Save Dashboard Modal Save variables checkbox"},saveTimerange:{"10.2.0":"Dashboard settings Save Dashboard Modal Save timerange checkbox"},saveRefresh:{"11.1.0":"Dashboard settings Save Dashboard Modal Save refresh checkbox"}},SharePanelModal:{linkToRenderedImage:{[et]:"Link to rendered image"}},ShareDashboardModal:{PublicDashboard:{WillBePublicCheckbox:{"9.1.0":"data-testid public dashboard will be public checkbox"},LimitedDSCheckbox:{"9.1.0":"data-testid public dashboard limited datasources checkbox"},CostIncreaseCheckbox:{"9.1.0":"data-testid public dashboard cost may increase checkbox"},PauseSwitch:{"9.5.0":"data-testid public dashboard pause switch"},EnableAnnotationsSwitch:{"9.3.0":"data-testid public dashboard on off switch for annotations"},CreateButton:{"9.5.0":"data-testid public dashboard create button"},DeleteButton:{"9.3.0":"data-testid public dashboard delete button"},CopyUrlInput:{"9.1.0":"data-testid public dashboard copy url input"},CopyUrlButton:{"9.1.0":"data-testid public dashboard copy url button"},SettingsDropdown:{"10.1.0":"data-testid public dashboard settings dropdown"},TemplateVariablesWarningAlert:{"9.1.0":"data-testid public dashboard disabled template variables alert"},UnsupportedDataSourcesWarningAlert:{"9.5.0":"data-testid public dashboard unsupported data sources alert"},NoUpsertPermissionsWarningAlert:{"9.5.0":"data-testid public dashboard no upsert permissions alert"},EnableTimeRangeSwitch:{"9.4.0":"data-testid public dashboard on off switch for time range"},EmailSharingConfiguration:{Container:{"9.5.0":"data-testid email sharing config container"},ShareType:{"9.5.0":"data-testid public dashboard share type"},EmailSharingInput:{"9.5.0":"data-testid public dashboard email sharing input"},EmailSharingInviteButton:{"9.5.0":"data-testid public dashboard email sharing invite button"},EmailSharingList:{"9.5.0":"data-testid public dashboard email sharing list"},DeleteEmail:{"9.5.0":"data-testid public dashboard delete email button"},ReshareLink:{"9.5.0":"data-testid public dashboard reshare link button"}}},SnapshotScene:{url:{"11.1.0":e=>`/dashboard/snapshot/${e}`},PublishSnapshot:{"11.1.0":"data-testid publish snapshot button"},CopyUrlButton:{"11.1.0":"data-testid snapshot copy url button"},CopyUrlInput:{"11.1.0":"data-testid snapshot copy url input"}}},ShareDashboardDrawer:{ShareInternally:{container:{"11.3.0":"data-testid share internally drawer container"},lockTimeRangeSwitch:{"11.3.0":"data-testid share internally lock time range switch"},shortenUrlSwitch:{"11.3.0":"data-testid share internally shorten url switch"},copyUrlButton:{"11.3.0":"data-testid share internally copy url button"},SharePanel:{preview:{"11.5.0":"data-testid share panel internally image generation preview"},widthInput:{"11.5.0":"data-testid share panel internally width input"},heightInput:{"11.5.0":"data-testid share panel internally height input"},scaleFactorInput:{"11.5.0":"data-testid share panel internally scale factor input"},generateImageButton:{"11.5.0":"data-testid share panel internally generate image button"},downloadImageButton:{"11.5.0":"data-testid share panel internally download image button"}}},ShareExternally:{container:{"11.3.0":"data-testid share externally drawer container"},publicAlert:{"11.3.0":"data-testid public share alert"},emailSharingAlert:{"11.3.0":"data-testid email share alert"},shareTypeSelect:{"11.3.0":"data-testid share externally share type select"},Creation:{PublicShare:{createButton:{"11.3.0":"data-testid public share dashboard create button"},cancelButton:{"11.3.0":"data-testid public share dashboard cancel button"}},EmailShare:{createButton:{"11.3.0":"data-testid email share dashboard create button"},cancelButton:{"11.3.0":"data-testid email share dashboard cancel button"}},willBePublicCheckbox:{"11.3.0":"data-testid share dashboard will be public checkbox"}},Configuration:{enableTimeRangeSwitch:{"11.3.0":"data-testid share externally enable time range switch"},enableAnnotationsSwitch:{"11.3.0":"data-testid share externally enable annotations switch"},copyUrlButton:{"11.3.0":"data-testid share externally copy url button"},revokeAccessButton:{"11.3.0":"data-testid share externally revoke access button"},toggleAccessButton:{"11.3.0":"data-testid share externally pause or resume access button"}}},ShareSnapshot:{url:{"11.3.0":e=>`/dashboard/snapshot/${e}`},container:{"11.3.0":"data-testid share snapshot drawer container"},publishSnapshot:{"11.3.0":"data-testid share snapshot publish button"},copyUrlButton:{"11.3.0":"data-testid share snapshot copy url button"}}},ExportDashboardDrawer:{ExportAsJson:{container:{"11.3.0":"data-testid export as json drawer container"},codeEditor:{"11.3.0":"data-testid export as json code editor"},exportExternallyToggle:{"11.3.0":"data-testid export as json externally switch"},saveToFileButton:{"11.3.0":"data-testid export as json save to file button"},copyToClipboardButton:{"11.3.0":"data-testid export as json copy to clipboard button"},cancelButton:{"11.3.0":"data-testid export as json cancel button"}}},PublicDashboard:{page:{"9.5.0":"public-dashboard-page"},NotAvailable:{container:{"9.5.0":"public-dashboard-not-available"},title:{"9.5.0":"public-dashboard-title"},pausedDescription:{"9.5.0":"public-dashboard-paused-description"}},footer:{"11.0.0":"public-dashboard-footer"}},PublicDashboardScene:{loadingPage:{"11.0.0":"public-dashboard-scene-loading-page"},page:{"11.0.0":"public-dashboard-scene-page"},controls:{"11.0.0":"public-dashboard-controls"}},RequestViewAccess:{form:{"9.5.0":"request-view-access-form"},recipientInput:{"9.5.0":"request-view-access-recipient-input"},submitButton:{"9.5.0":"request-view-access-submit-button"}},PublicDashboardConfirmAccess:{submitButton:{"10.2.0":"data-testid confirm-access-submit-button"}},Explore:{url:{[et]:"/explore"},General:{container:{[et]:"data-testid Explore"},graph:{[et]:"Explore Graph"},table:{[et]:"Explore Table"},scrollView:{"9.0.0":"data-testid explorer scroll view"}},QueryHistory:{container:{"11.1.0":"data-testid QueryHistory"}}},SoloPanel:{url:{[et]:e=>`/d-solo/${e}`}},PluginsList:{page:{[et]:"Plugins list page"},list:{[et]:"Plugins list"},listItem:{[et]:"Plugins list item"},signatureErrorNotice:{"10.3.0":"data-testid Unsigned plugins notice",[et]:"Unsigned plugins notice"}},PluginPage:{page:{[et]:"Plugin page"},signatureInfo:{"10.3.0":"data-testid Plugin signature info",[et]:"Plugin signature info"},disabledInfo:{"10.3.0":"data-testid Plugin disabled info",[et]:"Plugin disabled info"}},PlaylistForm:{name:{[et]:"Playlist name"},interval:{[et]:"Playlist interval"},itemDelete:{"10.2.0":"data-testid playlist-form-delete-item"}},BrowseDashboards:{table:{body:{"10.2.0":"data-testid browse-dashboards-table"},row:{"10.2.0":e=>`data-testid browse dashboards row ${e}`},checkbox:{"10.0.0":e=>`data-testid ${e} checkbox`}},NewFolderForm:{form:{"10.2.0":"data-testid new folder form"},nameInput:{"10.2.0":"data-testid new-folder-name-input"},createButton:{"10.2.0":"data-testid new-folder-create-button"}}},Search:{url:{"9.3.0":"/?search=openn"},FolderView:{url:{"9.3.0":"/?search=open&layout=folders"}}},PublicDashboards:{ListItem:{linkButton:{"9.3.0":"public-dashboard-link-button"},configButton:{"9.3.0":"public-dashboard-configuration-button"},trashcanButton:{"9.3.0":"public-dashboard-remove-button"},pauseSwitch:{"10.1.0":"data-testid public dashboard pause switch"}}},UserListPage:{tabs:{allUsers:{"10.0.0":"data-testid all-users-tab"},orgUsers:{"10.0.0":"data-testid org-users-tab"},anonUserDevices:{"10.2.3":"data-testid anon-user-devices-tab"},publicDashboardsUsers:{"10.0.0":"data-testid public-dashboards-users-tab"},users:{"10.0.0":"data-testid users-tab"}},org:{url:{"10.2.0":"/admin/users","9.5.0":"/org/users"}},admin:{url:{"9.5.0":"/admin/users"}},publicDashboards:{container:{"11.1.0":"data-testid public-dashboards-users-list"}},UserListAdminPage:{container:{"10.0.0":"data-testid user-list-admin-page"}},UsersListPage:{container:{"10.0.0":"data-testid users-list-page"}},UserAnonListPage:{container:{"10.4.0":"data-testid user-anon-list-page"}},UsersListPublicDashboardsPage:{container:{"10.0.0":"data-testid users-list-public-dashboards-page"},DashboardsListModal:{listItem:{"10.0.0":e=>`data-testid dashboards-list-item-${e}`}}}},ProfilePage:{url:{"10.2.0":"/profile"}},Plugin:{url:{[et]:e=>`/plugins/${e}`}}}),components:Ye(tt)};var rt=n(6089),at=n(7993);const ot=/[^ -~]/m,it=/^[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+$/m,st=5,lt=25,ct=5,ut=1e4,dt=new at.A({intraMode:1});function pt(e,t,n){let r=[];if(""===n)r=e;else if(ot.test(n)||it.test(n)||n.length>lt||dt.split(n).length>ct)for(let a=0;ae[o.idx[t]])):a.map((t=>e[t])))}return r}function ft(e,t=!1){let n=e;t&&(n=[{value:me,label:ge},...n]);const r=n.map((e=>e.label));return e=>pt(n,r,e)}const ht=()=>!0,gt=e=>"$__all"!==e.value,mt=(e,t)=>e.length===t.filter(gt).length?qe.ToggleAllState.allSelected:0===e.length||1===e.length&&e[0]&&"$__all"===e[0].value?qe.ToggleAllState.noneSelected:qe.ToggleAllState.indeterminate;function vt({model:e,state:t}){const{value:n,text:r,key:a,options:o,includeAll:i,isReadOnly:s,allowCustomValue:l=!0}=t,[c,d]=(0,u.useState)(""),[f,h]=(0,u.useState)(!1),g=function(e,t){return{value:e,label:null!=t?t:String(e)}}(n,String(r)),m=Xi.getQueryController(e),v=(0,u.useMemo)((()=>ft(o,i)),[o,i])(c);return p().createElement(qe.Select,{id:a,isValidNewOption:e=>e.trim().length>0,placeholder:"Select value",width:"auto",disabled:s,value:g,inputValue:c,allowCustomValue:l,virtualized:!0,filterOption:ht,tabSelectsValue:!1,onInputChange:(t,{action:n})=>"input-change"===n?(d(t),e.onSearchChange&&e.onSearchChange(t),t):t,onOpenMenu:()=>{f&&d(String(r))},onCloseMenu:()=>{d("")},options:v,"data-testid":nt.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${n}`),onChange:t=>{e.changeValueTo(t.value,t.label,!0),null==m||m.startProfile("VariableValueSelect"),f!==t.__isNew__&&h(t.__isNew__)}})}function bt({model:e,state:t}){const{value:n,options:r,key:a,maxVisibleValues:o,noValueOnClear:i,includeAll:s,isReadOnly:l,allowCustomValue:c=!0}=t,d=(0,u.useMemo)((()=>(0,k.isArray)(n)?n:[n]),[n]),[f,h]=(0,u.useState)(d),[g,m]=(0,u.useState)(""),v=Xi.getQueryController(e),b=(0,u.useMemo)((()=>ft(r,s)),[r,s]);(0,u.useEffect)((()=>{h(d)}),[d]);const y=r.length>0?"Select value":"",w=b(g);return p().createElement(qe.MultiSelect,{id:a,placeholder:y,width:"auto",inputValue:g,disabled:l,value:f,noMultiValueWrap:!0,maxVisibleValues:null!=o?o:5,tabSelectsValue:!1,virtualized:!0,allowCustomValue:c,toggleAllOptions:{enabled:!0,optionsFilter:gt,determineToggleAllState:mt},options:w,closeMenuOnSelect:!1,components:{Option:yt},isClearable:!0,hideSelectedOptions:!1,onInputChange:(t,{action:n})=>"input-change"===n?(m(t),e.onSearchChange&&e.onSearchChange(t),t):"input-blur"===n?(m(""),""):g,onBlur:()=>{e.changeValueTo(f,void 0,!0),null==v||v.startProfile("VariableValueSelectMulti")},filterOption:ht,"data-testid":nt.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${f}`),onChange:(t,n)=>{"clear"===n.action&&i&&e.changeValueTo([],void 0,!0),h(t.map((e=>e.value)))}})}const yt=({children:e,data:t,innerProps:n,innerRef:r,isFocused:a,isSelected:o,indeterminate:i,renderOptionLabel:s})=>{var l;const{onMouseMove:c,onMouseOver:u,...d}=n,f=(0,qe.useTheme2)(),h=(0,qe.getSelectStyles)(f),g=(0,qe.useStyles2)(wt);return p().createElement("div",{ref:r,className:(0,rt.cx)(h.option,a&&h.optionFocused),...d,"data-testid":"data-testid Select option",title:t.title},p().createElement("div",{className:g.checkbox},p().createElement(qe.Checkbox,{indeterminate:i,value:o})),p().createElement("div",{className:h.optionBody,"data-testid":nt.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts(null!=(l=t.label)?l:String(t.value))},p().createElement("span",null,e)))};yt.displayName="SelectMenuOptions";const wt=e=>({checkbox:(0,rt.css)({marginRight:e.spacing(2)})});function St({model:e}){const t=e.useState();return t.isMulti?p().createElement(bt,{model:e,state:t}):p().createElement(vt,{model:e,state:t})}class xt{constructor(e){this._sceneObject=e,this._nextChangeShouldAddHistoryStep=!1}getKey(){return`var-${this._sceneObject.state.name}`}getKeys(){return this._sceneObject.state.skipUrlSync?[]:[this.getKey()]}getUrlState(){return this._sceneObject.state.skipUrlSync?{}:{[this.getKey()]:Et(this._sceneObject.state.value,this._sceneObject.state.text)}}updateFromUrl(e){let t=e[this.getKey()];if(null!=t){this._sceneObject.isActive||(this._sceneObject.skipNextValidation=!0);const{values:e,texts:r}=(n=t,(n=Array.isArray(n)?n:[n]).reduce(((e,t)=>{const[n,r]=(null!=t?t:"").split(",");return e.values.push(wi(n)),e.texts.push(wi(null!=r?r:n)),e}),{values:[],texts:[]}));this._sceneObject.changeValueTo(e,r)}var n}performBrowserHistoryAction(e){this._nextChangeShouldAddHistoryStep=!0,e(),this._nextChangeShouldAddHistoryStep=!1}shouldCreateHistoryStep(e){return this._nextChangeShouldAddHistoryStep}}function Et(e,t){return e=Array.isArray(e)?e:[e],t=Array.isArray(t)?t:[t],e.map(((e,n)=>{if(null==e)return"";e=String(e);let r=t[n];return r=null==r?e:String(r),Si(e,r)}))}function Ct(e){const t=e.getRoot();return"enrichFiltersRequest"in t?t.enrichFiltersRequest(e):null}var Rt,Dt=e=>{throw TypeError(e)},_t=(e,t,n)=>t.has(e)||Dt("Cannot "+n);class Ot{constructor(e){((e,t,n)=>{t.has(e)?Dt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n)})(this,Rt),this.text="__sceneObject",this.valueOf=()=>{return _t(e=this,t=Rt,"read from private field"),n?n.call(e):t.get(e);var e,t,n},((e,t,n)=>{_t(e,t,"write to private field"),t.set(e,n)})(this,Rt,e)}toString(){}get value(){return this}}function It(e){return function(e){const t=e.match(/^(\d+)\.(\d+)\.(\d+)/);if(!t)return!1;const n=parseInt(t[1],10),r=parseInt(t[2],10),a=parseInt(t[3],10);return 11===n?0===r&&a>=4||1===r&&a>=2||r>1:10===n?4===r&&a>=8||r>=5:n>11}(i.config.buildInfo.version)?new Ot(e):{value:e,text:"__sceneObject"}}Rt=new WeakMap;class Tt extends Re{constructor(e){super({isMulti:!0,name:"",value:[],text:[],options:[],datasource:null,baseFilters:[],applyMode:"auto",layout:"horizontal",type:"groupby",...e,noValueOnClear:!0}),this.isLazy=!0,this._urlSync=new xt(this),this._getKeys=async e=>{var t,n,r,a;const o=await(null==(n=(t=this.state).getTagKeysProvider)?void 0:n.call(t,this,null));if(o&&o.replace)return o.values;if(this.state.defaultOptions)return this.state.defaultOptions.concat(xi(null!=(r=null==o?void 0:o.values)?r:[]));if(!e.getTagKeys)return[];const i=mi(this),s=this.state.baseFilters||[],l=Xi.getTimeRange(this).state.value,c=await e.getTagKeys({filters:s,queries:i,timeRange:l,scopes:null==(a=this._scopesBridge)?void 0:a.getValue(),...Ct(this)});Ei(c)&&this.setState({error:c.error.message});let u=xi(c);o&&(u=u.concat(xi(o.values)));const d=this.state.tagKeyRegexFilter;return d&&(u=u.filter((e=>e.text.match(d)))),u},"auto"===this.state.applyMode&&this.addActivationHandler((()=>(Ge.add(this),()=>Ge.delete(this))))}validateAndUpdate(){return this.getValueOptions({}).pipe((0,f.map)((e=>(this._updateValueGivenNewOptions(e),{}))))}_updateValueGivenNewOptions(e){const{value:t,text:n}=this.state,r={options:e,loading:!1,value:null!=t?t:[],text:null!=n?n:[]};this.setState(r)}getValueOptions(e){return this.state.defaultOptions?(0,f.of)(this.state.defaultOptions.map((e=>({label:e.text,value:String(e.value),group:e.group})))):(this.setState({loading:!0,error:null}),(0,f.from)(Ve(this.state.datasource,{__sceneObject:It(this)})).pipe((0,f.mergeMap)((e=>(0,f.from)(this._getKeys(e)).pipe((0,f.tap)((e=>{Ei(e)&&this.setState({error:e.error.message})})),(0,f.map)((e=>xi(e))),(0,f.take)(1),(0,f.mergeMap)((e=>{const t=e.map((e=>({label:e.text,value:e.value?String(e.value):e.text,group:e.group})));return(0,f.of)(t)})))))))}getDefaultMultiState(e){return{value:[],text:[]}}}Tt.Component=function({model:e}){const{value:t,text:n,key:r,isMulti:a=!0,maxVisibleValues:o,noValueOnClear:i,options:s,includeAll:l,allowCustomValue:c=!0}=e.useState(),d=(0,u.useMemo)((()=>{const e=(0,k.isArray)(t)?t:[t],r=(0,k.isArray)(n)?n:[n];return e.map(((e,t)=>{var n;return{value:e,label:String(null!=(n=r[t])?n:e)}}))}),[t,n]),[h,g]=(0,u.useState)(!1),[m,v]=(0,u.useState)(!1),[b,y]=(0,u.useState)(""),[w,S]=(0,u.useState)(d),x=(0,u.useMemo)((()=>ft(s,l)),[s,l]);(0,u.useEffect)((()=>{S(d)}),[d]);const E=(t,{action:n})=>"input-change"===n?(y(t),e.onSearchChange&&e.onSearchChange(t),t):"input-blur"===n?(y(""),""):b,C=(0,u.useMemo)((()=>Ci(x(b).map(kt))),[x,b]);return a?p().createElement(qe.MultiSelect,{"aria-label":"Group by selector","data-testid":`GroupBySelect-${r}`,id:r,placeholder:"Select value",width:"auto",allowCustomValue:c,inputValue:b,value:w,noMultiValueWrap:!0,maxVisibleValues:null!=o?o:5,tabSelectsValue:!1,virtualized:!0,options:C,filterOption:At,closeMenuOnSelect:!1,isOpen:m,isClearable:!0,hideSelectedOptions:!1,isLoading:h,components:{Option:yt},onInputChange:E,onBlur:()=>{e.changeValueTo(w.map((e=>e.value)),w.map((e=>e.label)),!0)},onChange:(t,n)=>{"clear"===n.action&&i&&e.changeValueTo([],void 0,!0),S(t)},onOpenMenu:async()=>{g(!0),await(0,f.lastValueFrom)(e.validateAndUpdate()),g(!1),v(!0)},onCloseMenu:()=>{v(!1)}}):p().createElement(qe.Select,{"aria-label":"Group by selector","data-testid":`GroupBySelect-${r}`,id:r,placeholder:"Select value",width:"auto",inputValue:b,value:w,allowCustomValue:c,noMultiValueWrap:!0,maxVisibleValues:null!=o?o:5,tabSelectsValue:!1,virtualized:!0,options:C,filterOption:At,closeMenuOnSelect:!0,isOpen:m,isClearable:!0,hideSelectedOptions:!1,noValueOnClear:!0,isLoading:h,onInputChange:E,onChange:(t,n)=>{if("clear"===n.action)return S([]),void(i&&e.changeValueTo([]));(null==t?void 0:t.value)&&(S([t]),e.changeValueTo([t.value],t.label?[t.label]:void 0))},onOpenMenu:async()=>{g(!0),await(0,f.lastValueFrom)(e.validateAndUpdate()),g(!1),v(!0)},onCloseMenu:()=>{v(!1)}})};const At=()=>!0;function kt(e){const{label:t,value:n,group:r}=e,a={label:t,value:n};return r&&(a.group=r),a}function Pt(e){return p().createElement(qe.Tooltip,{content:"Cancel query"},p().createElement(qe.Icon,{className:"spin-clockwise",name:"sync",size:"xs",role:"button",onMouseDown:t=>{e.onCancel(t)}}))}function Lt(e){const t=(0,qe.useStyles2)(Nt),n=(0,qe.useTheme2)(),r="vertical"===e.layout,a=Boolean(e.isLoading)?p().createElement("div",{style:{marginLeft:n.spacing(1),marginTop:"-1px"},"aria-label":nt.components.LoadingIndicator.icon},p().createElement(Pt,{onCancel:t=>{var n;t.preventDefault(),t.stopPropagation(),null==(n=e.onCancel)||n.call(e)}})):null;let o=null;e.error&&(o=p().createElement(qe.Tooltip,{content:e.error,placement:"bottom"},p().createElement(qe.Icon,{className:t.errorIcon,name:"exclamation-triangle"})));let i=null;e.description&&(i=p().createElement(qe.Tooltip,{content:e.description,placement:r?"top":"bottom"},p().createElement(qe.Icon,{className:t.normalIcon,name:"info-circle"})));const s="string"==typeof e.label?nt.pages.Dashboard.SubMenu.submenuItemLabels(e.label):"";let l;return l=r?p().createElement("label",{className:(0,rt.cx)(t.verticalLabel,e.className),"data-testid":s,htmlFor:e.htmlFor},e.prefix,e.label,i,o,e.icon&&p().createElement(qe.Icon,{name:e.icon,className:t.normalIcon}),a,e.onRemove&&p().createElement(qe.IconButton,{variant:"secondary",size:"xs",name:"times",onClick:e.onRemove,tooltip:"Remove"}),e.suffix):p().createElement("label",{className:(0,rt.cx)(t.horizontalLabel,e.className),"data-testid":s,htmlFor:e.htmlFor},e.prefix,o,e.icon&&p().createElement(qe.Icon,{name:e.icon,className:t.normalIcon}),e.label,i,a,e.suffix),l}const Nt=e=>({horizontalLabel:(0,rt.css)({background:e.isDark?e.colors.background.primary:e.colors.background.secondary,display:"flex",alignItems:"center",padding:e.spacing(0,1),fontWeight:e.typography.fontWeightMedium,fontSize:e.typography.bodySmall.fontSize,height:e.spacing(e.components.height.md),lineHeight:e.spacing(e.components.height.md),borderRadius:`${e.shape.radius.default} 0 0 ${e.shape.radius.default}`,border:`1px solid ${e.components.input.borderColor}`,position:"relative",right:-1,whiteSpace:"nowrap",gap:e.spacing(.5)}),verticalLabel:(0,rt.css)({display:"flex",alignItems:"center",fontWeight:e.typography.fontWeightMedium,fontSize:e.typography.bodySmall.fontSize,lineHeight:e.typography.bodySmall.lineHeight,whiteSpace:"nowrap",marginBottom:e.spacing(.5),gap:e.spacing(1)}),errorIcon:(0,rt.css)({color:e.colors.error.text}),normalIcon:(0,rt.css)({color:e.colors.text.secondary})});function Mt(e){const t=e.map((e=>{var t;return null!=(t=e.label)?t:String(e.value)}));return n=>pt(e,t,n)}function Bt(e,t){return""!==e?{value:e,label:t||e}:null}const Vt=()=>!0;function jt({filter:e,model:t}){var n,r,a,o,i;const s=(0,qe.useStyles2)(Ft),[l,c]=(0,u.useState)([]),[d,f]=(0,u.useState)([]),[h,g]=(0,u.useState)(!1),[m,v]=(0,u.useState)(!1),[b,y]=(0,u.useState)(!1),[w,S]=(0,u.useState)(!1),[x,E]=(0,u.useState)(!1),[C,R]=(0,u.useState)(""),[D,_]=(0,u.useState)(!1),[O,I]=(0,u.useState)(e.values?e.values.map(((t,n)=>{var r;return Bt(t,null==(r=e.valueLabels)?void 0:r[n])})):[]),T=ri(e.operator),A=Bt(e.key,e.keyLabel),k=Bt(e.value,null==(n=e.valueLabels)?void 0:n[0]),P=(0,u.useMemo)((()=>Mt(d)),[d]),L=t.state.onAddCustomValue,N=(0,u.useMemo)((()=>Ci(P(C))),[P,C]),M={isMulti:!0,value:O,components:{Option:yt},hideSelectedOptions:!1,closeMenuOnSelect:!1,openMenuOnFocus:!1,onChange:e=>{I(e),e.some((e=>e.__isNew__))&&R("")},onBlur:()=>{var n,r;t._updateFilter(e,{value:null!=(r=null==(n=O[0])?void 0:n.value)?r:"",values:O.map((e=>e.value)),valueLabels:O.map((e=>e.label))})}},B=p().createElement(qe.Select,{virtualized:!0,allowCustomValue:null==(r=t.state.allowCustomValue)||r,isValidNewOption:e=>e.trim().length>0,allowCreateWhileLoading:!0,formatCreateLabel:e=>`Use custom value: ${e}`,disabled:t.state.readOnly,className:(0,rt.cx)(s.value,w?s.widthWhenOpen:void 0),width:"auto",value:k,filterOption:Vt,placeholder:"Select value",options:N,inputValue:C,onInputChange:(e,{action:t})=>("input-change"===t&&R(e),e),onChange:n=>{L&&n.__isNew__?t._updateFilter(e,L(n,e)):t._updateFilter(e,{value:n.value,valueLabels:n.label?[n.label]:[n.value]}),D!==n.__isNew__&&_(n.__isNew__)},isOpen:w&&!m,isLoading:m,openMenuOnFocus:!0,onOpenMenu:async()=>{var n;v(!0),S(!0);const r=await t._getValuesFor(e);v(!1),f(r),D&&R(null!=(n=null==k?void 0:k.label)?n:"")},onCloseMenu:()=>{S(!1),R("")},...T&&M}),V=p().createElement(qe.Select,{key:""+(m?"loading":"loaded"),disabled:t.state.readOnly,className:(0,rt.cx)(s.key,b?s.widthWhenOpen:void 0),width:"auto",allowCustomValue:null==(a=t.state.allowCustomValue)||a,value:A,placeholder:"Select label",options:Ci(l),onChange:n=>{t._updateFilter(e,{key:n.value,keyLabel:n.label,value:"",valueLabels:[""],values:void 0}),I([])},autoFocus:""===e.key,isOpen:b&&!h,isLoading:h,onOpenMenu:async()=>{y(!0),g(!0);const n=await t._getKeys(e.key);g(!1),c(n)},onCloseMenu:()=>{y(!1)},onBlur:()=>{""===e.key&&t._removeFilter(e)},openMenuOnFocus:!0}),j=p().createElement(qe.Select,{className:(0,rt.cx)(s.operator,{[s.widthWhenOpen]:x}),value:e.operator,disabled:t.state.readOnly,options:t._getOperators(),onChange:n=>{var r,a;const o=e.operator,i=n.value,s={operator:i};ri(o)&&!ri(i)?(s.value="",s.valueLabels=[""],s.values=void 0,I([])):!ri(o)&&ri(i)&&e.value&&(s.values=[e.value],I([{value:e.value,label:null!=(a=null==(r=e.valueLabels)?void 0:r[0])?a:e.value}])),t._updateFilter(e,s)},onOpenMenu:()=>{E(!0)},onCloseMenu:()=>{E(!1)}});if("vertical"===t.state.layout){if(e.key){const n=p().createElement(Lt,{layout:"vertical",label:null!=(o=e.key)?o:"",onRemove:()=>t._removeFilter(e)});return p().createElement(qe.Field,{label:n,"data-testid":`AdHocFilter-${e.key}`,className:s.field},p().createElement("div",{className:s.wrapper},j,B))}return p().createElement(qe.Field,{label:"Select label","data-testid":`AdHocFilter-${e.key}`,className:s.field},V)}return p().createElement("div",{className:s.wrapper,"data-testid":`AdHocFilter-${e.key}`},V,j,B,p().createElement(qe.Button,{variant:"secondary","aria-label":"Remove filter",title:"Remove filter",className:s.removeButton,icon:"times","data-testid":`AdHocFilter-remove-${null!=(i=e.key)?i:""}`,onClick:()=>t._removeFilter(e)}))}const Ft=e=>({field:(0,rt.css)({marginBottom:0}),wrapper:(0,rt.css)({display:"flex","> *":{"&:not(:first-child)":{marginLeft:-1},"&:first-child":{borderTopRightRadius:0,borderBottomRightRadius:0},"&:last-child":{borderTopLeftRadius:0,borderBottomLeftRadius:0},"&:not(:first-child):not(:last-child)":{borderRadius:0},position:"relative",zIndex:0,"&:hover":{zIndex:1},"&:focus-within":{zIndex:2}}}),widthWhenOpen:(0,rt.css)({minWidth:e.spacing(16)}),value:(0,rt.css)({flexBasis:"content",flexShrink:1,minWidth:"90px"}),key:(0,rt.css)({flexBasis:"content",minWidth:"90px",flexShrink:1}),operator:(0,rt.css)({flexShrink:0,flexBasis:"content"}),removeButton:(0,rt.css)({paddingLeft:e.spacing(1.5),paddingRight:e.spacing(1.5),borderLeft:"none",width:e.spacing(3),marginRight:e.spacing(1),boxSizing:"border-box",position:"relative",left:"1px"})});function $t({model:e,addFilterButtonText:t}){const{_wip:n}=e.useState();return n?p().createElement(jt,{filter:n,model:e}):p().createElement(qe.Button,{variant:"secondary",icon:"plus",title:"Add filter","aria-label":"Add filter","data-testid":"AdHocFilter-add",onClick:()=>e._addWip()},t)}class zt{constructor(e){this._variable=e}getKey(){return`var-${this._variable.state.name}`}getKeys(){return[this.getKey()]}getUrlState(){const e=this._variable.state.filters,t=this._variable.state.baseFilters;let n=[];return 0===e.length&&0===(null==t?void 0:t.length)?{[this.getKey()]:[""]}:(e.length&&n.push(...e.filter(ni).filter((e=>!e.hidden)).map((e=>Ut(e).map(vi).join("|")))),(null==t?void 0:t.length)&&n.push(...null==t?void 0:t.filter(ni).filter((e=>!e.hidden&&e.origin&&e.originalValue)).map((e=>{var t,n;return Ut(e).map(yi).join("|").concat(`#${null!=(n=null==(t=e.originalValue)?void 0:t.map(yi).join("|"))?n:""}#${e.origin}`)}))),{[this.getKey()]:n.length?n:[""]})}updateFromUrl(e){const t=e[this.getKey()];if(null!=t&&t){const e=function(e){if(Array.isArray(e)){return e.map(Wt).filter(Ht)}const t=Wt(e);return null===t?[]:[t]}(t);this._variable.setState({filters:e.filter((e=>!e.origin)),baseFilters:e.filter((e=>e.origin))})}}}function Ut(e){var t;const n=[Si(e.key,e.keyLabel),e.operator];return ri(e.operator)?e.values.forEach(((t,r)=>{var a;n.push(Si(t,null==(a=e.valueLabels)?void 0:a[r]))})):n.push(Si(e.value,null==(t=e.valueLabels)?void 0:t[0])),n}function Wt(e){var t;if("string"!=typeof e||0===e.length)return null;const[n,r,a]=e.split("#"),[o,i,s,l,...c]=n.split("|").reduce(((e,t)=>{const[n,r]=t.split(",");return e.push(n,null!=r?r:n),e}),[]).map(wi);return{key:o,keyLabel:i,operator:s,value:c[0],values:ri(s)?c.filter(((e,t)=>t%2==0)):void 0,valueLabels:c.filter(((e,t)=>t%2==1)),condition:"",origin:(u=a,u===Xo.Scopes||u===Xo.Dashboards?a:void 0),originalValue:r&&r.length?null!=(t=r.split("|"))?t:[r]:void 0};var u}function Ht(e){return null!==e&&"string"==typeof e.key&&"string"==typeof e.value}function Gt(){return"undefined"!=typeof window}function qt(e){return Xt(e)?(e.nodeName||"").toLowerCase():"#document"}function Qt(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Yt(e){var t;return null==(t=(Xt(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function Xt(e){return!!Gt()&&(e instanceof Node||e instanceof Qt(e).Node)}function Kt(e){return!!Gt()&&(e instanceof Element||e instanceof Qt(e).Element)}function Zt(e){return!!Gt()&&(e instanceof HTMLElement||e instanceof Qt(e).HTMLElement)}function Jt(e){return!(!Gt()||"undefined"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof Qt(e).ShadowRoot)}function en(e){const{overflow:t,overflowX:n,overflowY:r,display:a}=sn(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(a)}function tn(e){return["table","td","th"].includes(qt(e))}function nn(e){return[":popover-open",":modal"].some((t=>{try{return e.matches(t)}catch(e){return!1}}))}function rn(e){const t=an(),n=Kt(e)?sn(e):e;return["transform","translate","scale","rotate","perspective"].some((e=>!!n[e]&&"none"!==n[e]))||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","translate","scale","rotate","perspective","filter"].some((e=>(n.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(n.contain||"").includes(e)))}function an(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function on(e){return["html","body","#document"].includes(qt(e))}function sn(e){return Qt(e).getComputedStyle(e)}function ln(e){return Kt(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function cn(e){if("html"===qt(e))return e;const t=e.assignedSlot||e.parentNode||Jt(e)&&e.host||Yt(e);return Jt(t)?t.host:t}function un(e){const t=cn(e);return on(t)?e.ownerDocument?e.ownerDocument.body:e.body:Zt(t)&&en(t)?t:un(t)}function dn(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);const a=un(e),o=a===(null==(r=e.ownerDocument)?void 0:r.body),i=Qt(a);if(o){const e=pn(i);return t.concat(i,i.visualViewport||[],en(a)?a:[],e&&n?dn(e):[])}return t.concat(a,dn(a,[],n))}function pn(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function fn(e){let t=e.activeElement;for(;null!=(null==(n=t)||null==(n=n.shadowRoot)?void 0:n.activeElement);){var n;t=t.shadowRoot.activeElement}return t}function hn(e,t){if(!e||!t)return!1;const n=null==t.getRootNode?void 0:t.getRootNode();if(e.contains(t))return!0;if(n&&Jt(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function gn(){const e=navigator.userAgentData;return null!=e&&e.platform?e.platform:navigator.platform}function mn(){const e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map((e=>{let{brand:t,version:n}=e;return t+"/"+n})).join(" "):navigator.userAgent}function vn(e){return!(0!==e.mozInputSource||!e.isTrusted)||(wn()&&e.pointerType?"click"===e.type&&1===e.buttons:0===e.detail&&!e.pointerType)}function bn(e){return!mn().includes("jsdom/")&&(!wn()&&0===e.width&&0===e.height||wn()&&1===e.width&&1===e.height&&0===e.pressure&&0===e.detail&&"mouse"===e.pointerType||e.width<1&&e.height<1&&0===e.pressure&&0===e.detail&&"touch"===e.pointerType)}function yn(){return/apple/i.test(navigator.vendor)}function wn(){const e=/android/i;return e.test(gn())||e.test(mn())}function Sn(e){return(null==e?void 0:e.ownerDocument)||document}function xn(e,t){if(null==t)return!1;if("composedPath"in e)return e.composedPath().includes(t);const n=e;return null!=n.target&&t.contains(n.target)}function En(e){return"composedPath"in e?e.composedPath()[0]:e.target}function Cn(e){e.preventDefault(),e.stopPropagation()}function Rn(e){return!!e&&("combobox"===e.getAttribute("role")&&function(e){return Zt(e)&&e.matches("input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])")}(e))}const Dn=Math.min,_n=Math.max,On=Math.round,In=Math.floor,Tn=e=>({x:e,y:e}),An={left:"right",right:"left",bottom:"top",top:"bottom"},kn={start:"end",end:"start"};function Pn(e,t){return"function"==typeof e?e(t):e}function Ln(e){return e.split("-")[0]}function Nn(e){return e.split("-")[1]}function Mn(e){return"y"===e?"height":"width"}function Bn(e){return["top","bottom"].includes(Ln(e))?"y":"x"}function Vn(e){return"x"===Bn(e)?"y":"x"}function jn(e){return e.replace(/start|end/g,(e=>kn[e]))}function Fn(e){return e.replace(/left|right|bottom|top/g,(e=>An[e]))}function $n(e){const{x:t,y:n,width:r,height:a}=e;return{width:r,height:a,top:n,left:t,right:t+r,bottom:n+a,x:t,y:n}}var zn=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Un=zn.join(","),Wn="undefined"==typeof Element,Hn=Wn?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Gn=!Wn&&Element.prototype.getRootNode?function(e){var t;return null==e||null===(t=e.getRootNode)||void 0===t?void 0:t.call(e)}:function(e){return null==e?void 0:e.ownerDocument},qn=function e(t,n){var r;void 0===n&&(n=!0);var a=null==t||null===(r=t.getAttribute)||void 0===r?void 0:r.call(t,"inert");return""===a||"true"===a||n&&t&&e(t.parentNode)},Qn=function(e,t,n){if(qn(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(Un));return t&&Hn.call(e,Un)&&r.unshift(e),r=r.filter(n)},Yn=function e(t,n,r){for(var a=[],o=Array.from(t);o.length;){var i=o.shift();if(!qn(i,!1))if("SLOT"===i.tagName){var s=i.assignedElements(),l=e(s.length?s:i.children,!0,r);r.flatten?a.push.apply(a,l):a.push({scopeParent:i,candidates:l})}else{Hn.call(i,Un)&&r.filter(i)&&(n||!t.includes(i))&&a.push(i);var c=i.shadowRoot||"function"==typeof r.getShadowRoot&&r.getShadowRoot(i),u=!qn(c,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(c&&u){var d=e(!0===c?i.children:c.children,!0,r);r.flatten?a.push.apply(a,d):a.push({scopeParent:i,candidates:d})}else o.unshift.apply(o,i.children)}}return a},Xn=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},Kn=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||function(e){var t,n=null==e||null===(t=e.getAttribute)||void 0===t?void 0:t.call(e,"contenteditable");return""===n||"true"===n}(e))&&!Xn(e)?0:e.tabIndex},Zn=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},Jn=function(e){return"INPUT"===e.tagName},er=function(e){return function(e){return Jn(e)&&"radio"===e.type}(e)&&!function(e){if(!e.name)return!0;var t,n=e.form||Gn(e),r=function(e){return n.querySelectorAll('input[type="radio"][name="'+e+'"]')};if("undefined"!=typeof window&&void 0!==window.CSS&&"function"==typeof window.CSS.escape)t=r(window.CSS.escape(e.name));else try{t=r(e.name)}catch(e){return console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s",e.message),!1}var a=function(e,t){for(var n=0;nsummary:first-of-type")?e.parentElement:e;if(Hn.call(a,"details:not([open]) *"))return!0;if(n&&"full"!==n&&"legacy-full"!==n){if("non-zero-area"===n)return tr(e)}else{if("function"==typeof r){for(var o=e;e;){var i=e.parentElement,s=Gn(e);if(i&&!i.shadowRoot&&!0===r(i))return tr(e);e=e.assignedSlot?e.assignedSlot:i||s===e.ownerDocument?i:s.host}e=o}if(function(e){var t,n,r,a,o=e&&Gn(e),i=null===(t=o)||void 0===t?void 0:t.host,s=!1;if(o&&o!==e)for(s=!!(null!==(n=i)&&void 0!==n&&null!==(r=n.ownerDocument)&&void 0!==r&&r.contains(i)||null!=e&&null!==(a=e.ownerDocument)&&void 0!==a&&a.contains(e));!s&&i;){var l,c,u;s=!(null===(c=i=null===(l=o=Gn(i))||void 0===l?void 0:l.host)||void 0===c||null===(u=c.ownerDocument)||void 0===u||!u.contains(i))}return s}(e))return!e.getClientRects().length;if("legacy-full"!==n)return!0}return!1},rr=function(e,t){return!(t.disabled||qn(t)||function(e){return Jn(e)&&"hidden"===e.type}(t)||nr(t,e)||function(e){return"DETAILS"===e.tagName&&Array.prototype.slice.apply(e.children).some((function(e){return"SUMMARY"===e.tagName}))}(t)||function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if("FIELDSET"===t.tagName&&t.disabled){for(var n=0;n=0)},ir=function e(t){var n=[],r=[];return t.forEach((function(t,a){var o=!!t.scopeParent,i=o?t.scopeParent:t,s=function(e,t){var n=Kn(e);return n<0&&t&&!Xn(e)?0:n}(i,o),l=o?e(t.candidates):i;0===s?o?n.push.apply(n,l):n.push(i):r.push({documentOrder:a,tabIndex:s,item:t,isScope:o,content:l})})),r.sort(Zn).reduce((function(e,t){return t.isScope?e.push.apply(e,t.content):e.push(t.content),e}),[]).concat(n)},sr=function(e,t){var n;return n=(t=t||{}).getShadowRoot?Yn([e],t.includeContainer,{filter:ar.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:or}):Qn(e,t.includeContainer,ar.bind(null,t)),ir(n)},lr=n(8398);function cr(e,t,n){let{reference:r,floating:a}=e;const o=Bn(t),i=Vn(t),s=Mn(i),l=Ln(t),c="y"===o,u=r.x+r.width/2-a.width/2,d=r.y+r.height/2-a.height/2,p=r[s]/2-a[s]/2;let f;switch(l){case"top":f={x:u,y:r.y-a.height};break;case"bottom":f={x:u,y:r.y+r.height};break;case"right":f={x:r.x+r.width,y:d};break;case"left":f={x:r.x-a.width,y:d};break;default:f={x:r.x,y:r.y}}switch(Nn(t)){case"start":f[i]-=p*(n&&c?-1:1);break;case"end":f[i]+=p*(n&&c?-1:1)}return f}async function ur(e,t){var n;void 0===t&&(t={});const{x:r,y:a,platform:o,rects:i,elements:s,strategy:l}=e,{boundary:c="clippingAncestors",rootBoundary:u="viewport",elementContext:d="floating",altBoundary:p=!1,padding:f=0}=Pn(t,e),h=function(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}(f),g=s[p?"floating"===d?"reference":"floating":d],m=$n(await o.getClippingRect({element:null==(n=await(null==o.isElement?void 0:o.isElement(g)))||n?g:g.contextElement||await(null==o.getDocumentElement?void 0:o.getDocumentElement(s.floating)),boundary:c,rootBoundary:u,strategy:l})),v="floating"===d?{x:r,y:a,width:i.floating.width,height:i.floating.height}:i.reference,b=await(null==o.getOffsetParent?void 0:o.getOffsetParent(s.floating)),y=await(null==o.isElement?void 0:o.isElement(b))&&await(null==o.getScale?void 0:o.getScale(b))||{x:1,y:1},w=$n(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:v,offsetParent:b,strategy:l}):v);return{top:(m.top-w.top+h.top)/y.y,bottom:(w.bottom-m.bottom+h.bottom)/y.y,left:(m.left-w.left+h.left)/y.x,right:(w.right-m.right+h.right)/y.x}}function dr(e){const t=sn(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const a=Zt(e),o=a?e.offsetWidth:n,i=a?e.offsetHeight:r,s=On(n)!==o||On(r)!==i;return s&&(n=o,r=i),{width:n,height:r,$:s}}function pr(e){return Kt(e)?e:e.contextElement}function fr(e){const t=pr(e);if(!Zt(t))return Tn(1);const n=t.getBoundingClientRect(),{width:r,height:a,$:o}=dr(t);let i=(o?On(n.width):n.width)/r,s=(o?On(n.height):n.height)/a;return i&&Number.isFinite(i)||(i=1),s&&Number.isFinite(s)||(s=1),{x:i,y:s}}const hr=Tn(0);function gr(e){const t=Qt(e);return an()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:hr}function mr(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const a=e.getBoundingClientRect(),o=pr(e);let i=Tn(1);t&&(r?Kt(r)&&(i=fr(r)):i=fr(e));const s=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==Qt(e))&&t}(o,n,r)?gr(o):Tn(0);let l=(a.left+s.x)/i.x,c=(a.top+s.y)/i.y,u=a.width/i.x,d=a.height/i.y;if(o){const e=Qt(o),t=r&&Kt(r)?Qt(r):r;let n=e,a=pn(n);for(;a&&r&&t!==n;){const e=fr(a),t=a.getBoundingClientRect(),r=sn(a),o=t.left+(a.clientLeft+parseFloat(r.paddingLeft))*e.x,i=t.top+(a.clientTop+parseFloat(r.paddingTop))*e.y;l*=e.x,c*=e.y,u*=e.x,d*=e.y,l+=o,c+=i,n=Qt(a),a=pn(n)}}return $n({width:u,height:d,x:l,y:c})}function vr(e,t){const n=ln(e).scrollLeft;return t?t.left+n:mr(Yt(e)).left+n}function br(e,t,n){void 0===n&&(n=!1);const r=e.getBoundingClientRect();return{x:r.left+t.scrollLeft-(n?0:vr(e,r)),y:r.top+t.scrollTop}}function yr(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=Qt(e),r=Yt(e),a=n.visualViewport;let o=r.clientWidth,i=r.clientHeight,s=0,l=0;if(a){o=a.width,i=a.height;const e=an();(!e||e&&"fixed"===t)&&(s=a.offsetLeft,l=a.offsetTop)}return{width:o,height:i,x:s,y:l}}(e,n);else if("document"===t)r=function(e){const t=Yt(e),n=ln(e),r=e.ownerDocument.body,a=_n(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=_n(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+vr(e);const s=-n.scrollTop;return"rtl"===sn(r).direction&&(i+=_n(t.clientWidth,r.clientWidth)-a),{width:a,height:o,x:i,y:s}}(Yt(e));else if(Kt(t))r=function(e,t){const n=mr(e,!0,"fixed"===t),r=n.top+e.clientTop,a=n.left+e.clientLeft,o=Zt(e)?fr(e):Tn(1);return{width:e.clientWidth*o.x,height:e.clientHeight*o.y,x:a*o.x,y:r*o.y}}(t,n);else{const n=gr(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return $n(r)}function wr(e,t){const n=cn(e);return!(n===t||!Kt(n)||on(n))&&("fixed"===sn(n).position||wr(n,t))}function Sr(e,t,n){const r=Zt(t),a=Yt(t),o="fixed"===n,i=mr(e,!0,o,t);let s={scrollLeft:0,scrollTop:0};const l=Tn(0);if(r||!r&&!o)if(("body"!==qt(t)||en(a))&&(s=ln(t)),r){const e=mr(t,!0,o,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else a&&(l.x=vr(a));const c=!a||r||o?Tn(0):br(a,s);return{x:i.left+s.scrollLeft-l.x-c.x,y:i.top+s.scrollTop-l.y-c.y,width:i.width,height:i.height}}function xr(e){return"static"===sn(e).position}function Er(e,t){if(!Zt(e)||"fixed"===sn(e).position)return null;if(t)return t(e);let n=e.offsetParent;return Yt(e)===n&&(n=n.ownerDocument.body),n}function Cr(e,t){const n=Qt(e);if(nn(e))return n;if(!Zt(e)){let t=cn(e);for(;t&&!on(t);){if(Kt(t)&&!xr(t))return t;t=cn(t)}return n}let r=Er(e,t);for(;r&&tn(r)&&xr(r);)r=Er(r,t);return r&&on(r)&&xr(r)&&!rn(r)?n:r||function(e){let t=cn(e);for(;Zt(t)&&!on(t);){if(rn(t))return t;if(nn(t))return null;t=cn(t)}return null}(e)||n}const Rr={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e;const o="fixed"===a,i=Yt(r),s=!!t&&nn(t.floating);if(r===i||s&&o)return n;let l={scrollLeft:0,scrollTop:0},c=Tn(1);const u=Tn(0),d=Zt(r);if((d||!d&&!o)&&(("body"!==qt(r)||en(i))&&(l=ln(r)),Zt(r))){const e=mr(r);c=fr(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}const p=!i||d||o?Tn(0):br(i,l,!0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-l.scrollLeft*c.x+u.x+p.x,y:n.y*c.y-l.scrollTop*c.y+u.y+p.y}},getDocumentElement:Yt,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e;const o=[..."clippingAncestors"===n?nn(t)?[]:function(e,t){const n=t.get(e);if(n)return n;let r=dn(e,[],!1).filter((e=>Kt(e)&&"body"!==qt(e))),a=null;const o="fixed"===sn(e).position;let i=o?cn(e):e;for(;Kt(i)&&!on(i);){const t=sn(i),n=rn(i);n||"fixed"!==t.position||(a=null),(o?!n&&!a:!n&&"static"===t.position&&a&&["absolute","fixed"].includes(a.position)||en(i)&&!n&&wr(e,i))?r=r.filter((e=>e!==i)):a=t,i=cn(i)}return t.set(e,r),r}(t,this._c):[].concat(n),r],i=o[0],s=o.reduce(((e,n)=>{const r=yr(t,n,a);return e.top=_n(r.top,e.top),e.right=Dn(r.right,e.right),e.bottom=Dn(r.bottom,e.bottom),e.left=_n(r.left,e.left),e}),yr(t,i,a));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:Cr,getElementRects:async function(e){const t=this.getOffsetParent||Cr,n=this.getDimensions,r=await n(e.floating);return{reference:Sr(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:n}=dr(e);return{width:t,height:n}},getScale:fr,isElement:Kt,isRTL:function(e){return"rtl"===sn(e).direction}};function Dr(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function _r(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:i="function"==typeof ResizeObserver,layoutShift:s="function"==typeof IntersectionObserver,animationFrame:l=!1}=r,c=pr(e),u=a||o?[...c?dn(c):[],...dn(t)]:[];u.forEach((e=>{a&&e.addEventListener("scroll",n,{passive:!0}),o&&e.addEventListener("resize",n)}));const d=c&&s?function(e,t){let n,r=null;const a=Yt(e);function o(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return function i(s,l){void 0===s&&(s=!1),void 0===l&&(l=1),o();const c=e.getBoundingClientRect(),{left:u,top:d,width:p,height:f}=c;if(s||t(),!p||!f)return;const h={rootMargin:-In(d)+"px "+-In(a.clientWidth-(u+p))+"px "+-In(a.clientHeight-(d+f))+"px "+-In(u)+"px",threshold:_n(0,Dn(1,l))||1};let g=!0;function m(t){const r=t[0].intersectionRatio;if(r!==l){if(!g)return i();r?i(!1,r):n=setTimeout((()=>{i(!1,1e-7)}),1e3)}1!==r||Dr(c,e.getBoundingClientRect())||i(),g=!1}try{r=new IntersectionObserver(m,{...h,root:a.ownerDocument})}catch(e){r=new IntersectionObserver(m,h)}r.observe(e)}(!0),o}(c,n):null;let p,f=-1,h=null;i&&(h=new ResizeObserver((e=>{let[r]=e;r&&r.target===c&&h&&(h.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame((()=>{var e;null==(e=h)||e.observe(t)}))),n()})),c&&!l&&h.observe(c),h.observe(t));let g=l?mr(e):null;return l&&function t(){const r=mr(e);g&&!Dr(g,r)&&n();g=r,p=requestAnimationFrame(t)}(),n(),()=>{var e;u.forEach((e=>{a&&e.removeEventListener("scroll",n),o&&e.removeEventListener("resize",n)})),null==d||d(),null==(e=h)||e.disconnect(),h=null,l&&cancelAnimationFrame(p)}}const Or=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:a,y:o,placement:i,middlewareData:s}=t,l=await async function(e,t){const{placement:n,platform:r,elements:a}=e,o=await(null==r.isRTL?void 0:r.isRTL(a.floating)),i=Ln(n),s=Nn(n),l="y"===Bn(n),c=["left","top"].includes(i)?-1:1,u=o&&l?-1:1,d=Pn(t,e);let{mainAxis:p,crossAxis:f,alignmentAxis:h}="number"==typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&"number"==typeof h&&(f="end"===s?-1*h:h),l?{x:f*u,y:p*c}:{x:p*c,y:f*u}}(t,e);return i===(null==(n=s.offset)?void 0:n.placement)&&null!=(r=s.arrow)&&r.alignmentOffset?{}:{x:a+l.x,y:o+l.y,data:{...l,placement:i}}}}},Ir=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:a,middlewareData:o,rects:i,initialPlacement:s,platform:l,elements:c}=t,{mainAxis:u=!0,crossAxis:d=!0,fallbackPlacements:p,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:h="none",flipAlignment:g=!0,...m}=Pn(e,t);if(null!=(n=o.arrow)&&n.alignmentOffset)return{};const v=Ln(a),b=Bn(s),y=Ln(s)===s,w=await(null==l.isRTL?void 0:l.isRTL(c.floating)),S=p||(y||!g?[Fn(s)]:function(e){const t=Fn(e);return[jn(e),t,jn(t)]}(s)),x="none"!==h;!p&&x&&S.push(...function(e,t,n,r){const a=Nn(e);let o=function(e,t,n){const r=["left","right"],a=["right","left"],o=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?a:r:t?r:a;case"left":case"right":return t?o:i;default:return[]}}(Ln(e),"start"===n,r);return a&&(o=o.map((e=>e+"-"+a)),t&&(o=o.concat(o.map(jn)))),o}(s,g,h,w));const E=[s,...S],C=await ur(t,m),R=[];let D=(null==(r=o.flip)?void 0:r.overflows)||[];if(u&&R.push(C[v]),d){const e=function(e,t,n){void 0===n&&(n=!1);const r=Nn(e),a=Vn(e),o=Mn(a);let i="x"===a?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[o]>t.floating[o]&&(i=Fn(i)),[i,Fn(i)]}(a,i,w);R.push(C[e[0]],C[e[1]])}if(D=[...D,{placement:a,overflows:R}],!R.every((e=>e<=0))){var _,O;const e=((null==(_=o.flip)?void 0:_.index)||0)+1,t=E[e];if(t)return{data:{index:e,overflows:D},reset:{placement:t}};let n=null==(O=D.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:O.placement;if(!n)switch(f){case"bestFit":{var I;const e=null==(I=D.filter((e=>{if(x){const t=Bn(e.placement);return t===b||"y"===t}return!0})).map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:I[0];e&&(n=e);break}case"initialPlacement":n=s}if(a!==n)return{reset:{placement:n}}}return{}}}},Tr=function(e){return void 0===e&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:a,rects:o,platform:i,elements:s}=t,{apply:l=()=>{},...c}=Pn(e,t),u=await ur(t,c),d=Ln(a),p=Nn(a),f="y"===Bn(a),{width:h,height:g}=o.floating;let m,v;"top"===d||"bottom"===d?(m=d,v=p===(await(null==i.isRTL?void 0:i.isRTL(s.floating))?"start":"end")?"left":"right"):(v=d,m="end"===p?"top":"bottom");const b=g-u.top-u.bottom,y=h-u.left-u.right,w=Dn(g-u[m],b),S=Dn(h-u[v],y),x=!t.middlewareData.shift;let E=w,C=S;if(null!=(n=t.middlewareData.shift)&&n.enabled.x&&(C=y),null!=(r=t.middlewareData.shift)&&r.enabled.y&&(E=b),x&&!p){const e=_n(u.left,0),t=_n(u.right,0),n=_n(u.top,0),r=_n(u.bottom,0);f?C=h-2*(0!==e||0!==t?e+t:_n(u.left,u.right)):E=g-2*(0!==n||0!==r?n+r:_n(u.top,u.bottom))}await l({...t,availableWidth:C,availableHeight:E});const R=await i.getDimensions(s.floating);return h!==R.width||g!==R.height?{reset:{rects:!0}}:{}}}},Ar=(e,t,n)=>{const r=new Map,a={platform:Rr,...n},o={...a.platform,_c:r};return(async(e,t,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:o=[],platform:i}=n,s=o.filter(Boolean),l=await(null==i.isRTL?void 0:i.isRTL(t));let c=await i.getElementRects({reference:e,floating:t,strategy:a}),{x:u,y:d}=cr(c,r,l),p=r,f={},h=0;for(let n=0;n{t.current=e})),t}const Br=(e,t)=>({...Ir(e),options:[e,t]}),Vr=(e,t)=>({...Tr(e),options:[e,t]});const jr={...d},Fr=jr.useInsertionEffect||(e=>e());function $r(e){const t=u.useRef((()=>{0}));return Fr((()=>{t.current=e})),u.useCallback((function(){for(var e=arguments.length,n=new Array(e),r=0;r=e.current.length}function Qr(e,t){return Xr(e,{disabledIndices:t})}function Yr(e,t){return Xr(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function Xr(e,t){let{startingIndex:n=-1,decrement:r=!1,disabledIndices:a,amount:o=1}=void 0===t?{}:t;const i=e.current;let s=n;do{s+=r?-o:o}while(s>=0&&s<=i.length-1&&ta(i,s,a));return s}function Kr(e,t){let{event:n,orientation:r,loop:a,rtl:o,cols:i,disabledIndices:s,minIndex:l,maxIndex:c,prevIndex:u,stopEvent:d=!1}=t,p=u;if(n.key===zr){if(d&&Cn(n),-1===u)p=c;else if(p=Xr(e,{startingIndex:p,amount:i,decrement:!0,disabledIndices:s}),a&&(u-ie?n:n-i}qr(e,p)&&(p=u)}if(n.key===Ur&&(d&&Cn(n),-1===u?p=l:(p=Xr(e,{startingIndex:u,amount:i,disabledIndices:s}),a&&u+i>c&&(p=Xr(e,{startingIndex:u%i-i,amount:i,disabledIndices:s}))),qr(e,p)&&(p=u)),"both"===r){const t=In(u/i);n.key===(o?Wr:Hr)&&(d&&Cn(n),u%i!=i-1?(p=Xr(e,{startingIndex:u,disabledIndices:s}),a&&Gr(p,i,t)&&(p=Xr(e,{startingIndex:u-u%i-1,disabledIndices:s}))):a&&(p=Xr(e,{startingIndex:u-u%i-1,disabledIndices:s})),Gr(p,i,t)&&(p=u)),n.key===(o?Hr:Wr)&&(d&&Cn(n),u%i!=0?(p=Xr(e,{startingIndex:u,decrement:!0,disabledIndices:s}),a&&Gr(p,i,t)&&(p=Xr(e,{startingIndex:u+(i-u%i),decrement:!0,disabledIndices:s}))):a&&(p=Xr(e,{startingIndex:u+(i-u%i),decrement:!0,disabledIndices:s})),Gr(p,i,t)&&(p=u));const r=In(c/i)===t;qr(e,p)&&(p=a&&r?n.key===(o?Hr:Wr)?c:Xr(e,{startingIndex:u-u%i-1,disabledIndices:s}):u)}return p}function Zr(e,t,n){const r=[];let a=0;return e.forEach(((e,o)=>{let{width:i,height:s}=e,l=!1;for(n&&(a=0);!l;){const e=[];for(let n=0;nnull==r[e]))?(e.forEach((e=>{r[e]=o})),l=!0):a++}})),[...r]}function Jr(e,t,n,r,a){if(-1===e)return-1;const o=n.indexOf(e),i=t[e];switch(a){case"tl":return o;case"tr":return i?o+i.width-1:o;case"bl":return i?o+(i.height-1)*r:o;case"br":return n.lastIndexOf(e)}}function ea(e,t){return t.flatMap(((t,n)=>e.includes(t)?[n]:[]))}function ta(e,t,n){if(n)return n.includes(t);const r=e[t];return null==r||r.hasAttribute("disabled")||"true"===r.getAttribute("aria-disabled")}var na="undefined"!=typeof document?u.useLayoutEffect:u.useEffect;const ra=[Wr,Hr],aa=[zr,Ur];function oa(){return oa=Object.assign?Object.assign.bind():function(e){for(var t=1;t"floating-ui-"+Math.random().toString(36).slice(2,6)+sa++;const ca=jr.useId||function(){const[e,t]=u.useState((()=>ia?la():void 0));return na((()=>{null==e&&t(la())}),[]),u.useEffect((()=>{ia=!0}),[]),e};function ua(){const e=new Map;return{emit(t,n){var r;null==(r=e.get(t))||r.forEach((e=>e(n)))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){var r;e.set(t,(null==(r=e.get(t))?void 0:r.filter((e=>e!==n)))||[])}}}const da=u.createContext(null),pa=u.createContext(null),fa=()=>{var e;return(null==(e=u.useContext(da))?void 0:e.id)||null},ha=()=>u.useContext(pa);function ga(e){return"data-floating-ui-"+e}function ma(e){const t=(0,u.useRef)(e);return na((()=>{t.current=e})),t}let va=0;function ba(e,t){void 0===t&&(t={});const{preventScroll:n=!1,cancelPrevious:r=!0,sync:a=!1}=t;r&&cancelAnimationFrame(va);const o=()=>null==e?void 0:e.focus({preventScroll:n});a?o():va=requestAnimationFrame(o)}function ya(e,t){let n=e.filter((e=>{var n;return e.parentId===t&&(null==(n=e.context)?void 0:n.open)})),r=n;for(;r.length;)r=e.filter((e=>{var t;return null==(t=r)?void 0:t.some((t=>{var n;return e.parentId===t.id&&(null==(n=e.context)?void 0:n.open)}))})),n=n.concat(r);return n}let wa=new WeakMap,Sa=new WeakSet,xa={},Ea=0;const Ca=e=>e&&(e.host||Ca(e.parentNode));function Ra(e,t,n,r){const a="data-floating-ui-inert",o=r?"inert":n?"aria-hidden":null,i=(s=t,e.map((e=>{if(s.contains(e))return e;const t=Ca(e);return s.contains(t)?t:null})).filter((e=>null!=e)));var s;const l=new Set,c=new Set(i),u=[];xa[a]||(xa[a]=new WeakMap);const d=xa[a];return i.forEach((function e(t){if(!t||l.has(t))return;l.add(t),t.parentNode&&e(t.parentNode)})),function e(t){if(!t||c.has(t))return;[].forEach.call(t.children,(t=>{if("script"!==qt(t))if(l.has(t))e(t);else{const e=o?t.getAttribute(o):null,n=null!==e&&"false"!==e,r=(wa.get(t)||0)+1,i=(d.get(t)||0)+1;wa.set(t,r),d.set(t,i),u.push(t),1===r&&n&&Sa.add(t),1===i&&t.setAttribute(a,""),!n&&o&&t.setAttribute(o,"true")}}))}(t),l.clear(),Ea++,()=>{u.forEach((e=>{const t=(wa.get(e)||0)-1,n=(d.get(e)||0)-1;wa.set(e,t),d.set(e,n),t||(!Sa.has(e)&&o&&e.removeAttribute(o),Sa.delete(e)),n||e.removeAttribute(a)})),Ea--,Ea||(wa=new WeakMap,wa=new WeakMap,Sa=new WeakSet,xa={})}}function Da(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);const r=Sn(e[0]).body;return Ra(e.concat(Array.from(r.querySelectorAll("[aria-live]"))),r,t,n)}const _a=()=>({getShadowRoot:!0,displayCheck:"function"==typeof ResizeObserver&&ResizeObserver.toString().includes("[native code]")?"full":"none"});function Oa(e,t){const n=sr(e,_a());"prev"===t&&n.reverse();const r=n.indexOf(fn(Sn(e)));return n.slice(r+1)[0]}function Ia(){return Oa(document.body,"next")}function Ta(){return Oa(document.body,"prev")}function Aa(e,t){const n=t||e.currentTarget,r=e.relatedTarget;return!r||!hn(n,r)}function ka(e){sr(e,_a()).forEach((e=>{e.dataset.tabindex=e.getAttribute("tabindex")||"",e.setAttribute("tabindex","-1")}))}function Pa(e){e.querySelectorAll("[data-tabindex]").forEach((e=>{const t=e.dataset.tabindex;delete e.dataset.tabindex,t?e.setAttribute("tabindex",t):e.removeAttribute("tabindex")}))}const La={border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"fixed",whiteSpace:"nowrap",width:"1px",top:0,left:0};function Na(e){"Tab"===e.key&&(e.target,clearTimeout(undefined))}const Ma=u.forwardRef((function(e,t){const[n,r]=u.useState();na((()=>(yn()&&r("button"),document.addEventListener("keydown",Na),()=>{document.removeEventListener("keydown",Na)})),[]);const a={ref:t,tabIndex:0,role:n,"aria-hidden":!n||void 0,[ga("focus-guard")]:"",style:La};return u.createElement("span",oa({},e,a))})),Ba=u.createContext(null),Va=ga("portal");function ja(e){const{children:t,id:n,root:r,preserveTabOrder:a=!0}=e,o=function(e){void 0===e&&(e={});const{id:t,root:n}=e,r=ca(),a=Fa(),[o,i]=u.useState(null),s=u.useRef(null);return na((()=>()=>{null==o||o.remove(),queueMicrotask((()=>{s.current=null}))}),[o]),na((()=>{if(!r)return;if(s.current)return;const e=t?document.getElementById(t):null;if(!e)return;const n=document.createElement("div");n.id=r,n.setAttribute(Va,""),e.appendChild(n),s.current=n,i(n)}),[t,r]),na((()=>{if(null===n)return;if(!r)return;if(s.current)return;let e=n||(null==a?void 0:a.portalNode);e&&!Kt(e)&&(e=e.current),e=e||document.body;let o=null;t&&(o=document.createElement("div"),o.id=t,e.appendChild(o));const l=document.createElement("div");l.id=r,l.setAttribute(Va,""),e=o||e,e.appendChild(l),s.current=l,i(l)}),[t,n,r,a]),o}({id:n,root:r}),[i,s]=u.useState(null),l=u.useRef(null),c=u.useRef(null),d=u.useRef(null),p=u.useRef(null),f=null==i?void 0:i.modal,h=null==i?void 0:i.open,g=!!i&&!i.modal&&i.open&&a&&!(!r&&!o);return u.useEffect((()=>{if(o&&a&&!f)return o.addEventListener("focusin",e,!0),o.addEventListener("focusout",e,!0),()=>{o.removeEventListener("focusin",e,!0),o.removeEventListener("focusout",e,!0)};function e(e){if(o&&Aa(e)){("focusin"===e.type?Pa:ka)(o)}}}),[o,a,f]),u.useEffect((()=>{o&&(h||Pa(o))}),[h,o]),u.createElement(Ba.Provider,{value:u.useMemo((()=>({preserveTabOrder:a,beforeOutsideRef:l,afterOutsideRef:c,beforeInsideRef:d,afterInsideRef:p,portalNode:o,setFocusManagerState:s})),[a,o])},g&&o&&u.createElement(Ma,{"data-type":"outside",ref:l,onFocus:e=>{if(Aa(e,o)){var t;null==(t=d.current)||t.focus()}else{const e=Ta()||(null==i?void 0:i.refs.domReference.current);null==e||e.focus()}}}),g&&o&&u.createElement("span",{"aria-owns":o.id,style:La}),o&&lr.createPortal(t,o),g&&o&&u.createElement(Ma,{"data-type":"outside",ref:c,onFocus:e=>{if(Aa(e,o)){var t;null==(t=p.current)||t.focus()}else{const t=Ia()||(null==i?void 0:i.refs.domReference.current);null==t||t.focus(),(null==i?void 0:i.closeOnFocusOut)&&(null==i||i.onOpenChange(!1,e.nativeEvent,"focus-out"))}}}))}const Fa=()=>u.useContext(Ba),$a="data-floating-ui-focusable";function za(e){return e?e.hasAttribute($a)?e:e.querySelector("["+$a+"]")||e:null}let Ua=[];function Wa(e){Ua=Ua.filter((e=>e.isConnected));let t=e;if(t&&"body"!==qt(t)){if(!function(e,t){if(t=t||{},!e)throw new Error("No node provided");return!1!==Hn.call(e,Un)&&ar(t,e)}(t,_a())){const e=sr(t,_a())[0];e&&(t=e)}Ua.push(t),Ua.length>20&&(Ua=Ua.slice(-20))}}function Ha(){return Ua.slice().reverse().find((e=>e.isConnected))}const Ga=u.forwardRef((function(e,t){return u.createElement("button",oa({},e,{type:"button",ref:t,tabIndex:-1,style:La}))}));function qa(e){const{context:t,children:n,disabled:r=!1,order:a=["content"],guards:o=!0,initialFocus:i=0,returnFocus:s=!0,restoreFocus:l=!1,modal:c=!0,visuallyHiddenDismiss:d=!1,closeOnFocusOut:p=!0}=e,{open:f,refs:h,nodeId:g,onOpenChange:m,events:v,dataRef:b,floatingId:y,elements:{domReference:w,floating:S}}=t,x="number"==typeof i&&i<0,E=Rn(w)&&x,C="undefined"==typeof HTMLElement||!("inert"in HTMLElement.prototype)||o,R=ma(a),D=ma(i),_=ma(s),O=ha(),I=Fa(),T=u.useRef(null),A=u.useRef(null),k=u.useRef(!1),P=u.useRef(!1),L=u.useRef(-1),N=null!=I,M=za(S),B=$r((function(e){return void 0===e&&(e=M),e?sr(e,_a()):[]})),V=$r((e=>{const t=B(e);return R.current.map((e=>w&&"reference"===e?w:M&&"floating"===e?M:t)).filter(Boolean).flat()}));function j(e){return!r&&d&&c?u.createElement(Ga,{ref:"start"===e?T:A,onClick:e=>m(!1,e.nativeEvent)},"string"==typeof d?d:"Dismiss"):null}u.useEffect((()=>{if(r)return;if(!c)return;function e(e){if("Tab"===e.key){hn(M,fn(Sn(M)))&&0===B().length&&!E&&Cn(e);const t=V(),n=En(e);"reference"===R.current[0]&&n===w&&(Cn(e),e.shiftKey?ba(t[t.length-1]):ba(t[1])),"floating"===R.current[1]&&n===M&&e.shiftKey&&(Cn(e),ba(t[0]))}}const t=Sn(M);return t.addEventListener("keydown",e),()=>{t.removeEventListener("keydown",e)}}),[r,w,M,c,R,E,B,V]),u.useEffect((()=>{if(!r&&S)return S.addEventListener("focusin",e),()=>{S.removeEventListener("focusin",e)};function e(e){const t=En(e),n=B().indexOf(t);-1!==n&&(L.current=n)}}),[r,S,B]),u.useEffect((()=>{if(!r&&p)return S&&Zt(w)?(w.addEventListener("focusout",t),w.addEventListener("pointerdown",e),S.addEventListener("focusout",t),()=>{w.removeEventListener("focusout",t),w.removeEventListener("pointerdown",e),S.removeEventListener("focusout",t)}):void 0;function e(){P.current=!0,setTimeout((()=>{P.current=!1}))}function t(e){const t=e.relatedTarget;queueMicrotask((()=>{const n=!(hn(w,t)||hn(S,t)||hn(t,S)||hn(null==I?void 0:I.portalNode,t)||null!=t&&t.hasAttribute(ga("focus-guard"))||O&&(ya(O.nodesRef.current,g).find((e=>{var n,r;return hn(null==(n=e.context)?void 0:n.elements.floating,t)||hn(null==(r=e.context)?void 0:r.elements.domReference,t)}))||function(e,t){var n;let r=[],a=null==(n=e.find((e=>e.id===t)))?void 0:n.parentId;for(;a;){const t=e.find((e=>e.id===a));a=null==t?void 0:t.parentId,t&&(r=r.concat(t))}return r}(O.nodesRef.current,g).find((e=>{var n,r;return(null==(n=e.context)?void 0:n.elements.floating)===t||(null==(r=e.context)?void 0:r.elements.domReference)===t}))));if(l&&n&&fn(Sn(M))===Sn(M).body){Zt(M)&&M.focus();const e=L.current,t=B(),n=t[e]||t[t.length-1]||M;Zt(n)&&n.focus()}!E&&c||!t||!n||P.current||t===Ha()||(k.current=!0,m(!1,e,"focus-out"))}))}}),[r,w,S,M,c,g,O,I,m,p,l,B,E]),u.useEffect((()=>{var e;if(r)return;const t=Array.from((null==I||null==(e=I.portalNode)?void 0:e.querySelectorAll("["+ga("portal")+"]"))||[]);if(S){const e=[S,...t,T.current,A.current,R.current.includes("reference")||E?w:null].filter((e=>null!=e)),n=c||E?Da(e,C,!C):Da(e);return()=>{n()}}}),[r,w,S,c,R,I,E,C]),na((()=>{if(r||!Zt(M))return;const e=fn(Sn(M));queueMicrotask((()=>{const t=V(M),n=D.current,r=("number"==typeof n?t[n]:n.current)||M,a=hn(M,e);x||a||!f||ba(r,{preventScroll:r===M})}))}),[r,f,M,x,V,D]),na((()=>{if(r||!M)return;let e=!1;const t=Sn(M),n=fn(t);let a=b.current.openEvent;function o(t){let{open:n,reason:r,event:o,nested:i}=t;n&&(a=o),"escape-key"===r&&h.domReference.current&&Wa(h.domReference.current),"hover"===r&&"mouseleave"===o.type&&(k.current=!0),"outside-press"===r&&(i?(k.current=!1,e=!0):k.current=!(vn(o)||bn(o)))}Wa(n),v.on("openchange",o);const i=t.createElement("span");return i.setAttribute("tabindex","-1"),i.setAttribute("aria-hidden","true"),Object.assign(i.style,La),N&&w&&w.insertAdjacentElement("afterend",i),()=>{v.off("openchange",o);const n=fn(t),r=hn(S,n)||O&&ya(O.nodesRef.current,g).some((e=>{var t;return hn(null==(t=e.context)?void 0:t.elements.floating,n)}));(r||a&&["click","mousedown"].includes(a.type))&&h.domReference.current&&Wa(h.domReference.current);const s="boolean"==typeof _.current?Ha()||i:_.current.current||i;queueMicrotask((()=>{_.current&&!k.current&&Zt(s)&&(s===n||n===t.body||r)&&s.focus({preventScroll:e}),i.remove()}))}}),[r,S,M,_,b,h,v,O,g,N,w]),u.useEffect((()=>{queueMicrotask((()=>{k.current=!1}))}),[r]),na((()=>{if(!r&&I)return I.setFocusManagerState({modal:c,closeOnFocusOut:p,open:f,onOpenChange:m,refs:h}),()=>{I.setFocusManagerState(null)}}),[r,I,c,f,m,h,p]),na((()=>{if(r)return;if(!M)return;if("function"!=typeof MutationObserver)return;if(x)return;const e=()=>{const e=M.getAttribute("tabindex"),t=B(),n=fn(Sn(S)),r=t.indexOf(n);-1!==r&&(L.current=r),R.current.includes("floating")||n!==h.domReference.current&&0===t.length?"0"!==e&&M.setAttribute("tabindex","0"):"-1"!==e&&M.setAttribute("tabindex","-1")};e();const t=new MutationObserver(e);return t.observe(M,{childList:!0,subtree:!0,attributes:!0}),()=>{t.disconnect()}}),[r,S,M,h,R,B,x]);const F=!r&&C&&(!c||!E)&&(N||c);return u.createElement(u.Fragment,null,F&&u.createElement(Ma,{"data-type":"inside",ref:null==I?void 0:I.beforeInsideRef,onFocus:e=>{if(c){const e=V();ba("reference"===a[0]?e[0]:e[e.length-1])}else if(null!=I&&I.preserveTabOrder&&I.portalNode)if(k.current=!1,Aa(e,I.portalNode)){const e=Ia()||w;null==e||e.focus()}else{var t;null==(t=I.beforeOutsideRef.current)||t.focus()}}}),!E&&j("start"),n,j("end"),F&&u.createElement(Ma,{"data-type":"inside",ref:null==I?void 0:I.afterInsideRef,onFocus:e=>{if(c)ba(V()[0]);else if(null!=I&&I.preserveTabOrder&&I.portalNode)if(p&&(k.current=!0),Aa(e,I.portalNode)){const e=Ta()||w;null==e||e.focus()}else{var t;null==(t=I.afterOutsideRef.current)||t.focus()}}}))}const Qa={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},Ya={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},Xa=e=>{var t,n;return{escapeKey:"boolean"==typeof e?e:null!=(t=null==e?void 0:e.escapeKey)&&t,outsidePress:"boolean"==typeof e?e:null==(n=null==e?void 0:e.outsidePress)||n}};function Ka(e){void 0===e&&(e={});const{nodeId:t}=e,n=function(e){const{open:t=!1,onOpenChange:n,elements:r}=e,a=ca(),o=u.useRef({}),[i]=u.useState((()=>ua())),s=null!=fa(),[l,c]=u.useState(r.reference),d=$r(((e,t,r)=>{o.current.openEvent=e?t:void 0,i.emit("openchange",{open:e,event:t,reason:r,nested:s}),null==n||n(e,t,r)})),p=u.useMemo((()=>({setPositionReference:c})),[]),f=u.useMemo((()=>({reference:l||r.reference||null,floating:r.floating||null,domReference:r.reference})),[l,r.reference,r.floating]);return u.useMemo((()=>({dataRef:o,open:t,onOpenChange:d,elements:f,events:i,floatingId:a,refs:p})),[t,d,f,i,a,p])}({...e,elements:{reference:null,floating:null,...e.elements}}),r=e.rootContext||n,a=r.elements,[o,i]=u.useState(null),[s,l]=u.useState(null),c=(null==a?void 0:a.domReference)||o,d=u.useRef(null),p=ha();na((()=>{c&&(d.current=c)}),[c]);const f=function(e){void 0===e&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:l,open:c}=e,[d,p]=u.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,h]=u.useState(r);Pr(f,r)||h(r);const[g,m]=u.useState(null),[v,b]=u.useState(null),y=u.useCallback((e=>{e!==E.current&&(E.current=e,m(e))}),[]),w=u.useCallback((e=>{e!==C.current&&(C.current=e,b(e))}),[]),S=o||g,x=i||v,E=u.useRef(null),C=u.useRef(null),R=u.useRef(d),D=null!=l,_=Mr(l),O=Mr(a),I=Mr(c),T=u.useCallback((()=>{if(!E.current||!C.current)return;const e={placement:t,strategy:n,middleware:f};O.current&&(e.platform=O.current),Ar(E.current,C.current,e).then((e=>{const t={...e,isPositioned:!1!==I.current};A.current&&!Pr(R.current,t)&&(R.current=t,lr.flushSync((()=>{p(t)})))}))}),[f,t,n,O,I]);kr((()=>{!1===c&&R.current.isPositioned&&(R.current.isPositioned=!1,p((e=>({...e,isPositioned:!1}))))}),[c]);const A=u.useRef(!1);kr((()=>(A.current=!0,()=>{A.current=!1})),[]),kr((()=>{if(S&&(E.current=S),x&&(C.current=x),S&&x){if(_.current)return _.current(S,x,T);T()}}),[S,x,T,_,D]);const k=u.useMemo((()=>({reference:E,floating:C,setReference:y,setFloating:w})),[y,w]),P=u.useMemo((()=>({reference:S,floating:x})),[S,x]),L=u.useMemo((()=>{const e={position:n,left:0,top:0};if(!P.floating)return e;const t=Nr(P.floating,d.x),r=Nr(P.floating,d.y);return s?{...e,transform:"translate("+t+"px, "+r+"px)",...Lr(P.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:t,top:r}}),[n,s,P.floating,d.x,d.y]);return u.useMemo((()=>({...d,update:T,refs:k,elements:P,floatingStyles:L})),[d,T,k,P,L])}({...e,elements:{...a,...s&&{reference:s}}}),h=u.useCallback((e=>{const t=Kt(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),contextElement:e}:e;l(t),f.refs.setReference(t)}),[f.refs]),g=u.useCallback((e=>{(Kt(e)||null===e)&&(d.current=e,i(e)),(Kt(f.refs.reference.current)||null===f.refs.reference.current||null!==e&&!Kt(e))&&f.refs.setReference(e)}),[f.refs]),m=u.useMemo((()=>({...f.refs,setReference:g,setPositionReference:h,domReference:d})),[f.refs,g,h]),v=u.useMemo((()=>({...f.elements,domReference:c})),[f.elements,c]),b=u.useMemo((()=>({...f,...r,refs:m,elements:v,nodeId:t})),[f,m,v,t,r]);return na((()=>{r.dataRef.current.floatingContext=b;const e=null==p?void 0:p.nodesRef.current.find((e=>e.id===t));e&&(e.context=b)})),u.useMemo((()=>({...f,context:b,refs:m,elements:v})),[f,m,v,b])}const Za="active",Ja="selected";function eo(e,t,n){const r=new Map,a="item"===n;let o=e;if(a&&e){const{[Za]:t,[Ja]:n,...r}=e;o=r}return{..."floating"===n&&{tabIndex:-1,[$a]:""},...o,...t.map((t=>{const r=t?t[n]:null;return"function"==typeof r?e?r(e):null:r})).concat(e).reduce(((e,t)=>t?(Object.entries(t).forEach((t=>{let[n,o]=t;var i;a&&[Za,Ja].includes(n)||(0===n.indexOf("on")?(r.has(n)||r.set(n,[]),"function"==typeof o&&(null==(i=r.get(n))||i.push(o),e[n]=function(){for(var e,t=arguments.length,a=new Array(t),o=0;oe(...a))).find((e=>void 0!==e))})):e[n]=o)})),e):e),{})}}let to=!1;function no(e,t,n){switch(e){case"vertical":return t;case"horizontal":return n;default:return t||n}}function ro(e,t){return no(t,e===zr||e===Ur,e===Wr||e===Hr)}function ao(e,t,n){return no(t,e===Ur,n?e===Wr:e===Hr)||"Enter"===e||" "===e||""===e}function oo(e,t,n){return no(t,n?e===Hr:e===Wr,e===zr)}function io(e,t){const{open:n,onOpenChange:r,elements:a}=e,{listRef:o,activeIndex:i,onNavigate:s=()=>{},enabled:l=!0,selectedIndex:c=null,allowEscape:d=!1,loop:p=!1,nested:f=!1,rtl:h=!1,virtual:g=!1,focusItemOnOpen:m="auto",focusItemOnHover:v=!0,openOnArrowKeyDown:b=!0,disabledIndices:y,orientation:w="vertical",cols:S=1,scrollItemIntoView:x=!0,virtualItemRef:E,itemSizes:C,dense:R=!1}=t;const D=ma(za(a.floating)),_=fa(),O=ha(),I=$r(s),T=Rn(a.domReference),A=u.useRef(m),k=u.useRef(null!=c?c:-1),P=u.useRef(null),L=u.useRef(!0),N=u.useRef(I),M=u.useRef(!!a.floating),B=u.useRef(n),V=u.useRef(!1),j=u.useRef(!1),F=ma(y),$=ma(n),z=ma(x),U=ma(c),[W,H]=u.useState(),[G,q]=u.useState(),Q=$r((function(e,t,n){function r(e){g?(H(e.id),null==O||O.events.emit("virtualfocus",e),E&&(E.current=e)):ba(e,{preventScroll:!0,sync:!(!gn().toLowerCase().startsWith("mac")||navigator.maxTouchPoints||!yn())&&(to||V.current)})}void 0===n&&(n=!1);const a=e.current[t.current];a&&r(a),requestAnimationFrame((()=>{const o=e.current[t.current]||a;if(!o)return;a||r(o);const i=z.current;i&&X&&(n||!L.current)&&(null==o.scrollIntoView||o.scrollIntoView("boolean"==typeof i?{block:"nearest",inline:"nearest"}:i))}))}));na((()=>{document.createElement("div").focus({get preventScroll(){return to=!0,!1}})}),[]),na((()=>{l&&(n&&a.floating?A.current&&null!=c&&(j.current=!0,k.current=c,I(c)):M.current&&(k.current=-1,N.current(null)))}),[l,n,a.floating,c,I]),na((()=>{if(l&&n&&a.floating)if(null==i){if(V.current=!1,null!=U.current)return;if(M.current&&(k.current=-1,Q(o,k)),(!B.current||!M.current)&&A.current&&(null!=P.current||!0===A.current&&null==P.current)){let e=0;const t=()=>{if(null==o.current[0]){if(e<2){(e?requestAnimationFrame:queueMicrotask)(t)}e++}else k.current=null==P.current||ao(P.current,w,h)||f?Qr(o,F.current):Yr(o,F.current),P.current=null,I(k.current)};t()}}else qr(o,i)||(k.current=i,Q(o,k,j.current),j.current=!1)}),[l,n,a.floating,i,U,f,o,w,h,I,Q,F]),na((()=>{var e;if(!l||a.floating||!O||g||!M.current)return;const t=O.nodesRef.current,n=null==(e=t.find((e=>e.id===_)))||null==(e=e.context)?void 0:e.elements.floating,r=fn(Sn(a.floating)),o=t.some((e=>e.context&&hn(e.context.elements.floating,r)));n&&!o&&L.current&&n.focus({preventScroll:!0})}),[l,a.floating,O,_,g]),na((()=>{if(l&&O&&g&&!_)return O.events.on("virtualfocus",e),()=>{O.events.off("virtualfocus",e)};function e(e){q(e.id),E&&(E.current=e)}}),[l,O,g,_,E]),na((()=>{N.current=I,M.current=!!a.floating})),na((()=>{n||(P.current=null)}),[n]),na((()=>{B.current=n}),[n]);const Y=null!=i,X=u.useMemo((()=>{function e(e){if(!n)return;const t=o.current.indexOf(e);-1!==t&&I(t)}const t={onFocus(t){let{currentTarget:n}=t;e(n)},onClick:e=>{let{currentTarget:t}=e;return t.focus({preventScroll:!0})},...v&&{onMouseMove(t){let{currentTarget:n}=t;e(n)},onPointerLeave(e){let{pointerType:t}=e;L.current&&"touch"!==t&&(k.current=-1,Q(o,k),I(null),g||ba(D.current,{preventScroll:!0}))}}};return t}),[n,D,Q,v,o,I,g]),K=$r((e=>{if(L.current=!1,V.current=!0,229===e.which)return;if(!$.current&&e.currentTarget===D.current)return;if(f&&oo(e.key,w,h))return Cn(e),r(!1,e.nativeEvent,"list-navigation"),void(Zt(a.domReference)&&(g?null==O||O.events.emit("virtualfocus",a.domReference):a.domReference.focus()));const t=k.current,i=Qr(o,y),s=Yr(o,y);if(T||("Home"===e.key&&(Cn(e),k.current=i,I(k.current)),"End"===e.key&&(Cn(e),k.current=s,I(k.current))),S>1){const t=C||Array.from({length:o.current.length},(()=>({width:1,height:1}))),n=Zr(t,S,R),r=n.findIndex((e=>null!=e&&!ta(o.current,e,y))),a=n.reduce(((e,t,n)=>null==t||ta(o.current,t,y)?e:n),-1),l=n[Kr({current:n.map((e=>null!=e?o.current[e]:null))},{event:e,orientation:w,loop:p,rtl:h,cols:S,disabledIndices:ea([...y||o.current.map(((e,t)=>ta(o.current,t)?t:void 0)),void 0],n),minIndex:r,maxIndex:a,prevIndex:Jr(k.current>s?i:k.current,t,n,S,e.key===Ur?"bl":e.key===(h?Wr:Hr)?"tr":"tl"),stopEvent:!0})];if(null!=l&&(k.current=l,I(k.current)),"both"===w)return}if(ro(e.key,w)){if(Cn(e),n&&!g&&fn(e.currentTarget.ownerDocument)===e.currentTarget)return k.current=ao(e.key,w,h)?i:s,void I(k.current);ao(e.key,w,h)?k.current=p?t>=s?d&&t!==o.current.length?-1:i:Xr(o,{startingIndex:t,disabledIndices:y}):Math.min(s,Xr(o,{startingIndex:t,disabledIndices:y})):k.current=p?t<=i?d&&-1!==t?o.current.length:s:Xr(o,{startingIndex:t,decrement:!0,disabledIndices:y}):Math.max(i,Xr(o,{startingIndex:t,decrement:!0,disabledIndices:y})),qr(o,k.current)?I(null):I(k.current)}})),Z=u.useMemo((()=>g&&n&&Y&&{"aria-activedescendant":G||W}),[g,n,Y,G,W]),J=u.useMemo((()=>({"aria-orientation":"both"===w?void 0:w,...!Rn(a.domReference)&&Z,onKeyDown:K,onPointerMove(){L.current=!0}})),[Z,K,a.domReference,w]),ee=u.useMemo((()=>{function e(e){"auto"===m&&vn(e.nativeEvent)&&(A.current=!0)}return{...Z,onKeyDown(e){L.current=!1;const t=e.key.startsWith("Arrow"),a=["Home","End"].includes(e.key),i=t||a,s=function(e,t,n){return no(t,n?e===Wr:e===Hr,e===Ur)}(e.key,w,h),l=oo(e.key,w,h),u=ro(e.key,w),d=(f?s:u)||"Enter"===e.key||""===e.key.trim();if(g&&n){const t=null==O?void 0:O.nodesRef.current.find((e=>null==e.parentId)),n=O&&t?function(e,t){let n,r=-1;return function t(a,o){o>r&&(n=a,r=o),ya(e,a).forEach((e=>{t(e.id,o+1)}))}(t,0),e.find((e=>e.id===n))}(O.nodesRef.current,t.id):null;if(i&&n&&E){const t=new KeyboardEvent("keydown",{key:e.key,bubbles:!0});if(s||l){var p,m;const r=(null==(p=n.context)?void 0:p.elements.domReference)===e.currentTarget,a=l&&!r?null==(m=n.context)?void 0:m.elements.domReference:s?o.current.find((e=>(null==e?void 0:e.id)===W)):null;a&&(Cn(e),a.dispatchEvent(t),q(void 0))}var v;if((u||a)&&n.context)if(n.context.open&&n.parentId&&e.currentTarget!==n.context.elements.domReference)return Cn(e),void(null==(v=n.context.elements.domReference)||v.dispatchEvent(t))}return K(e)}(n||b||!t)&&(d&&(P.current=f&&u?null:e.key),f?s&&(Cn(e),n?(k.current=Qr(o,F.current),I(k.current)):r(!0,e.nativeEvent,"list-navigation")):u&&(null!=c&&(k.current=c),Cn(e),!n&&b?r(!0,e.nativeEvent,"list-navigation"):K(e),n&&I(k.current)))},onFocus(){n&&!g&&I(null)},onPointerDown:function(e){A.current=m,"auto"===m&&bn(e.nativeEvent)&&(A.current=!0)},onMouseDown:e,onClick:e}}),[W,Z,K,F,m,o,f,I,r,n,b,w,h,c,O,g,E]);return u.useMemo((()=>l?{reference:ee,floating:J,item:X}:{}),[l,ee,J,X])}const so=new Map([["select","listbox"],["combobox","listbox"],["label",!1]]);function lo(e,t,n){let r,a=n.initialDeps??[];function o(){var o,i,s,l;let c;n.key&&(null==(o=n.debug)?void 0:o.call(n))&&(c=Date.now());const u=e(),d=u.length!==a.length||u.some(((e,t)=>a[t]!==e));if(!d)return r;let p;if(a=u,n.key&&(null==(i=n.debug)?void 0:i.call(n))&&(p=Date.now()),r=t(...u),n.key&&(null==(s=n.debug)?void 0:s.call(n))){Math.round(100*(Date.now()-c)),Math.round(100*(Date.now()-p))}return null==(l=null==n?void 0:n.onChange)||l.call(n,r),r}return o.updateDeps=e=>{a=e},o}function co(e,t){if(void 0===e)throw new Error("Unexpected undefined"+(t?`: ${t}`:""));return e}const uo=(e,t,n)=>{let r;return function(...a){e.clearTimeout(r),r=e.setTimeout((()=>t.apply(this,a)),n)}},po=e=>e,fo=e=>{const t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),r=[];for(let e=t;e<=n;e++)r.push(e);return r},ho=(e,t)=>{const n=e.scrollElement;if(!n)return;const r=e.targetWindow;if(!r)return;const a=e=>{const{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(a(n.getBoundingClientRect()),!r.ResizeObserver)return()=>{};const o=new r.ResizeObserver((t=>{const r=()=>{const e=t[0];if(null==e?void 0:e.borderBoxSize){const t=e.borderBoxSize[0];if(t)return void a({width:t.inlineSize,height:t.blockSize})}a(n.getBoundingClientRect())};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()}));return o.observe(n,{box:"border-box"}),()=>{o.unobserve(n)}},go={passive:!0},mo="undefined"==typeof window||"onscrollend"in window,vo=(e,t)=>{const n=e.scrollElement;if(!n)return;const r=e.targetWindow;if(!r)return;let a=0;const o=e.options.useScrollendEvent&&mo?()=>{}:uo(r,(()=>{t(a,!1)}),e.options.isScrollingResetDelay),i=r=>()=>{const{horizontal:i,isRtl:s}=e.options;a=i?n.scrollLeft*(s?-1:1):n.scrollTop,o(),t(a,r)},s=i(!0),l=i(!1);l(),n.addEventListener("scroll",s,go);const c=e.options.useScrollendEvent&&mo;return c&&n.addEventListener("scrollend",l,go),()=>{n.removeEventListener("scroll",s),c&&n.removeEventListener("scrollend",l)}},bo=(e,t,n)=>{if(null==t?void 0:t.borderBoxSize){const e=t.borderBoxSize[0];if(e){return Math.round(e[n.options.horizontal?"inlineSize":"blockSize"])}}return Math.round(e.getBoundingClientRect()[n.options.horizontal?"width":"height"])},yo=(e,{adjustments:t=0,behavior:n},r)=>{var a,o;const i=e+t;null==(o=null==(a=r.scrollElement)?void 0:a.scrollTo)||o.call(a,{[r.options.horizontal?"left":"top"]:i,behavior:n})};class wo{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.observer=(()=>{let e=null;const t=()=>e||(this.targetWindow&&this.targetWindow.ResizeObserver?e=new this.targetWindow.ResizeObserver((e=>{e.forEach((e=>{const t=()=>{this._measureElement(e.target,e)};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()}))})):null);return{disconnect:()=>{var n;null==(n=t())||n.disconnect(),e=null},observe:e=>{var n;return null==(n=t())?void 0:n.observe(e,{box:"border-box"})},unobserve:e=>{var n;return null==(n=t())?void 0:n.unobserve(e)}}})(),this.range=null,this.setOptions=e=>{Object.entries(e).forEach((([t,n])=>{void 0===n&&delete e[t]})),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:po,rangeExtractor:fo,onChange:()=>{},measureElement:bo,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,...e}},this.notify=e=>{var t,n;null==(n=(t=this.options).onChange)||n.call(t,this,e)},this.maybeNotify=lo((()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null])),(e=>{this.notify(e)}),{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach((e=>e())),this.unsubs=[],this.observer.disconnect(),this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var e;const t=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==t){if(this.cleanup(),!t)return void this.maybeNotify();this.scrollElement=t,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=(null==(e=this.scrollElement)?void 0:e.window)??null,this.elementsCache.forEach((e=>{this.observer.observe(e)})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,(e=>{this.scrollRect=e,this.maybeNotify()}))),this.unsubs.push(this.options.observeElementOffset(this,((e,t)=>{this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset()this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??("function"==typeof this.options.initialOffset?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{const n=new Map,r=new Map;for(let a=t-1;a>=0;a--){const t=e[a];if(n.has(t.lane))continue;const o=r.get(t.lane);if(null==o||t.end>o.end?r.set(t.lane,t):t.ende.end===t.end?e.index-t.index:e.end-t.end))[0]:void 0},this.getMeasurementOptions=lo((()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled]),((e,t,n,r,a)=>(this.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:a})),{key:!1}),this.getMeasurements=lo((()=>[this.getMeasurementOptions(),this.itemSizeCache]),(({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:a},o)=>{if(!a)return this.measurementsCache=[],this.itemSizeCache.clear(),[];0===this.measurementsCache.length&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((e=>{this.itemSizeCache.set(e.key,e.size)})));const i=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const s=this.measurementsCache.slice(0,i);for(let a=i;athis.options.debug}),this.calculateRange=lo((()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes]),((e,t,n,r)=>this.range=e.length>0&&t>0?function({measurements:e,outerSize:t,scrollOffset:n,lanes:r}){const a=e.length-1,o=t=>e[t].start;if(e.length<=r)return{startIndex:0,endIndex:a};let i=So(0,a,o,n),s=i;if(1===r)for(;s1){const o=Array(r).fill(0);for(;se=0&&l.some((e=>e>=n));){const t=e[i];l[t.lane]=t.start,i--}i=Math.max(0,i-i%r),s=Math.min(a,s+(r-1-s%r))}return{startIndex:i,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n,lanes:r}):null),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=lo((()=>{let e=null,t=null;const n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]}),((e,t,n,r,a)=>null===r||null===a?[]:e({startIndex:r,endIndex:a,overscan:t,count:n})),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{const t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this._measureElement=(e,t)=>{const n=this.indexFromElement(e),r=this.measurementsCache[n];if(!r)return;const a=r.key,o=this.elementsCache.get(a);o!==e&&(o&&this.observer.unobserve(o),this.observer.observe(e),this.elementsCache.set(a,e)),e.isConnected&&this.resizeItem(n,this.options.measureElement(e,t,this))},this.resizeItem=(e,t)=>{const n=this.measurementsCache[e];if(!n)return;const r=t-(this.itemSizeCache.get(n.key)??n.size);0!==r&&((void 0!==this.shouldAdjustScrollPositionOnItemSizeChange?this.shouldAdjustScrollPositionOnItemSizeChange(n,r,this):n.start{e?this._measureElement(e,void 0):this.elementsCache.forEach(((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))}))},this.getVirtualItems=lo((()=>[this.getVirtualIndexes(),this.getMeasurements()]),((e,t)=>{const n=[];for(let r=0,a=e.length;rthis.options.debug}),this.getVirtualItemForOffset=e=>{const t=this.getMeasurements();if(0!==t.length)return co(t[So(0,t.length-1,(e=>co(t[e]).start),e)])},this.getOffsetForAlignment=(e,t,n=0)=>{const r=this.getSize(),a=this.getScrollOffset();"auto"===t&&(t=e>=a+r?"end":"start"),"center"===t?e+=(n-r)/2:"end"===t&&(e-=r);const o=this.options.horizontal?"scrollWidth":"scrollHeight",i=(this.scrollElement?"document"in this.scrollElement?this.scrollElement.document.documentElement[o]:this.scrollElement[o]:0)-r;return Math.max(Math.min(i,e),0)},this.getOffsetForIndex=(e,t="auto")=>{e=Math.max(0,Math.min(e,this.options.count-1));const n=this.measurementsCache[e];if(!n)return;const r=this.getSize(),a=this.getScrollOffset();if("auto"===t)if(n.end>=a+r-this.options.scrollPaddingEnd)t="end";else{if(!(n.start<=a+this.options.scrollPaddingStart))return[a,t];t="start"}const o="end"===t?n.end+this.options.scrollPaddingEnd:n.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(o,t,n.size),t]},this.isDynamicMode=()=>this.elementsCache.size>0,this.cancelScrollToIndex=()=>{null!==this.scrollToIndexTimeoutId&&this.targetWindow&&(this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId),this.scrollToIndexTimeoutId=null)},this.scrollToOffset=(e,{align:t="start",behavior:n}={})=>{this.cancelScrollToIndex(),"smooth"===n&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(e,t),{adjustments:void 0,behavior:n})},this.scrollToIndex=(e,{align:t="auto",behavior:n}={})=>{e=Math.max(0,Math.min(e,this.options.count-1)),this.cancelScrollToIndex(),"smooth"===n&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");const r=this.getOffsetForIndex(e,t);if(!r)return;const[a,o]=r;this._scrollToOffset(a,{adjustments:void 0,behavior:n}),"smooth"!==n&&this.isDynamicMode()&&this.targetWindow&&(this.scrollToIndexTimeoutId=this.targetWindow.setTimeout((()=>{this.scrollToIndexTimeoutId=null;if(this.elementsCache.has(this.options.getItemKey(e))){const[a]=co(this.getOffsetForIndex(e,o));t=a,r=this.getScrollOffset(),Math.abs(t-r)<1||this.scrollToIndex(e,{align:o,behavior:n})}else this.scrollToIndex(e,{align:o,behavior:n});var t,r})))},this.scrollBy=(e,{behavior:t}={})=>{this.cancelScrollToIndex(),"smooth"===t&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getScrollOffset()+e,{adjustments:void 0,behavior:t})},this.getTotalSize=()=>{var e;const t=this.getMeasurements();let n;if(0===t.length)n=this.options.paddingStart;else if(1===this.options.lanes)n=(null==(e=t[t.length-1])?void 0:e.end)??0;else{const e=Array(this.options.lanes).fill(null);let r=t.length-1;for(;r>=0&&e.some((e=>null===e));){const n=t[r];null===e[n.lane]&&(e[n.lane]=n.end),r--}n=Math.max(...e.filter((e=>null!==e)))}return Math.max(n-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.itemSizeCache=new Map,this.notify(!1)},this.setOptions(e)}}const So=(e,t,n,r)=>{for(;e<=t;){const a=(e+t)/2|0,o=n(a);if(or))return a;t=a-1}}return e>0?e-1:0};const xo="undefined"!=typeof document?u.useLayoutEffect:u.useEffect;function Eo(e){const t=u.useReducer((()=>({})),{})[1],n={...e,onChange:(n,r)=>{var a;r?(0,lr.flushSync)(t):t(),null==(a=e.onChange)||a.call(e,n,r)}},[r]=u.useState((()=>new wo(n)));return r.setOptions(n),xo((()=>r._didMount()),[]),xo((()=>r._willUpdate())),r}const Co=(0,u.forwardRef)((function({children:e,active:t,addGroupBottomBorder:n,isMultiValueEdit:r,checked:a,...o},i){const s=(0,qe.useStyles2)(Ro),l=(0,u.useId)();return p().createElement("div",{ref:i,role:"option",id:l,"aria-selected":t,className:(0,rt.cx)(s.option,t&&s.optionFocused,n&&s.groupBottomBorder),...o},p().createElement("div",{className:s.optionBody,"data-testid":`data-testid ad hoc filter option value ${e}`},p().createElement("span",null,r?p().createElement(qe.Checkbox,{tabIndex:-1,checked:a,className:s.checkbox}):null,e)))})),Ro=e=>({option:(0,rt.css)({label:"grafana-select-option",top:0,left:0,width:"100%",position:"absolute",padding:e.spacing(1),display:"flex",alignItems:"center",flexDirection:"row",flexShrink:0,whiteSpace:"nowrap",cursor:"pointer","&:hover":{background:e.colors.action.hover,"@media (forced-colors: active), (prefers-contrast: more)":{border:`1px solid ${e.colors.primary.border}`}}}),optionFocused:(0,rt.css)({label:"grafana-select-option-focused",background:e.colors.action.focus,"@media (forced-colors: active), (prefers-contrast: more)":{border:`1px solid ${e.colors.primary.border}`}}),optionBody:(0,rt.css)({label:"grafana-select-option-body",display:"flex",fontWeight:e.typography.fontWeightMedium,flexDirection:"column",flexGrow:1}),groupBottomBorder:(0,rt.css)({borderBottom:`1px solid ${e.colors.border.weak}`}),checkbox:(0,rt.css)({paddingRight:e.spacing(.5)}),multiValueApplyWrapper:(0,rt.css)({position:"fixed",top:0,left:0,display:"flex",backgroundColor:e.colors.background.primary,color:e.colors.text.primary,boxShadow:e.shadows.z2,overflowY:"auto",zIndex:e.zIndex.dropdown,gap:e.spacing(1.5),padding:`${e.spacing(1.5)} ${e.spacing(1)}`})}),Do=()=>p().createElement(Co,{onClick:e=>e.stopPropagation()},"Loading options..."),_o=()=>p().createElement(Co,{onClick:e=>e.stopPropagation()},"No options found"),Oo=({handleFetchOptions:e})=>p().createElement(Co,{onClick:e},"An error has occurred fetching labels. Click to retry"),Io=({onApply:e,floatingElement:t,maxOptionWidth:n,menuHeight:r})=>{const a=(0,qe.useStyles2)(Ro),o=null==t?void 0:t.getBoundingClientRect();return p().createElement("div",{className:a.multiValueApplyWrapper,style:{width:`${n}px`,transform:`translate(${null==o?void 0:o.left}px,${o?o.top+r:0}px)`}},p().createElement(qe.Button,{onClick:e,size:"sm",tabIndex:-1},"Apply"))},To={key:"operator",operator:"value",value:"key"},Ao=(e,t,n,r,a)=>ko(To[e],t,"value"===e?n:void 0,r,a),ko=(e,t,n,r,a)=>{t(e),null==n||n(void 0,a),setTimeout((()=>null==r?void 0:r.focus()))},Po=({filterInputType:e,item:t,filter:n,setFilterMultiValues:r,onAddCustomValue:a})=>{var o,i,s,l,c;if("key"===e)return{key:t.value,keyLabel:t.label?t.label:t.value,meta:null==t?void 0:t.meta};if("value"===e)return t.isCustom&&a?a(t,n):{value:t.value,valueLabels:[t.label?t.label:t.value]};if("operator"===e){if(ri(n.operator)&&!ri(t.value))return r([]),{operator:t.value,valueLabels:[(null==(o=n.valueLabels)?void 0:o[0])||(null==(i=n.values)?void 0:i[0])||n.value],values:void 0};if(ri(t.value)&&!ri(n.operator)){const e=[(null==(s=n.valueLabels)?void 0:s[0])||(null==(l=n.values)?void 0:l[0])||n.value],a=[n.value];return a[0]&&r([{value:a[0],label:null!=(c=null==e?void 0:e[0])?c:a[0]}]),{operator:t.value,valueLabels:e,values:a}}}return{[e]:t.value}},Lo="Filter by label values",No=(e,t,n,r)=>{var a;return"key"===t?Lo:"value"===t?n?"Edit values":(null==(a=e.valueLabels)?void 0:a[0])||"":e[t]&&!r?`${e[t]}`:Lo},Mo=({populateInputOnEdit:e,item:t,filterInputType:n,setInputValue:r,filter:a})=>{var o,i,s;e&&!ri(t.value||"")&&"value"===To[n]?r(null!=(s=null!=(i=null==(o=null==a?void 0:a.valueLabels)?void 0:o[0])?i:null==a?void 0:a.value)?s:""):r("")},Bo=({open:e,onOpenChange:t,activeIndex:n,setActiveIndex:r,outsidePressIdsToIgnore:a,listRef:o,disabledIndicesRef:i})=>{const{refs:s,floatingStyles:l,context:c}=Ka({whileElementsMounted:_r,open:e,onOpenChange:t,placement:"bottom-start",middleware:[(d=10,{...Or(d),options:[d,p]}),Br({padding:10}),Vr({apply({availableHeight:e,availableWidth:t,elements:n}){n.floating.style.maxHeight=`${Math.min(300,e)}px`,n.floating.style.maxWidth=`${t}px`},padding:10})],strategy:"fixed"});var d,p;const f=function(e,t){var n;void 0===t&&(t={});const{open:r,floatingId:a}=e,{enabled:o=!0,role:i="dialog"}=t,s=null!=(n=so.get(i))?n:i,l=ca(),c=null!=fa(),d=u.useMemo((()=>"tooltip"===s||"label"===i?{["aria-"+("label"===i?"labelledby":"describedby")]:r?a:void 0}:{"aria-expanded":r?"true":"false","aria-haspopup":"alertdialog"===s?"dialog":s,"aria-controls":r?a:void 0,..."listbox"===s&&{role:"combobox"},..."menu"===s&&{id:l},..."menu"===s&&c&&{role:"menuitem"},..."select"===i&&{"aria-autocomplete":"none"},..."combobox"===i&&{"aria-autocomplete":"list"}}),[s,a,c,r,l,i]),p=u.useMemo((()=>{const e={id:a,...s&&{role:s}};return"tooltip"===s||"label"===i?e:{...e,..."menu"===s&&{"aria-labelledby":l}}}),[s,a,l,i]),f=u.useCallback((e=>{let{active:t,selected:n}=e;const r={role:"option",...t&&{id:a+"-option"}};switch(i){case"select":return{...r,"aria-selected":t&&n};case"combobox":return{...r,...t&&{"aria-selected":!0}}}return{}}),[a,i]);return u.useMemo((()=>o?{reference:d,floating:p,item:f}:{}),[o,d,p,f])}(c,{role:"listbox"}),h=function(e,t){void 0===t&&(t={});const{open:n,onOpenChange:r,elements:a,dataRef:o}=e,{enabled:i=!0,escapeKey:s=!0,outsidePress:l=!0,outsidePressEvent:c="pointerdown",referencePress:d=!1,referencePressEvent:p="pointerdown",ancestorScroll:f=!1,bubbles:h,capture:g}=t,m=ha(),v=$r("function"==typeof l?l:()=>!1),b="function"==typeof l?v:l,y=u.useRef(!1),w=u.useRef(!1),{escapeKey:S,outsidePress:x}=Xa(h),{escapeKey:E,outsidePress:C}=Xa(g),R=u.useRef(!1),D=$r((e=>{var t;if(!n||!i||!s||"Escape"!==e.key)return;if(R.current)return;const a=null==(t=o.current.floatingContext)?void 0:t.nodeId,l=m?ya(m.nodesRef.current,a):[];if(!S&&(e.stopPropagation(),l.length>0)){let e=!0;if(l.forEach((t=>{var n;null==(n=t.context)||!n.open||t.context.dataRef.current.__escapeKeyBubbles||(e=!1)})),!e)return}r(!1,function(e){return"nativeEvent"in e}(e)?e.nativeEvent:e,"escape-key")})),_=$r((e=>{var t;const n=()=>{var t;D(e),null==(t=En(e))||t.removeEventListener("keydown",n)};null==(t=En(e))||t.addEventListener("keydown",n)})),O=$r((e=>{var t;const n=y.current;y.current=!1;const i=w.current;if(w.current=!1,"click"===c&&i)return;if(n)return;if("function"==typeof b&&!b(e))return;const s=En(e),l="["+ga("inert")+"]",u=Sn(a.floating).querySelectorAll(l);let d=Kt(s)?s:null;for(;d&&!on(d);){const e=cn(d);if(on(e)||!Kt(e))break;d=e}if(u.length&&Kt(s)&&!s.matches("html,body")&&!hn(s,a.floating)&&Array.from(u).every((e=>!hn(d,e))))return;if(Zt(s)&&A){const t=s.clientWidth>0&&s.scrollWidth>s.clientWidth,n=s.clientHeight>0&&s.scrollHeight>s.clientHeight;let r=n&&e.offsetX>s.clientWidth;if(n&&"rtl"===sn(s).direction&&(r=e.offsetX<=s.offsetWidth-s.clientWidth),r||t&&e.offsetY>s.clientHeight)return}const p=null==(t=o.current.floatingContext)?void 0:t.nodeId,f=m&&ya(m.nodesRef.current,p).some((t=>{var n;return xn(e,null==(n=t.context)?void 0:n.elements.floating)}));if(xn(e,a.floating)||xn(e,a.domReference)||f)return;const h=m?ya(m.nodesRef.current,p):[];if(h.length>0){let e=!0;if(h.forEach((t=>{var n;null==(n=t.context)||!n.open||t.context.dataRef.current.__outsidePressBubbles||(e=!1)})),!e)return}r(!1,e,"outside-press")})),I=$r((e=>{var t;const n=()=>{var t;O(e),null==(t=En(e))||t.removeEventListener(c,n)};null==(t=En(e))||t.addEventListener(c,n)}));u.useEffect((()=>{if(!n||!i)return;o.current.__escapeKeyBubbles=S,o.current.__outsidePressBubbles=x;let e=-1;function t(e){r(!1,e,"ancestor-scroll")}function l(){window.clearTimeout(e),R.current=!0}function u(){e=window.setTimeout((()=>{R.current=!1}),an()?5:0)}const d=Sn(a.floating);s&&(d.addEventListener("keydown",E?_:D,E),d.addEventListener("compositionstart",l),d.addEventListener("compositionend",u)),b&&d.addEventListener(c,C?I:O,C);let p=[];return f&&(Kt(a.domReference)&&(p=dn(a.domReference)),Kt(a.floating)&&(p=p.concat(dn(a.floating))),!Kt(a.reference)&&a.reference&&a.reference.contextElement&&(p=p.concat(dn(a.reference.contextElement)))),p=p.filter((e=>{var t;return e!==(null==(t=d.defaultView)?void 0:t.visualViewport)})),p.forEach((e=>{e.addEventListener("scroll",t,{passive:!0})})),()=>{s&&(d.removeEventListener("keydown",E?_:D,E),d.removeEventListener("compositionstart",l),d.removeEventListener("compositionend",u)),b&&d.removeEventListener(c,C?I:O,C),p.forEach((e=>{e.removeEventListener("scroll",t)})),window.clearTimeout(e)}}),[o,a,s,b,c,n,r,f,i,S,x,D,E,_,O,C,I]),u.useEffect((()=>{y.current=!1}),[b,c]);const T=u.useMemo((()=>({onKeyDown:D,[Qa[p]]:e=>{d&&r(!1,e.nativeEvent,"reference-press")}})),[D,r,d,p]),A=u.useMemo((()=>({onKeyDown:D,onMouseDown(){w.current=!0},onMouseUp(){w.current=!0},[Ya[c]]:()=>{y.current=!0}})),[D,c]);return u.useMemo((()=>i?{reference:T,floating:A}:{}),[i,T,A])}(c,{outsidePress:e=>{var t;if(e.currentTarget instanceof Element){const n=e.currentTarget;let r=n.id;if("path"===n.nodeName&&(r=(null==(t=n.parentElement)?void 0:t.id)||""),a.includes(r))return!1}return!0}}),g=io(c,{listRef:o,activeIndex:n,onNavigate:r,virtual:!0,loop:!0,disabledIndices:i.current}),{getReferenceProps:m,getFloatingProps:v,getItemProps:b}=function(e){void 0===e&&(e=[]);const t=e.map((e=>null==e?void 0:e.reference)),n=e.map((e=>null==e?void 0:e.floating)),r=e.map((e=>null==e?void 0:e.item)),a=u.useCallback((t=>eo(t,e,"reference")),t),o=u.useCallback((t=>eo(t,e,"floating")),n),i=u.useCallback((t=>eo(t,e,"item")),r);return u.useMemo((()=>({getReferenceProps:a,getFloatingProps:o,getItemProps:i})),[a,o,i])}([f,h,g]);return{refs:s,floatingStyles:l,context:c,getReferenceProps:m,getFloatingProps:v,getItemProps:b}},Vo=({item:e,handleRemoveMultiValue:t,index:n,handleEditMultiValuePill:r})=>{var a,o;const i=(0,qe.useStyles2)(jo),s=(0,u.useCallback)((t=>{t.stopPropagation(),t.preventDefault(),r(e)}),[r,e]),l=(0,u.useCallback)((e=>{"Enter"===e.key&&s(e)}),[s]),c=(0,u.useCallback)((n=>{n.stopPropagation(),n.preventDefault(),t(e)}),[t,e]),d=(0,u.useCallback)((e=>{"Enter"===e.key&&c(e)}),[c]);return p().createElement("div",{className:(0,rt.cx)(i.basePill,i.valuePill),onClick:s,onKeyDown:l,tabIndex:0,id:`${e.value}-${n}`},null!=(a=e.label)?a:e.value,p().createElement(qe.Button,{onClick:c,onKeyDownCapture:d,fill:"text",size:"sm",variant:"secondary",className:i.removeButton,tooltip:`Remove filter value - ${null!=(o=e.label)?o:e.value}`},p().createElement(qe.Icon,{name:"times",size:"md",id:`${e.value}-${n}-close-icon`})))},jo=e=>({basePill:(0,rt.css)({display:"flex",alignItems:"center",background:e.colors.action.disabledBackground,border:`1px solid ${e.colors.border.weak}`,padding:e.spacing(.125,1,.125,1),color:e.colors.text.primary,overflow:"hidden",whiteSpace:"nowrap",minHeight:e.spacing(2.75),...e.typography.bodySmall,cursor:"pointer"}),valuePill:(0,rt.css)({background:e.colors.action.selected,padding:e.spacing(.125,0,.125,1)}),removeButton:(0,rt.css)({marginInline:e.spacing(.5),height:"100%",padding:0,cursor:"pointer","&:hover":{color:e.colors.text.primary}})}),Fo=(0,u.forwardRef)((function({filter:e,model:t,isAlwaysWip:n,handleChangeViewMode:r,focusOnWipInputRef:a,populateInputOnEdit:o},i){var s,l,c,d;const[f,h]=(0,u.useState)(!1),[g,m]=(0,u.useState)([]),[v,b]=(0,u.useState)(!1),[y,w]=(0,u.useState)(!1),[S,x]=(0,u.useState)(""),[E,C]=(0,u.useState)(null),[R,D]=(0,u.useState)(n?"key":"value"),[_,O]=(0,u.useState)(!n&&"value"===R),I=(0,qe.useStyles2)($o),[T,A]=(0,u.useState)([]),[k,P]=(0,u.useState)({}),L=null==(s=t.state.allowCustomValue)||s,N=(0,u.useRef)(null),M=ri((null==e?void 0:e.operator)||""),B=M&&"value"===R,V=(0,u.useId)(),j=(0,u.useRef)([]),F=(0,u.useRef)([]),$=(0,u.useRef)(n?"key":"value"),z=(0,u.useMemo)((()=>Mt(g)),[g]),U=(0,u.useMemo)((()=>!n&&t.state.filters.at(-1)===e),[e,n,t.state.filters]),W=(0,u.useCallback)((()=>{n&&(t._addWip(),D("key"),x(""))}),[t,n]),H=(0,u.useCallback)(((e,t,n,r)=>{if(n.length){const r=[],a=[];n.forEach((e=>{var t;r.push(null!=(t=e.label)?t:e.value),a.push(e.value)})),e._updateFilter(t,{valueLabels:r,values:a,value:a[0]}),A([])}r||setTimeout((()=>{var e;return null==(e=Y.domReference.current)?void 0:e.focus()}))}),[]),G=(0,u.useCallback)((e=>{A((t=>t.some((t=>t.value===e.value))?t.filter((t=>t.value!==e.value)):[...t,e]))}),[]),q=(0,u.useCallback)(((n,a,o)=>{h(n),o&&["outside-press","escape-key"].includes(o)&&(B&&H(t,e,T),W(),null==r||r())}),[e,T,r,H,W,B,t]),Q=(0,u.useMemo)((()=>[V,...T.reduce(((e,t,n)=>[...e,`${t.value}-${n}`,`${t.value}-${n}-close-icon`]),[])]),[V,T]),{refs:Y,floatingStyles:X,context:K,getReferenceProps:Z,getFloatingProps:J,getItemProps:ee}=Bo({open:f,onOpenChange:q,activeIndex:E,setActiveIndex:C,outsidePressIdsToIgnore:Q,listRef:j,disabledIndicesRef:F});(0,u.useImperativeHandle)(i,(()=>()=>{var e;return null==(e=Y.domReference.current)?void 0:e.focus()}),[Y.domReference]);const te=(0,u.useCallback)((e=>{A((t=>t.filter((t=>t.value!==e.value)))),setTimeout((()=>{var e;return null==(e=Y.domReference.current)?void 0:e.focus()}))}),[Y.domReference]),ne=(e=>e.flatMap((e=>e.options?[e,...e.options]:[e])))(Ci(z(_?"":S)));L&&"operator"!==R&&S&&ne.push({value:S.trim(),label:S.trim(),isCustom:!0});const re=t.state.onAddCustomValue,ae=((e,t,n)=>{var r,a,o,i;let s=182;const l=[],c=[];for(let t=0;ts&&(s=d)}return t.current=[...l],n.current=[...c],s})(ne,j,F),oe=(0,u.useCallback)((async n=>{var r;w(!1),b(!0),m([]);let a=[];try{if("key"===n?a=await t._getKeys(null):"operator"===n?a=t._getOperators():"value"===n&&(a=await t._getValuesFor(e)),$.current!==n)return;m(a),(null==(r=a[0])?void 0:r.group)?C(1):C(0)}catch(e){w(!0)}b(!1)}),[e,t]),ie=function(e){return Eo({observeElementRect:ho,observeElementOffset:vo,scrollToFn:yo,...e})}({count:ne.length,getScrollElement:()=>Y.floating.current,estimateSize:e=>ne[e].description?60:38,overscan:5}),se=(0,u.useCallback)(((r,o)=>{if("Backspace"===r.key&&!S){if("value"===R){if(o&&T.length)return void A((e=>{const t=[...e];return t.splice(-1,1),t}));if(null==e?void 0:e.origin)return;return void D("operator")}null==a||a(),t._handleComboboxBackspace(e),n&&W()}}),[S,R,t,e,n,T.length,W,a]),le=(0,u.useCallback)(((n,a)=>{var o;"Tab"!==n.key||n.shiftKey||(a&&(n.preventDefault(),H(t,e,T),null==(o=Y.domReference.current)||o.focus()),null==r||r(),W())}),[e,T,r,H,W,t,Y.domReference]),ce=(0,u.useCallback)(((n,a)=>{"Tab"===n.key&&n.shiftKey&&(a&&(n.preventDefault(),H(t,e,T,!0)),null==r||r(),W())}),[e,T,r,H,W,t]),ue=(0,u.useCallback)(((n,i)=>{if("Enter"===n.key&&null!=E){if(!ne[E])return;const n=ne[E];i?(G(n),x("")):(t._updateFilter(e,Po({filterInputType:R,item:n,filter:e,setFilterMultiValues:A,onAddCustomValue:re})),Mo({populateInputOnEdit:o,item:n,filterInputType:R,setInputValue:x,filter:e}),Ao(R,D,r,Y.domReference.current,!U&&void 0),C(null),U&&(null==a||a()))}}),[E,ne,G,t,e,R,o,r,Y.domReference,U,a,re]),de=(0,u.useCallback)((e=>{var t;const n=e.label||e.value;A((t=>t.filter((t=>t.value!==e.value)))),O(!0),x(n),null==(t=Y.domReference.current)||t.focus(),setTimeout((()=>{var e;null==(e=Y.domReference.current)||e.select()}))}),[Y.domReference]);(0,u.useEffect)((()=>{f&&oe(R)}),[f,R]),(0,u.useEffect)((()=>{var t,r,a,i;if(!n){if(M&&(null==(t=null==e?void 0:e.values)?void 0:t.length)){const t=e.values.reduce(((t,n,r)=>{var a;return[...t,{label:(null==(a=e.valueLabels)?void 0:a[r])||n,value:n}]}),[]);A(t)}!M&&o&&(x(null!=(a=null==(r=null==e?void 0:e.valueLabels)?void 0:r[0])?a:(null==e?void 0:e.value)||""),setTimeout((()=>{var e;null==(e=Y.domReference.current)||e.select()}))),null==(i=Y.domReference.current)||i.focus()}}),[]),(0,u.useEffect)((()=>{B&&T&&setTimeout((()=>P({})))}),[T,B]),(0,u.useLayoutEffect)((()=>{$.current&&($.current=R)}),[R]),(0,u.useLayoutEffect)((()=>{var e,t;null!==E&&ie.range&&(E>(null==(e=ie.range)?void 0:e.endIndex)||E<(null==(t=ie.range)?void 0:t.startIndex))&&ie.scrollToIndex(E)}),[E,ie]);const pe=null!=(l=null==e?void 0:e.keyLabel)?l:null==e?void 0:e.key;return p().createElement("div",{className:I.comboboxWrapper},e?p().createElement("div",{className:I.pillWrapper},(null==e?void 0:e.key)?p().createElement("div",{className:(0,rt.cx)(I.basePill,I.keyPill)},pe):null,(null==e?void 0:e.key)&&(null==e?void 0:e.operator)&&"operator"!==R?p().createElement("div",{id:V,className:(0,rt.cx)(I.basePill,!e.origin&&I.operatorPill,e.origin&&I.keyPill,V),"aria-label":"Edit filter operator",tabIndex:e.origin?-1:0,onClick:t=>{e.origin?null==r||r():(t.stopPropagation(),x(""),ko("operator",D,void 0,Y.domReference.current))},onKeyDown:t=>{e.origin||(ce(t,M),"Enter"===t.key&&(x(""),ko("operator",D,void 0,Y.domReference.current)))},...!e.origin&&{role:"button"}},e.operator):null,p().createElement("div",{ref:N}),B?T.map(((e,t)=>p().createElement(Vo,{key:`${e.value}-${t}`,item:e,index:t,handleRemoveMultiValue:te,handleEditMultiValuePill:de}))):null):null,p().createElement("input",{...Z({ref:Y.setReference,onChange:function(e){const t=e.target.value;x(t),C(0),_&&O(!1)},value:S,placeholder:No(e,R,B,n),"aria-autocomplete":"list",onKeyDown(e){f?("operator"===R&&ce(e),se(e,B),le(e,B),ue(e,B)):h(!0)}}),className:(0,rt.cx)(I.inputStyle,{[I.loadingInputPadding]:!v}),onClick:e=>{e.stopPropagation(),h(!0)},onFocus:()=>{h(!0)}}),v?p().createElement(qe.Spinner,{className:I.loadingIndicator,inline:!0}):null,p().createElement(ja,null,f&&p().createElement(qa,{context:K,initialFocus:-1,visuallyHiddenDismiss:!0,modal:!1},p().createElement(p().Fragment,null,p().createElement("div",{style:{...X,width:`${y?366:ae}px`,transform:B?`translate(${(null==(c=N.current)?void 0:c.getBoundingClientRect().left)||0}px, ${((null==(d=Y.domReference.current)?void 0:d.getBoundingClientRect().bottom)||0)+10}px )`:X.transform},ref:Y.setFloating,className:I.dropdownWrapper,tabIndex:-1},p().createElement("div",{style:{height:`${ie.getTotalSize()||38}px`},...J(),tabIndex:-1},v?p().createElement(Do,null):y?p().createElement(Oo,{handleFetchOptions:()=>oe(R)}):ne.length||L&&"operator"!==R&&S?ie.getVirtualItems().map((n=>{var a;const i=ne[n.index],s=n.index;if(i.options)return p().createElement("div",{key:`${i.label}+${s}`,className:(0,rt.cx)(I.optionGroupLabel,I.groupTopBorder),style:{height:`${n.size}px`,transform:`translateY(${n.start}px)`}},p().createElement(qe.Text,{weight:"bold",variant:"bodySmall",color:"secondary"},i.label));const l=ne[n.index+1],c=l&&!l.group&&!l.options&&i.group;return p().createElement(Co,{...ee({key:`${i.value}-${s}`,ref(e){j.current[s]=e},onClick(n){var a;"value"!==R&&n.stopPropagation(),B?(n.preventDefault(),n.stopPropagation(),G(i),x(""),null==(a=Y.domReference.current)||a.focus()):(t._updateFilter(e,Po({filterInputType:R,item:i,filter:e,setFilterMultiValues:A,onAddCustomValue:re})),Mo({populateInputOnEdit:o,item:i,filterInputType:R,setInputValue:x,filter:e}),Ao(R,D,r,Y.domReference.current,!1))}}),active:E===s,addGroupBottomBorder:c,style:{height:`${n.size}px`,transform:`translateY(${n.start}px)`},"aria-setsize":ne.length,"aria-posinset":n.index+1,isMultiValueEdit:B,checked:T.some((e=>e.value===i.value))},p().createElement("span",null,i.isCustom?"Use custom value: ":""," ",null!=(a=i.label)?a:i.value),i.description?p().createElement("div",{className:I.descriptionText},i.description):null)})):p().createElement(_o,null))),B&&!v&&!y&&ne.length?p().createElement(Io,{onApply:()=>{H(t,e,T)},floatingElement:Y.floating.current,maxOptionWidth:ae,menuHeight:Math.min(ie.getTotalSize(),300)}):null))))})),$o=e=>({comboboxWrapper:(0,rt.css)({display:"flex",flexWrap:"wrap"}),pillWrapper:(0,rt.css)({display:"flex",alignItems:"center",flexWrap:"wrap"}),basePill:(0,rt.css)({display:"flex",alignItems:"center",background:e.colors.action.disabledBackground,border:`1px solid ${e.colors.border.weak}`,padding:e.spacing(.125,1,.125,1),color:e.colors.text.primary,overflow:"hidden",whiteSpace:"nowrap",minHeight:e.spacing(2.75),...e.typography.bodySmall,cursor:"pointer"}),keyPill:(0,rt.css)({fontWeight:e.typography.fontWeightBold,cursor:"default"}),operatorPill:(0,rt.css)({"&:hover":{background:e.colors.action.hover}}),dropdownWrapper:(0,rt.css)({backgroundColor:e.colors.background.primary,color:e.colors.text.primary,boxShadow:e.shadows.z2,overflowY:"auto",zIndex:e.zIndex.dropdown}),inputStyle:(0,rt.css)({paddingBlock:0,"&:focus":{outline:"none"}}),loadingIndicator:(0,rt.css)({color:e.colors.text.secondary,marginLeft:e.spacing(.5)}),loadingInputPadding:(0,rt.css)({paddingRight:e.spacing(2.5)}),optionGroupLabel:(0,rt.css)({padding:e.spacing(1),position:"absolute",top:0,left:0,width:"100%"}),groupTopBorder:(0,rt.css)({"&:not(:first-child)":{borderTop:`1px solid ${e.colors.border.weak}`}}),descriptionText:(0,rt.css)({...e.typography.bodySmall,color:e.colors.text.secondary,paddingTop:e.spacing(.5)})});function zo({filter:e,model:t,readOnly:n,focusOnWipInputRef:r}){var a,o,i;const s=(0,qe.useStyles2)(Uo),[l,c]=(0,u.useState)(!0),[d,f]=(0,u.useState)(!1),h=(0,u.useRef)(null),[g,m]=(0,u.useState)(!1),v=null!=(a=e.keyLabel)?a:e.key,b=(null==(o=e.valueLabels)?void 0:o.join(", "))||(null==(i=e.values)?void 0:i.join(", "))||e.value,y=(0,u.useCallback)(((e,t)=>{null==e||e.stopPropagation(),n||(f(null!=t?t:!l),c(!l))}),[n,l]);if((0,u.useEffect)((()=>{var e;d&&(null==(e=h.current)||e.focus(),f(!1))}),[d]),(0,u.useEffect)((()=>{e.forceEdit&&l&&(c(!1),t._updateFilter(e,{forceEdit:void 0}))}),[e,t,l]),(0,u.useEffect)((()=>{l&&m((e=>!e&&e))}),[l]),l){const a=p().createElement("span",{className:s.pillText},v," ",e.operator," ",b);return p().createElement("div",{className:(0,rt.cx)(s.combinedFilterPill,n&&s.readOnlyCombinedFilter),onClick:e=>{e.stopPropagation(),m(!0),y()},onKeyDown:e=>{"Enter"===e.key&&(m(!0),y())},role:"button","aria-label":`Edit filter with key ${v}`,tabIndex:0,ref:h},b.length<20?a:p().createElement(qe.Tooltip,{content:p().createElement("div",{className:s.tooltipText},b),placement:"top"},a),n||e.origin?null:p().createElement(qe.IconButton,{onClick:n=>{n.stopPropagation(),t._removeFilter(e),setTimeout((()=>null==r?void 0:r()))},onKeyDownCapture:n=>{"Enter"===n.key&&(n.preventDefault(),n.stopPropagation(),t._removeFilter(e),setTimeout((()=>null==r?void 0:r())))},name:"times",size:"md",className:s.pillIcon,tooltip:`Remove filter with key ${v}`}),e.origin&&!e.originalValue&&p().createElement(qe.IconButton,{name:"info-circle",size:"md",className:s.pillIcon,tooltip:`This is a ${e.origin} injected filter`}),e.origin&&e.originalValue&&p().createElement(qe.IconButton,{onClick:n=>{n.stopPropagation(),t.restoreOriginalFilter(e)},onKeyDownCapture:n=>{"Enter"===n.key&&(n.preventDefault(),n.stopPropagation(),t.restoreOriginalFilter(e))},name:"history",size:"md",className:s.pillIcon,tooltip:"Restore filter to its original value"}))}return p().createElement(Fo,{filter:e,model:t,handleChangeViewMode:y,focusOnWipInputRef:r,populateInputOnEdit:g})}const Uo=e=>({combinedFilterPill:(0,rt.css)({display:"flex",alignItems:"center",background:e.colors.action.selected,borderRadius:e.shape.radius.default,border:`1px solid ${e.colors.border.weak}`,padding:e.spacing(.125,0,.125,1),color:e.colors.text.primary,overflow:"hidden",whiteSpace:"nowrap",minHeight:e.spacing(2.75),...e.typography.bodySmall,fontWeight:e.typography.fontWeightBold,cursor:"pointer","&:hover":{background:e.colors.action.hover}}),readOnlyCombinedFilter:(0,rt.css)({paddingRight:e.spacing(1),cursor:"text","&:hover":{background:e.colors.action.selected}}),pillIcon:(0,rt.css)({marginInline:e.spacing(.5),cursor:"pointer","&:hover":{color:e.colors.text.primary}}),pillText:(0,rt.css)({maxWidth:"200px",width:"100%",textOverflow:"ellipsis",overflow:"hidden"}),tooltipText:(0,rt.css)({textAlign:"center"})}),Wo=(0,u.forwardRef)((function({model:e},t){const{_wip:n}=e.useState();return(0,u.useLayoutEffect)((()=>{n||e._addWip()}),[n]),p().createElement(Fo,{model:e,filter:n,isAlwaysWip:!0,ref:t})})),Ho=(0,u.memo)((function({model:e}){const{baseFilters:t,filters:n,readOnly:r}=e.useState(),a=(0,qe.useStyles2)(Go),o=(0,u.useRef)();return p().createElement("div",{className:(0,rt.cx)(a.comboboxWrapper,{[a.comboboxFocusOutline]:!r}),onClick:()=>{var e;null==(e=o.current)||e.call(o)}},p().createElement(qe.Icon,{name:"filter",className:a.filterIcon,size:"lg"}),null==t?void 0:t.map(((t,n)=>t.origin?p().createElement(zo,{key:`${n}-${t.key}`,filter:t,model:e,focusOnWipInputRef:o.current}):null)),n.map(((t,n)=>p().createElement(zo,{key:`${n}-${t.key}`,filter:t,model:e,readOnly:r||t.readOnly,focusOnWipInputRef:o.current}))),r?null:p().createElement(Wo,{model:e,ref:o}))})),Go=e=>({comboboxWrapper:(0,rt.css)({display:"flex",flexWrap:"wrap",alignItems:"center",columnGap:e.spacing(1),rowGap:e.spacing(.5),minHeight:e.spacing(4),backgroundColor:e.components.input.background,border:`1px solid ${e.colors.border.strong}`,borderRadius:e.shape.radius.default,paddingInline:e.spacing(1),paddingBlock:e.spacing(.5),flexGrow:1}),comboboxFocusOutline:(0,rt.css)({"&:focus-within":{outline:"2px dotted transparent",outlineOffset:"2px",boxShadow:`0 0 0 2px ${e.colors.background.canvas}, 0 0 0px 4px ${e.colors.primary.main}`,transitionTimingFunction:"cubic-bezier(0.19, 1, 0.22, 1)",transitionDuration:"0.2s",transitionProperty:"outline, outline-offset, box-shadow",zIndex:2}}),filterIcon:(0,rt.css)({color:e.colors.text.secondary,alignSelf:"center"})}),qo=Object.fromEntries(Object.entries(o.scopeFilterOperatorMap).map((([e,t])=>[t,e])));function Qo(e){return new Set(["equals","not-equals","one-of","not-one-of"]).has(e)}function Yo(e,t,n){var r,a;const i=e.get(n.key);i&&function(e,t){const n=o.scopeFilterOperatorMap[e];if(!Qo(n)||!Qo(t))return!1;if(n.includes("not")&&!t.includes("not")||!n.includes("not")&&t.includes("not"))return!1;return!0}(i.operator,n.operator)?function(e,t){var n,r,a,o;const i=null!=(n=t.values)?n:[t.value];for(const t of i)(null==(r=e.values)?void 0:r.includes(t))||null==(a=e.values)||a.push(t);if(1===(null==(o=e.values)?void 0:o.length))return;"equals"===t.operator&&e.operator===qo.equals?e.operator=qo["one-of"]:"not-equals"===t.operator&&e.operator===qo["not-equals"]&&(e.operator=qo["not-one-of"])}(i,n):i?t.push({key:n.key,operator:qo[n.operator],value:n.value,values:null!=(a=n.values)?a:[n.value],origin:Xo.Scopes}):e.set(n.key,{key:n.key,operator:qo[n.operator],value:n.value,values:null!=(r=n.values)?r:[n.value],origin:Xo.Scopes})}var Xo=(e=>(e.Scopes="scopes",e.Dashboards="dashboards",e))(Xo||{});const Ko=[{value:"=",description:"Equals"},{value:"!=",description:"Not equal"},{value:"=|",description:"One of. Use to filter on multiple values.",isMulti:!0},{value:"!=|",description:"Not one of. Use to exclude multiple values.",isMulti:!0},{value:"=~",description:"Matches regex",isRegex:!0},{value:"!~",description:"Does not match regex",isRegex:!0},{value:"<",description:"Less than"},{value:">",description:"Greater than"}];class Zo extends I{constructor(e){var t,n,r,a,o;super({type:"adhoc",name:null!=(t=e.name)?t:"Filters",filters:[],datasource:null,applyMode:"auto",filterExpression:null!=(o=e.filterExpression)?o:Jo(e.expressionBuilder,[...null!=(r=null==(n=e.baseFilters)?void 0:n.filter((e=>e.origin)))?r:[],...null!=(a=e.filters)?a:[]]),...e}),this._scopedVars={__sceneObject:It(this)},this._dataSourceSrv=(0,i.getDataSourceSrv)(),this._urlSync=new zt(this),this._activationHandler=()=>{var e,t;this._scopesBridge=Xi.getScopesBridge(this);const n=null==(e=this._scopesBridge)?void 0:e.getValue();n&&this._updateScopesFilters(n);const r=null==(t=this._scopesBridge)?void 0:t.subscribeToValue(((e,t)=>{var n;this._updateScopesFilters(e,null==(n=this._scopesBridge)?void 0:n.isLoading())}));return()=>{null==r||r.unsubscribe()}},this._updateScopesFilters=(e,t)=>{var n,r;if(!e.length)return void this.setState({baseFilters:null==(n=this.state.baseFilters)?void 0:n.filter((e=>"scopes"!==e.origin))});const a=function(e){const t=new Map,n=[],r=e.flatMap((e=>e.spec.filters));for(const e of r)Yo(t,n,e);return[...t.values(),...n]}(e);let o=a;const i=[],s=[];if(null==(r=this.state.baseFilters)||r.forEach((e=>{"scopes"===e.origin?i.push(e):s.push(e)})),!a.length)return;const l=i.filter((e=>{var t;return null==(t=e.originalValue)?void 0:t.length})),c=l.map((e=>e.key)),u=a.map((e=>e.key));o=[...l.filter((e=>u.includes(e.key))),...a.filter((e=>!c.includes(e.key)))],this.setState({baseFilters:[...s,...o]})},"auto"===this.state.applyMode&&function(e){if(e.addActivationHandler((()=>(He.add(e),()=>He.delete(e)))),We)return;const t=(0,i.getTemplateSrv)();(null==t?void 0:t.getAdhocFilters)&&(We=t.getAdhocFilters,t.getAdhocFilters=function(e){var n;if(0===He.size)return We.call(t,e);const r=(0,i.getDataSourceSrv)().getInstanceSettings(e);if(!r)return[];for(const e of He.values())if((null==(n=e.state.datasource)?void 0:n.uid)===r.uid)return e.state.filters;return[]}.bind(t))}(this),this.addActivationHandler(this._activationHandler)}setState(e){var t,n,r;let a=!1;if((e.filters&&e.filters!==this.state.filters||e.baseFilters&&e.baseFilters!==this.state.baseFilters)&&!e.filterExpression){const o=null!=(t=e.filters)?t:this.state.filters,i=null!=(n=e.baseFilters)?n:this.state.baseFilters;e.filterExpression=Jo(this.state.expressionBuilder,[...null!=(r=null==i?void 0:i.filter((e=>e.origin)))?r:[],...null!=o?o:[]]),a=e.filterExpression!==this.state.filterExpression}super.setState(e),a&&this.publishEvent(new te(this),!0)}updateFilters(e,t){var n,r;let a,o=!1;e&&e!==this.state.filters&&(a=Jo(this.state.expressionBuilder,[...null!=(r=null==(n=this.state.baseFilters)?void 0:n.filter((e=>e.origin)))?r:[],...e]),o=a!==this.state.filterExpression),super.setState({filters:e,filterExpression:a}),(o&&!0!==(null==t?void 0:t.skipPublish)||(null==t?void 0:t.forcePublish))&&this.publishEvent(new te(this),!0)}restoreOriginalFilter(e){var t;const n={originalValue:void 0};(null==(t=e.originalValue)?void 0:t.length)&&(n.value=e.originalValue[0],n.values=e.originalValue,n.valueLabels=e.originalValue),this._updateFilter(e,n)}getValue(){return this.state.filterExpression}_updateFilter(e,t){var n;const{baseFilters:r,filters:a,_wip:o}=this.state;if(e.origin){const a=e.values?e.values:[e.value],o=t.values||(t.value?[t.value]:void 0),i=t.hasOwnProperty("originalValue");i||!o||e.originalValue||(0,k.isEqual)(a,o)||(t.originalValue=a),!i&&(0,k.isEqual)(o,e.originalValue)&&(t.originalValue=void 0);const s=null!=(n=null==r?void 0:r.map((n=>n===e?{...n,...t}:n)))?n:[];return void this.setState({baseFilters:s})}if(e===o)return void("value"in t&&""!==t.value?this.setState({filters:[...a,{...o,...t}],_wip:void 0}):this.setState({_wip:{...e,...t}}));const i=this.state.filters.map((n=>n===e?{...n,...t}:n));this.setState({filters:i})}_removeFilter(e){e!==this.state._wip?this.setState({filters:this.state.filters.filter((t=>t!==e))}):this.setState({_wip:void 0})}_removeLastFilter(){const e=this.state.filters.at(-1);e&&this._removeFilter(e)}_handleComboboxBackspace(e){var t;if(this.state.filters.length){let t=this.state.filters.length-1;e!==this.state._wip&&(t=-1),this.setState({filters:this.state.filters.reduce(((n,r,a)=>a===t?[...n,{...r,forceEdit:!0}]:r===e?n:[...n,r]),[])})}else if(null==(t=this.state.baseFilters)?void 0:t.length){let t=this.state.baseFilters.length-1;e!==this.state._wip&&(t=-1),this.setState({baseFilters:this.state.baseFilters.reduce(((n,r,a)=>a===t?[...n,{...r,forceEdit:!0}]:r===e?n:[...n,r]),[])})}}async _getKeys(e){var t,n,r,a;const o=await(null==(n=(t=this.state).getTagKeysProvider)?void 0:n.call(t,this,e));if(o&&o.replace)return xi(o.values).map(ti);if(this.state.defaultKeys)return this.state.defaultKeys.map(ti);const i=await this._dataSourceSrv.get(this.state.datasource,this._scopedVars);if(!i||!i.getTagKeys)return[];const s=this.state.filters.filter((t=>t.key!==e)).concat(null!=(r=this.state.baseFilters)?r:[]),l=Xi.getTimeRange(this).state.value,c=this.state.useQueriesAsFilterForOptions?mi(this):void 0,u=await i.getTagKeys({filters:s,queries:c,timeRange:l,scopes:null==(a=this._scopesBridge)?void 0:a.getValue(),...Ct(this)});Ei(u)&&this.setState({error:u.error.message});let d=xi(u);o&&(d=d.concat(xi(o.values)));const p=this.state.tagKeyRegexFilter;return p&&(d=d.filter((e=>e.text.match(p)))),d.map(ti)}async _getValuesFor(e){var t,n,r,a,o;const i=await(null==(n=(t=this.state).getTagValuesProvider)?void 0:n.call(t,this,e));if(i&&i.replace)return xi(i.values).map(ti);const s=await this._dataSourceSrv.get(this.state.datasource,this._scopedVars);if(!s||!s.getTagValues)return[];const l=null!=(a=null==(r=this.state.baseFilters)?void 0:r.filter((t=>t.origin&&t.key!==e.key)))?a:[],c=this.state.filters.filter((t=>t.key!==e.key)).concat(l),u=Xi.getTimeRange(this).state.value,d=this.state.useQueriesAsFilterForOptions?mi(this):void 0;let p=null==(o=this._scopesBridge)?void 0:o.getValue();"scopes"===e.origin&&(p=null==p?void 0:p.map((t=>({...t,spec:{...t.spec,filters:t.spec.filters.filter((t=>t.key!==e.key))}}))));const f=await s.getTagValues({key:e.key,filters:c,timeRange:u,queries:d,scopes:p,...Ct(this)});Ei(f)&&this.setState({error:f.error.message});let h=xi(f);return i&&(h=h.concat(xi(i.values))),h.map(ti)}_addWip(){this.setState({_wip:{key:"",value:"",operator:"=",condition:""}})}_getOperators(){const{supportsMultiValueOperators:e,allowCustomValue:t=!0}=this.state;return Ko.filter((({isMulti:n,isRegex:r})=>!(!e&&n)&&!(!t&&r))).map((({value:e,description:t})=>({label:e,value:e,description:t})))}}function Jo(e,t){return(null!=e?e:pi)(null!=t?t:[])}Zo.Component=function({model:e}){const{filters:t,readOnly:n,addFilterButtonText:r}=e.useState(),a=(0,qe.useStyles2)(ei);if("combobox"===e.state.layout)return p().createElement(Ho,{model:e});return p().createElement("div",{className:a.wrapper},t.filter((e=>!e.hidden)).map(((t,n)=>p().createElement(p().Fragment,{key:n},p().createElement(jt,{filter:t,model:e})))),!n&&p().createElement($t,{model:e,key:"'builder",addFilterButtonText:r}))};const ei=e=>({wrapper:(0,rt.css)({display:"flex",flexWrap:"wrap",alignItems:"flex-end",columnGap:e.spacing(2),rowGap:e.spacing(1)})});function ti(e){const{text:t,value:n}=e,r={label:String(t),value:String(null!=n?n:t)};return"group"in e&&(r.group=e.group),"meta"in e&&(r.meta=e.meta),r}function ni(e){return""!==e.key&&""!==e.operator&&""!==e.value}function ri(e){const t=Ko.find((t=>t.value===e));return!!t&&Boolean(t.isMulti)}class ai{constructor(){this._resultsMap=new Map,this._prevLayers=[]}getMergedStream(e){(function(e,t){if(e.length!==t.length)return!0;for(let n=0;ne.getResultsStream())),n=[];for(const t of e)n.push(t.activate());return(0,f.merge)(t).pipe((0,f.mergeAll)(),(0,f.filter)((e=>this._resultsMap.get(e.origin.state.key)!==e)),(0,f.map)((e=>(this._resultsMap.set(e.origin.state.key,e),this._resultsMap.values()))),(0,f.finalize)((()=>{n.forEach((e=>e()))})))}}let oi=100;function ii(){return"SQR"+oi++}class si extends I{constructor(e){super(e),this._dataLayersMerger=new ai,this._variableValueRecorder=new je,this._results=new f.ReplaySubject(1),this._scopedVars={__sceneObject:It(this)},this._variableDependency=new Di(this,{statePaths:["queries","datasource","minInterval"],onVariableUpdateCompleted:this.onVariableUpdatesCompleted.bind(this),onAnyVariableChanged:this.onAnyVariableChanged.bind(this)}),this.onDataReceived=e=>{const t=(0,o.preProcessPanelData)(e,this.state.data);this._resultAnnotations=e.annotations;const n=this._combineDataLayers(t);let r=this.state._hasFetchedData;r||t.state===$.Loading||(r=!0),this.setState({data:n,_hasFetchedData:r}),this._results.next({origin:this,data:n})},this.addActivationHandler((()=>this._onActivate()))}getResultsStream(){return this._results}_onActivate(){if(this.isQueryModeAuto()){const e=Xi.getTimeRange(this),t=Xi.getScopesBridge(this),n=this.getClosestExtraQueryProviders();for(const e of n)this._subs.add(e.subscribeToState(((t,n)=>{e.shouldRerun(n,t,this.state.queries)&&this.runQueries()})));this.subscribeToScopesChanges(t),this.subscribeToTimeRangeChanges(e),this.shouldRunQueriesOnActivate()&&this.runQueries()}return this._dataLayersSub||this._handleDataLayers(),()=>this._onDeactivate()}_handleDataLayers(){const e=Xi.getDataLayers(this);0!==e.length&&(this._dataLayersSub=this._dataLayersMerger.getMergedStream(e).subscribe(this._onLayersReceived.bind(this)))}_onLayersReceived(e){var t,n,r,a,i;const s=Xi.getTimeRange(this),{dataLayerFilter:l}=this.state;let c,u=[],d=[];for(const r of e)for(let e of r.data.series)(null==(t=e.meta)?void 0:t.dataTopic)===o.DataTopic.Annotations&&(u=u.concat(e)),(null==(n=e.meta)?void 0:n.dataTopic)===o.DataTopic.AlertStates&&(d=d.concat(e));if((null==l?void 0:l.panelId)&&(u.length>0&&(u=function(e,t){var n;if(!Array.isArray(e)||0===e.length)return e;const r=Array.from({length:e.length},(()=>new Set));let a=0;for(const o of e){for(let e=0;e"panelId"===e.name)),l=o.fields.find((e=>"source"===e.name));if(l){s&&"dashboard"===l.values[e].type&&(i=[t.panelId,ze].includes(s.values[e]));const r=l.values[e].filter;if(r){const e=[...null!=(n=r.ids)?n:[],ze].includes(t.panelId);r.exclude?e&&(i=!1):e||(i=!1)}}i&&r[a].add(e)}a++}const o=[];a=0;for(const t of e){const e=r[a].size,n=[];for(const e of t.fields){const o=[];for(let n=0;n0))for(const e of d){const t=new o.DataFrameView(e);for(const e of t)if(e.panelId===l.panelId){c=e;break}}if(ci(u)&&ci(this._layerAnnotations)&&(0,k.isEqual)(c,null==(r=this.state.data)?void 0:r.alertState))return;this._layerAnnotations=u;const p=this.state.data?this.state.data:{...U,timeRange:s.state.value};this.setState({data:{...p,annotations:[...null!=(a=this._resultAnnotations)?a:[],...u],alertState:null!=c?c:null==(i=this.state.data)?void 0:i.alertState}})}onVariableUpdatesCompleted(){this.isQueryModeAuto()&&this.runQueries()}onAnyVariableChanged(e){this._adhocFiltersVar!==e&&this._groupByVar!==e&&this.isQueryModeAuto()&&(e instanceof Zo&&this._isRelevantAutoVariable(e)&&this.runQueries(),e instanceof Tt&&this._isRelevantAutoVariable(e)&&this.runQueries())}_isRelevantAutoVariable(e){var t,n;const r=null!=(t=this.state.datasource)?t:li(this.state.queries);return"auto"===e.state.applyMode&&(null==r?void 0:r.uid)===(null==(n=e.state.datasource)?void 0:n.uid)}shouldRunQueriesOnActivate(){return this._variableValueRecorder.hasDependenciesChanged(this)?(V(),!0):!this.state.data||!!this._isDataTimeRangeStale(this.state.data)}_isDataTimeRangeStale(e){const t=Xi.getTimeRange(this).state.value,n=e.timeRange;return(t.from.unix()!==n.from.unix()||t.to.unix()!==n.to.unix())&&(V(),!0)}_onDeactivate(){var e;this._querySub&&(this._querySub.unsubscribe(),this._querySub=void 0),this._dataLayersSub&&(this._dataLayersSub.unsubscribe(),this._dataLayersSub=void 0),null==(e=this._timeSub)||e.unsubscribe(),this._timeSub=void 0,this._timeSubRange=void 0,this._adhocFiltersVar=void 0,this._groupByVar=void 0,this._variableValueRecorder.recordCurrentDependencyValuesForSceneObject(this)}setContainerWidth(e){!this._containerWidth&&e>0?(this._containerWidth=e,this.state.maxDataPointsFromWidth&&!this.state.maxDataPoints&&setTimeout((()=>{this.isActive&&!this.state._hasFetchedData&&this.runQueries()}),0)):e>0&&(this._containerWidth=e)}isDataReadyToDisplay(){return Boolean(this.state._hasFetchedData)}subscribeToScopesChanges(e){e&&this._scopesSubBridge!==e&&(this._scopesSub&&this._scopesSub.unsubscribe(),this._scopesSubBridge=e,this._scopesSub=e.subscribeToValue((()=>{this.runWithTimeRangeAndScopes(Xi.getTimeRange(this),e)})))}subscribeToTimeRangeChanges(e){this._timeSubRange!==e&&(this._timeSub&&this._timeSub.unsubscribe(),this._timeSubRange=e,this._timeSub=e.subscribeToState((()=>{this.runWithTimeRangeAndScopes(e,Xi.getScopesBridge(this))})))}runQueries(){const e=Xi.getTimeRange(this),t=Xi.getScopesBridge(this);this.isQueryModeAuto()&&(this.subscribeToTimeRangeChanges(e),this.subscribeToScopesChanges(t)),this.runWithTimeRangeAndScopes(e,t)}getMaxDataPoints(){var e;return this.state.maxDataPoints?this.state.maxDataPoints:this.state.maxDataPointsFromWidth&&null!=(e=this._containerWidth)?e:500}cancelQuery(){var e;null==(e=this._querySub)||e.unsubscribe(),this._dataLayersSub&&(this._dataLayersSub.unsubscribe(),this._dataLayersSub=void 0),this.setState({data:{...this.state.data,state:$.Done}})}async runWithTimeRangeAndScopes(e,t){var n,r,a,o;if(!this.state.maxDataPoints&&this.state.maxDataPointsFromWidth&&!this._containerWidth)return;if(this._dataLayersSub||this._handleDataLayers(),null==(n=this._querySub)||n.unsubscribe(),this._variableDependency.hasDependencyInLoadingState())return V(),void this.setState({data:{...null!=(r=this.state.data)?r:U,state:$.Loading}});if((null==t?void 0:t.isLoading())&&(null==t?void 0:t.getValue().length))return V(),void this.setState({data:{...null!=(a=this.state.data)?a:U,state:$.Loading}});const{queries:s}=this.state;if(null==s?void 0:s.length)try{const n=null!=(o=this.state.datasource)?o:li(s),r=await Ve(n,this._scopedVars);this.findAndSubscribeToAdHocFilters(r.uid);const a=(0,i.getRunRequest)(),{primary:l,secondaries:c,processors:u}=this.prepareRequests(e,r,t);V(0,0,this.state.key);let d=a(r,l);if(c.length>0){const e=c.map((e=>a(r,e))),t=(e=>t=>t.pipe((0,f.mergeMap)((([t,...n])=>{const r=n.flatMap((n=>{var r,a;return null!=(a=null==(r=e.get(n.request.requestId))?void 0:r(t,n))?a:(0,f.of)(n)}));return(0,f.forkJoin)([(0,f.of)(t),...r])})),(0,f.map)((([e,...t])=>{var n;return{...e,series:[...e.series,...t.flatMap((e=>e.series))],annotations:[...null!=(n=e.annotations)?n:[],...t.flatMap((e=>{var t;return null!=(t=e.annotations)?t:[]}))]}}))))(u);d=(0,f.forkJoin)([d,...e]).pipe(t)}d=d.pipe(Me({type:"data",request:l,origin:this,cancel:()=>this.cancelQuery()})),this._querySub=d.subscribe(this.onDataReceived)}catch(e){console.error("PanelQueryRunner Error",e),this.onDataReceived({...U,...this.state.data,state:$.Error,errors:[(0,i.toDataQueryError)(e)]})}else this._setNoDataState()}clone(e){var t;const n=super.clone(e);return this._resultAnnotations&&(n._resultAnnotations=this._resultAnnotations.map((e=>({...e})))),this._layerAnnotations&&(n._layerAnnotations=this._layerAnnotations.map((e=>({...e})))),n._variableValueRecorder=this._variableValueRecorder.cloneAndRecordCurrentValuesForSceneObject(this),n._containerWidth=this._containerWidth,n._results.next({origin:this,data:null!=(t=this.state.data)?t:U}),n}prepareRequests(e,t,n){var r,a;const{minInterval:s,queries:l}=this.state;let c={app:"scenes",requestId:ii(),timezone:e.getTimeZone(),range:e.state.value,interval:"1s",intervalMs:1e3,targets:(0,k.cloneDeep)(l),maxDataPoints:this.getMaxDataPoints(),scopedVars:this._scopedVars,startTime:Date.now(),liveStreaming:this.state.liveStreaming,rangeRaw:{from:e.state.from,to:e.state.to},cacheTimeout:this.state.cacheTimeout,queryCachingTTL:this.state.queryCachingTTL,scopes:null==n?void 0:n.getValue(),...Ue(this)};if(this._adhocFiltersVar){if(c.filters=[],null==(r=this._adhocFiltersVar.state.baseFilters)?void 0:r.length){const e=this._adhocFiltersVar.state.baseFilters.filter((e=>e.origin));c.filters=c.filters.concat(e)}c.filters=c.filters.concat(this._adhocFiltersVar.state.filters.filter(ni))}this._groupByVar&&(c.groupByKeys=this._groupByVar.state.value),c.targets=c.targets.map((e=>{var n;return e.datasource&&(e.datasource.uid===t.uid||(null==(n=t.meta)?void 0:n.mixed)||!i.isExpressionReference||(0,i.isExpressionReference)(e.datasource))||(e.datasource=t.getRef()),e}));const u=s?Gi(this,s):t.interval,d=o.rangeUtil.calculateInterval(e.state.value,c.maxDataPoints,u);c.scopedVars=Object.assign({},c.scopedVars,{__interval:{text:d.interval,value:d.interval},__interval_ms:{text:d.intervalMs.toString(),value:d.intervalMs}}),c.interval=d.interval,c.intervalMs=d.intervalMs;const p=e.state.value;let f=[],h=new Map;for(const e of null!=(a=this.getClosestExtraQueryProviders())?a:[])for(const{req:t,processor:n}of e.getExtraQueries(c)){const e=ii();f.push({...t,requestId:e}),h.set(e,null!=n?n:$e)}return c.range=p,{primary:c,secondaries:f,processors:h}}_combineDataLayers(e){return this._layerAnnotations&&this._layerAnnotations.length>0&&(e.annotations=(e.annotations||[]).concat(this._layerAnnotations)),this.state.data&&this.state.data.alertState&&(e.alertState=this.state.data.alertState),e}_setNoDataState(){this.state.data!==U&&this.setState({data:U})}getClosestExtraQueryProviders(){const e=new Map;return this.parent?(L(this.parent,(t=>(Fe(t)&&!e.has(t.constructor)&&e.set(t.constructor,t),t.forEachChild((t=>{Fe(t)&&!e.has(t.constructor)&&e.set(t.constructor,t)})),null))),Array.from(e.values())):[]}findAndSubscribeToAdHocFilters(e){const t=function(e){var t;for(const n of He.values())if(Gi(n,null==(t=n.state.datasource)?void 0:t.uid)===e)return n}(e);this._adhocFiltersVar!==t&&(this._adhocFiltersVar=t,this._updateExplicitVariableDependencies());const n=function(e){var t;for(const n of Ge.values())if(Gi(n,null==(t=n.state.datasource)?void 0:t.uid)===e)return n}(e);this._groupByVar!==n&&(this._groupByVar=n,this._updateExplicitVariableDependencies())}_updateExplicitVariableDependencies(){const e=[];this._adhocFiltersVar&&e.push(this._adhocFiltersVar.state.name),this._groupByVar&&e.push(this._groupByVar.state.name),this._variableDependency.setVariableNames(e)}isQueryModeAuto(){var e;return"auto"===(null!=(e=this.state.runQueriesMode)?e:"auto")}}function li(e){var t,n;return null!=(n=null==(t=e.find((e=>null!==e.datasource)))?void 0:t.datasource)?n:void 0}function ci(e){if(!e)return!0;for(let t=0;t0)return!1;return!0}function ui(e,t){return e===t||(0,k.isEqual)(e,t)}function di(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,n)=>{if("object"==typeof n&&null!==n){if(e.has(n))return;e.add(n)}return n}})())}catch(e){console.error(e)}return""}function pi(e){return e.map((e=>function(e){var t,n;let r="",a=e.operator;"=|"===a?(a="=~",r=null==(t=e.values)?void 0:t.map(hi).join("|")):"!=|"===a?(a="!~",r=null==(n=e.values)?void 0:n.map(hi).join("|")):r="=~"===a||"!~"===a?hi(e.value):fi(e.value);return`${e.key}${a}"${r}"`}(e))).join(",")}function fi(e){return e.replace(/\\/g,"\\\\").replace(/\n/g,"\\n").replace(/"/g,'\\"')}function hi(e){return fi(e.replace(gi,"\\$&"))}const gi=/[*+?()|\\.\[\]{}^$]/g;function mi(e){var t;const n=Xi.findAllObjects(e.getRoot(),(e=>e instanceof si)),r=Xi.interpolate(e,null==(t=e.state.datasource)?void 0:t.uid),a=function(e){const t={};for(const n of e)n.state.key&&(n.state.key in t||(t[n.state.key]=[]),t[n.state.key].push(n));return Object.values(t).flatMap((e=>{const t=e.filter((e=>e.isActive));return 0===t.length&&1===e.length?e:t}))}(n).filter((t=>{var n;return Xi.interpolate(e,null==(n=t.state.datasource)?void 0:n.uid)===r}));if(0===a.length)return[];const o=[];return a.forEach((t=>{o.push(...t.state.queries.filter((t=>{if(!t.datasource||!t.datasource.uid)return!0;return Xi.interpolate(e,t.datasource.uid)===r})))})),o}function vi(e){return null==e?"":/\|/g[Symbol.replace](e,"__gfp__")}function bi(e){return null==e?"":/,/g[Symbol.replace](e,"__gfc__")}function yi(e){return function(e){return null==e?"":/#/g[Symbol.replace](e,"__gfh__")}(vi(e))}function wi(e){return null==e?"":(e=/__gfp__/g[Symbol.replace](e,"|"),e=/__gfc__/g[Symbol.replace](e,","),e=/__gfh__/g[Symbol.replace](e,"#"))}function Si(e,t){return t&&e!==t?[e,t].map(bi).join(","):bi(e)}function xi(e){return Array.isArray(e)?e:e.data}function Ei(e){return!Array.isArray(e)&&Boolean(e.error)}function Ci(e){const t=[],n=new Map;for(const r of e){const e=r.group;if(e){let a=n.get(e);a||(a=[],n.set(e,a),t.push({label:e,options:a})),a.push(r)}else t.push(r)}return t}class Ri extends I{constructor(e){super({type:"constant",value:"",name:"",...e,skipUrlSync:!0}),this._variableDependency=new Di(this,{statePaths:["value"]}),this._prevValue=""}validateAndUpdate(){const e=this.getValue();return this._prevValue!==e&&(this._prevValue=e,this.publishEvent(new te(this),!0)),(0,f.of)({})}getValue(){return"string"==typeof this.state.value?Xi.interpolate(this,this.state.value):this.state.value}}class Di{constructor(e,t){this._sceneObject=e,this._options=t,this._dependencies=new Set,this._isWaitingForVariables=!1,this.scanCount=0,this._statePaths=t.statePaths,this._options.handleTimeMacros&&this.handleTimeMacros()}hasDependencyOn(e){return this.getNames().has(e)}variableUpdateCompleted(e,t){const n=this.getNames();let r=!1;(n.has(e.state.name)||n.has(o.DataLinkBuiltInVars.includeVars))&&t&&(r=!0),V(0,0,e.state.name,this._isWaitingForVariables),this._options.onAnyVariableChanged&&this._options.onAnyVariableChanged(e),this._options.onVariableUpdateCompleted&&(this._isWaitingForVariables||r)&&this._options.onVariableUpdateCompleted(),r&&(this._options.onReferencedVariableValueChanged&&this._options.onReferencedVariableValueChanged(e),this._options.onReferencedVariableValueChanged||this._options.onVariableUpdateCompleted||this._sceneObject.forceRender())}hasDependencyInLoadingState(){return Xi.hasVariableDependencyInLoadingState(this._sceneObject)?(this._isWaitingForVariables=!0,!0):(this._isWaitingForVariables=!1,!1)}getNames(){const e=this._state,t=this._state=this._sceneObject.state;if(!e)return this.scanStateForDependencies(this._state),this._dependencies;if(t!==e)if(this._statePaths){for(const n of this._statePaths)if("*"===n||t[n]!==e[n]){this.scanStateForDependencies(t);break}}else this.scanStateForDependencies(t);return this._dependencies}setVariableNames(e){this._options.variableNames=e,this.scanStateForDependencies(this._state)}setPaths(e){this._statePaths=e}scanStateForDependencies(e){if(this._dependencies.clear(),this.scanCount+=1,this._options.variableNames)for(const e of this._options.variableNames)this._dependencies.add(e);if(this._statePaths)for(const t of this._statePaths){if("*"===t){this.extractVariablesFrom(e);break}{const n=e[t];n&&this.extractVariablesFrom(n)}}}extractVariablesFrom(e){be.lastIndex=0;const t=("string"!=typeof e?di(e):e).matchAll(be);if(t)for(const e of t){const[,t,n,,r]=e,a=t||n||r;this._dependencies.add(a)}}handleTimeMacros(){this._sceneObject.addActivationHandler((()=>{const e=Xi.getTimeRange(this._sceneObject).subscribeToState(((e,t)=>{const n=this.getNames(),r=n.has("__from"),a=n.has("__to"),o=n.has("__timezone");if(e.value!==t.value)if(r){const t=new Ri({name:"__from",value:e.from});this.variableUpdateCompleted(t,!0)}else if(a){const t=new Ri({name:"__to",value:e.to});this.variableUpdateCompleted(t,!0)}if(e.timeZone!==t.timeZone&&o){const t=new Ri({name:"__timezone",value:e.timeZone});this.variableUpdateCompleted(t,!0)}}));return()=>e.unsubscribe()}))}}const _i=e=>Boolean(e.metricFindQuery)&&!Boolean(e.variables),Oi=e=>{if(!e.variables)return!1;if(e.variables.getType()!==o.VariableSupportType.Standard)return!1;const t=e.variables;return"toDataQuery"in t&&Boolean(t.toDataQuery)},Ii=e=>{if(!e.variables)return!1;if(e.variables.getType()!==o.VariableSupportType.Custom)return!1;const t=e.variables;return"query"in t&&"editor"in t&&Boolean(t.query)&&Boolean(t.editor)},Ti=e=>!!e.variables&&e.variables.getType()===o.VariableSupportType.Datasource;class Ai{constructor(e,t=(0,i.getRunRequest)()){this.datasource=e,this._runRequest=t}getTarget(e){if(Oi(this.datasource))return this.datasource.variables.toDataQuery(function(e){var t;const n=null!=(t=e.state.query)?t:"";if("string"==typeof n)return{query:n,refId:`variable-${e.state.name}`};if(null==n.refId)return{...n,refId:`variable-${e.state.name}`};return e.state.query}(e));throw new Error("Couldn't create a target with supplied arguments.")}runRequest(e,t){return Oi(this.datasource)?this.datasource.variables.query?this._runRequest(this.datasource,t,this.datasource.variables.query.bind(this.datasource.variables)):this._runRequest(this.datasource,t):Ni()}}class ki{constructor(e){this.datasource=e}getTarget(e){if(_i(this.datasource))return e.state.query;throw new Error("Couldn't create a target with supplied arguments.")}runRequest({variable:e,searchFilter:t},n){return _i(this.datasource)?(0,f.from)(this.datasource.metricFindQuery(e.state.query,{...n,variable:{name:e.state.name,type:e.state.type},searchFilter:t})).pipe((0,f.mergeMap)((e=>{if(!e||!e.length)return Ni();const t=e;return(0,f.of)({series:t,state:o.LoadingState.Done,timeRange:n.range})}))):Ni()}}class Pi{constructor(e,t=(0,i.getRunRequest)()){this.datasource=e,this._runRequest=t}getTarget(e){if(Ii(this.datasource))return e.state.query;throw new Error("Couldn't create a target with supplied arguments.")}runRequest(e,t){return Ii(this.datasource)?this.datasource.variables.query?this._runRequest(this.datasource,t,this.datasource.variables.query.bind(this.datasource.variables)):this._runRequest(this.datasource,t):Ni()}}class Li{constructor(e,t=(0,i.getRunRequest)()){this.datasource=e,this._runRequest=t}getTarget(e){var t;if(Ti(this.datasource))return"string"==typeof e.state.query?e.state.query:{...e.state.query,refId:null!=(t=e.state.query.refId)?t:"variable-query"};throw new Error("Couldn't create a target with supplied arguments.")}runRequest(e,t){return Ti(this.datasource)?this._runRequest(this.datasource,t):Ni()}}function Ni(){return(0,f.of)({state:o.LoadingState.Done,series:[],timeRange:(0,o.getDefaultTimeRange)()})}let Mi=function(e){if(Oi(e))return new Ai(e,(0,i.getRunRequest)());if(_i(e))return new ki(e);if(Ii(e))return new Pi(e);if(Ti(e))return new Li(e);throw new Error(`Couldn't create a query runner for datasource ${e.type}`)};const Bi=(e,t)=>{const n=[];let r=null;t.lastIndex=0;do{r=t.exec(e),r&&n.push(r)}while(t.global&&r&&""!==r[0]&&void 0!==r[0]);return n},Vi=(e,t)=>{if(t===o.VariableSort.disabled)return e;switch(t){case o.VariableSort.alphabeticalAsc:e=(0,k.sortBy)(e,"label");break;case o.VariableSort.alphabeticalDesc:e=(0,k.sortBy)(e,"label").reverse();break;case o.VariableSort.numericalAsc:e=(0,k.sortBy)(e,ji);break;case o.VariableSort.numericalDesc:e=(e=(0,k.sortBy)(e,ji)).reverse();break;case o.VariableSort.alphabeticalCaseInsensitiveAsc:e=(0,k.sortBy)(e,(e=>(0,k.toLower)(e.label)));break;case o.VariableSort.alphabeticalCaseInsensitiveDesc:e=(e=(0,k.sortBy)(e,(e=>(0,k.toLower)(e.label)))).reverse();break;case o.VariableSort.naturalAsc||7:e=$i(e);break;case o.VariableSort.naturalDesc||8:e=(e=$i(e)).reverse()}return e};function ji(e){if(!e.label)return-1;const t=e.label.match(/.*?(\d+).*/);return!t||t.length<2?-1:parseInt(t[1],10)}const Fi=new Intl.Collator(void 0,{sensitivity:"accent",numeric:!0});function $i(e){return e.slice().sort(((e,t)=>Fi.compare(e.label,t.label)))}function zi(){return e=>e.pipe((0,f.map)((e=>{const t=e.series;if(!t||!t.length)return[];if(function(e){if(!e)return!1;if(!e.length)return!0;const t=e[0];if((0,o.isDataFrame)(t))return!1;for(const e in t){if(!t.hasOwnProperty(e))continue;if(null!==t[e]&&"string"!=typeof t[e]&&"number"!=typeof t[e])continue;const n=e.toLowerCase();if("text"===n||"value"===n)return!0}return!1}(t))return t;if(0===t[0].fields.length)return[];const n=(0,o.getProcessedDataFrames)(t),r=[];let a=-1,i=-1,s=-1,l=-1;for(const e of n)for(let n=0;n{di(this.state.query).indexOf(ye)>-1&&this._updateOptionsBasedOnSearchFilter(e)},this._updateOptionsBasedOnSearchFilter=(0,k.debounce)((async e=>{const t=await(0,f.lastValueFrom)(this.getValueOptions({searchFilter:e}));this.setState({options:t,loading:!1})}),400)}getValueOptions(e){return this.state.query?(this.setState({loading:!0,error:null}),(0,f.from)(Ve(this.state.datasource,{__sceneObject:It(this)})).pipe((0,f.mergeMap)((t=>{const n=Mi(t),r=n.getTarget(this),a=this.getRequest(r,e.searchFilter);return n.runRequest({variable:this,searchFilter:e.searchFilter},a).pipe(Me({type:"variable",request:a,origin:this}),(0,f.filter)((e=>e.state===o.LoadingState.Done||e.state===o.LoadingState.Error)),(0,f.take)(1),(0,f.mergeMap)((e=>e.state===o.LoadingState.Error?(0,f.throwError)((()=>e.error)):(0,f.of)(e))),zi(),(0,f.mergeMap)((e=>{let t="";return this.state.regex&&(t=Xi.interpolate(this,this.state.regex,void 0,"regex")),(0,f.of)(function(e,t,n){var r,a,i,s,l,c,u,d,p,f;let h,g=[];e&&(h=(0,o.stringToJsRegex)(e));for(let e=0;ee.groups&&e.groups.value)),n=e.find((e=>e.groups&&e.groups.text)),r=e.find((e=>e.length>1)),a=e.length>1&&r;if(t||n)m=null!=(u=null==(l=null==t?void 0:t.groups)?void 0:l.value)?u:null==(c=null==n?void 0:n.groups)?void 0:c.text,o=null!=(f=null==(d=null==n?void 0:n.groups)?void 0:d.text)?f:null==(p=null==t?void 0:t.groups)?void 0:p.value;else{if(a){for(let t=0;te.cancelled?(0,f.of)([]):(0,f.throwError)((()=>e)))))})))):(0,f.of)([])}getRequest(e,t){const n={__sceneObject:It(this)};t&&(n.__searchFilter={value:t,text:t});const r=Xi.getTimeRange(this).state.value;return{app:o.CoreApp.Dashboard,requestId:w(),timezone:"",range:r,interval:"",intervalMs:0,targets:[e],scopedVars:n,startTime:Date.now()}}}Ui.Component=({model:e})=>p().createElement(St,{model:e});class Wi extends I{constructor(){super(...arguments),this._renderBeforeActivation=!0,this._contextSubject=new f.BehaviorSubject(void 0)}getValue(){var e,t;return null!=(t=null==(e=this.context)?void 0:e.state.value)?t:[]}subscribeToValue(e){return this.contextObservable.pipe((0,f.map)((e=>{var t;return null!=(t=null==e?void 0:e.state.value)?t:[]})),(0,f.pairwise)(),(0,f.filter)((([e,t])=>!(0,k.isEqual)(e,t)))).subscribe((([t,n])=>{e(n,t)}))}isLoading(){var e,t;return null!=(t=null==(e=this.context)?void 0:e.state.loading)&&t}subscribeToLoading(e){return this.contextObservable.pipe((0,f.filter)((e=>!!e)),(0,f.pairwise)(),(0,f.map)((([e,t])=>{var n,r;return[null!=(n=null==e?void 0:e.state.loading)&&n,null!=(r=null==t?void 0:t.state.loading)&&r]})),(0,f.filter)((([e,t])=>e!==t))).subscribe((([t,n])=>{e(n)}))}setEnabled(e){var t;null==(t=this.context)||t.setEnabled(e)}setReadOnly(e){var t;null==(t=this.context)||t.setReadOnly(e)}updateContext(e){var t;this.context===e&&(null==(t=this.context)?void 0:t.state)===(null==e?void 0:e.state)||this._contextSubject.next(e)}get context(){return this._contextSubject.getValue()}get contextObservable(){return this._contextSubject.asObservable()}}function Hi(e){var t;return null!=(t=L(e,(e=>e.state.$data)))?t:K}function Gi(e,t,n,r,a){return""===t||null==t?"":ke(e,t,n,r,a)}function qi(e,t,n,r){if(t(e))return e;let a=null;return e.forEachChild((e=>{if(e===n)return;let r=qi(e,t);r&&(a=r)})),a||(r&&e.parent?qi(e.parent,t,e,!0):null)}function Qi(e,t){return qi(e,t,void 0,!0)}function Yi(e,t){const n=[];return e.forEachChild((e=>{t(e)&&n.push(e),n.push(...Yi(e,t))})),n}Wi.Component=function({model:e}){const t=(0,i.useScopes)();return(0,u.useEffect)((()=>{e.updateContext(t)}),[t,e]),null};const Xi={getVariables:function(e){var t;return null!=(t=L(e,(e=>e.state.$variables)))?t:J},getData:Hi,getTimeRange:ee,getLayout:function(e){const t=L(e,(e=>function(e){return"isDraggable"in e}(e)?e:void 0));return t||null},getDataLayers:function(e,t=!1){let n=e,r=[];for(;n;){const e=n.state.$data;if(e){if(Ne(e)?r=r.concat(e):e.state.$data&&Ne(e.state.$data)&&(r=r.concat(e.state.$data)),t&&r.length>0)break;n=n.parent}else n=n.parent}return r},interpolate:Gi,lookupVariable:B,hasVariableDependencyInLoadingState:function(e){if(!e.variableDependency)return!1;for(const t of e.variableDependency.getNames()){if(e instanceof Ui&&e.state.name===t){console.warn("Query variable is referencing itself");continue}const n=B(t,e);if(!n)continue;if(n.parent.isVariableLoadingOrWaitingToUpdate(n))return!0}return!1},findByKey:function(e,t){const n=Qi(e,(e=>e.state.key===t));if(!n)throw new Error("Unable to find scene with key "+t);return n},findByKeyAndType:function(e,t,n){const r=Qi(e,(e=>e.state.key===t));if(!r)throw new Error("Unable to find scene with key "+t);if(!(r instanceof n))throw new Error(`Found scene object with key ${t} does not match type ${n.name}`);return r},findObject:Qi,findAllObjects:Yi,getAncestor:function(e,t){let n=e;for(;n;){if(n instanceof t)return n;n=n.parent}if(!n)throw new Error("Unable to find parent of type "+t.name);return n},getQueryController:j,findDescendents:function(e,t){function n(e){return e instanceof t}return Yi(e,n).filter(n)},getScopesBridge:function(e){var t;return null!=(t=Qi(e,(e=>e instanceof Wi)))?t:void 0}};class Ki{constructor(){this.index=new Map}getUniqueKey(e,t){const n=this.index.get(e);if(!n)return this.index.set(e,[t]),e;let r=n.findIndex((e=>e===t));return-1===r&&(!function(e){for(const t of e)if(Zi(t)){const n=e.indexOf(t);e.splice(n,1)}}(n),n.push(t),r=n.length-1),r>0?`${e}-${r+1}`:e}clear(){this.index.clear()}}function Zi(e){const t=e.getRoot();return!Xi.findObject(t,(t=>t===e))}function Ji(e){const t=new Ki,n={},r=e=>{if(e.urlSync){const r=e.urlSync.getUrlState();for(const[a,o]of Object.entries(r))if(null!=o){const r=t.getUniqueKey(a,e);n[r]=o}}e.forEachChild(r)};return r(e),n}function es(e,t,n,r){r||ts(e,t,n),e.forEachChild((e=>{ts(e,t,n)})),e.forEachChild((e=>es(e,t,n,!0)))}function ts(e,t,n){if(e.urlSync){const r={},a=e.urlSync.getUrlState();for(const o of e.urlSync.getKeys()){const i=n.getUniqueKey(o,e),s=t.getAll(i),l=a[o];ns(s,l)||(s.length>0?Array.isArray(l)?r[o]=s:r[o]=s[0]:r[o]=null)}Object.keys(r).length>0&&e.urlSync.updateFromUrl(r)}}function ns(e,t){return 0===e.length&&null==t||(Array.isArray(t)||1!==(null==e?void 0:e.length)?0===(null==t?void 0:t.length)&&null===e||(0,k.isEqual)(e,t):t===e[0])}var rs=n(6145);class as extends I{constructor(e){super({...e,sync:e.sync||rs.yV.Off}),this.getEventsBus=e=>{if(!this.parent)throw new Error("EnableCursorSync cannot be used as a standalone scene object");return new os(this.parent,e)}}getEventsScope(){if(!this.parent)throw new Error("EnableCursorSync cannot be used as a standalone scene object");return this.state.key}}class os{constructor(e,t){this._source=e,this._eventsOrigin=t}publish(e){e.origin=this,this._eventsOrigin.publishEvent(e,!0)}getStream(e){return new f.Observable((t=>{const n=this._source.subscribeToEvent(e,(e=>{t.next(e)}));return()=>n.unsubscribe()}))}subscribe(e,t){return this.getStream(e).pipe().subscribe(t)}removeAllListeners(){}newScopedBus(e,t){throw new Error("For internal use only")}}var is=function(){};var ss="undefined"!=typeof window;const ls=ss?u.useLayoutEffect:u.useEffect;var cs={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0};const us=ss&&void 0!==window.ResizeObserver?function(){var e=(0,u.useState)(null),t=e[0],n=e[1],r=(0,u.useState)(cs),a=r[0],o=r[1],i=(0,u.useMemo)((function(){return new window.ResizeObserver((function(e){if(e[0]){var t=e[0].contentRect,n=t.x,r=t.y,a=t.width,i=t.height,s=t.top,l=t.left,c=t.bottom,u=t.right;o({x:n,y:r,width:a,height:i,top:s,left:l,bottom:c,right:u})}}))}),[]);return ls((function(){if(t)return i.observe(t),function(){i.disconnect()}}),[t]),[n,a]}:function(){return[is,cs]};function ds({data:e,showAll:t,seriesLimit:n,onShowAllSeries:r}){const a=(0,qe.useStyles2)(ps),o=null==e?void 0:e.series.length;if(void 0===o||o({timeSeriesDisclaimer:(0,rt.css)({label:"time-series-disclaimer",display:"flex",alignItems:"center",gap:e.spacing(1)}),warningMessage:(0,rt.css)({display:"flex",alignItems:"center",gap:e.spacing(.5),color:e.colors.warning.main,fontSize:e.typography.bodySmall.fontSize})});function fs(e,t){if(t)return t;let n=e.error?e.error.message:void 0;return e.errors&&(n=e.errors.map((e=>e.message)).join(", ")),n}const hs=(0,rt.css)({position:"relative",width:"100%",height:"100%"}),gs=(0,rt.css)({position:"absolute",width:"100%",height:"100%"}),ms=e=>({ok:(0,rt.css)({color:e.colors.success.text}),pending:(0,rt.css)({color:e.colors.warning.text}),alerting:(0,rt.css)({color:e.colors.error.text})}),vs="hideSeriesFrom",bs=(0,o.isSystemOverrideWithRef)(vs);function ys(e,t=o.ByNamesMatcherMode.exclude,n){return n=null!=n?n:{id:"custom.hideFrom",value:{viz:!0,legend:!1,tooltip:!1}},{__systemRef:vs,matcher:{id:o.FieldMatcherID.byNames,options:{mode:t,names:e,prefix:t===o.ByNamesMatcherMode.exclude?"All except:":void 0,readOnly:!0}},properties:[{...n,value:{viz:!0,legend:!1,tooltip:!1}}]}}const ws=(e,t,n=o.ByNamesMatcherMode.exclude)=>{const r=e.properties.find((e=>"custom.hideFrom"===e.id)),a=Ss(e),i=a.findIndex((e=>e===t));return i<0?a.push(t):a.splice(i,1),ys(a,n,r)},Ss=e=>{var t;const n=null==(t=e.matcher.options)?void 0:t.names;return Array.isArray(n)?[...n]:[]},xs=(e,t)=>Ss(e).length===Es(t).length,Es=(e,t)=>{const n=new Set;for(const r of e)for(const a of r.fields){if(a.type!==o.FieldType.number)continue;const i=(0,o.getFieldDisplayName)(a,r,e);i!==t&&n.add(i)}return Array.from(n)},Cs=(e,t)=>{var n;let r=[];for(const a of e){const e=a.properties.find((e=>"custom.hideFrom"===e.id));if(void 0!==e&&!0===(null==(n=e.value)?void 0:n.legend)){const e=o.fieldMatchers.get(a.matcher.id).get(a.matcher.options);for(const n of t)for(const a of n.fields){if(a.type!==o.FieldType.number)continue;const i=(0,o.getFieldDisplayName)(a,n,t);e(a,n,t)&&r.push(i)}}}return r},Rs=(e,t)=>({matcher:{id:o.FieldMatcherID.byName,options:e},properties:[Ds(t)]}),Ds=e=>({id:"color",value:{mode:o.FieldColorModeId.Fixed,fixedColor:e}});class _s extends I{constructor(e){var t;super({options:{},fieldConfig:{defaults:{},overrides:[]},title:"Title",pluginId:"timeseries",_renderCounter:0,...e}),this._variableDependency=new Di(this,{statePaths:["title","options","fieldConfig"]}),this._structureRev=0,this.onTimeRangeChange=e=>{Xi.getTimeRange(this).onTimeRangeChange({raw:{from:(0,o.toUtc)(e.from),to:(0,o.toUtc)(e.to)},from:(0,o.toUtc)(e.from),to:(0,o.toUtc)(e.to)})},this.getTimeRange=e=>{const t=Xi.findObject(this,(e=>e instanceof Is)),n=Xi.getTimeRange(this);if(t instanceof Is&&t.isEnabled)return q(n.state.from,n.state.to,n.getTimeZone(),n.state.fiscalYearStartMonth,n.state.UNSAFE_nowDelay,n.state.weekStart);const r=this.getPlugin();return r&&!r.meta.skipDataQuery&&e&&e.timeRange?e.timeRange:n.state.value},this.onTitleChange=e=>{this.setState({title:e})},this.onDescriptionChange=e=>{this.setState({description:e})},this.onDisplayModeChange=e=>{this.setState({displayMode:e})},this.onToggleCollapse=e=>{this.setState({collapsed:e})},this.onOptionsChange=(e,t=!1,n=!1)=>{var r;const{fieldConfig:a,options:i}=this.state,s=t?e:(0,k.mergeWith)((0,k.cloneDeep)(i),e,((e,t,n,r)=>{if((0,k.isArray)(t))return t;e===t||void 0!==t||(r[n]=t)})),l=(0,o.getPanelOptionsWithDefaults)({plugin:this._plugin,currentOptions:s,currentFieldConfig:a,isAfterPluginChange:n});this.setState({options:l.options,_renderCounter:(null!=(r=this.state._renderCounter)?r:0)+1})},this.onFieldConfigChange=(e,t)=>{const{fieldConfig:n,options:r}=this.state,a=t?e:(0,k.merge)((0,k.cloneDeep)(n),e),i=(0,o.getPanelOptionsWithDefaults)({plugin:this._plugin,currentOptions:r,currentFieldConfig:a,isAfterPluginChange:!1});this._dataWithFieldConfig=void 0,this.setState({fieldConfig:i.fieldConfig})},this.interpolate=(e,t,n)=>Xi.interpolate(this,e,t,n),this.getDescription=()=>{this.publishEvent(new C({origin:this,interaction:"panel-description-shown"}),!0);const{description:e}=this.state;if(e){const t=this.interpolate(e);return(0,o.renderMarkdown)(t)}return""},this.onCancelQuery=()=>{var e;this.publishEvent(new C({origin:this,interaction:"panel-cancel-query-clicked"}),!0);const t=Xi.getData(this);null==(e=t.cancelQuery)||e.call(t)},this.onStatusMessageClick=()=>{this.publishEvent(new C({origin:this,interaction:"panel-status-message-clicked"}),!0)},this._onSeriesColorChange=(e,t)=>{this.onFieldConfigChange(((e,t,n)=>{const{overrides:r}=n,a=n.overrides.findIndex((t=>t.matcher.id===o.FieldMatcherID.byName&&t.matcher.options===e));if(a<0)return{...n,overrides:[...n.overrides,Rs(e,t)]};const i=Array.from(r),s=i[a],l=s.properties.findIndex((e=>"color"===e.id));if(l<0)return i[a]={...s,properties:[...s.properties,Ds(t)]},{...n,overrides:i};const c=Array.from(s.properties);return c[l]=Ds(t),i[a]={...s,properties:c},{...n,overrides:i}})(e,t,this.state.fieldConfig))},this._onSeriesVisibilityChange=(e,t)=>{this._dataWithFieldConfig&&this.onFieldConfigChange(function(e,t,n,r){const{overrides:a}=n,o=e,i=a.findIndex(bs);if(i<0){if(t===qe.SeriesVisibilityChangeMode.ToggleSelection){const e=ys([o,...Cs(a,r)]);return{...n,overrides:[...n.overrides,e]}}const e=ys(Es(r,o));return{...n,overrides:[...n.overrides,e]}}const s=Array.from(a),[l]=s.splice(i,1);if(t===qe.SeriesVisibilityChangeMode.ToggleSelection){let e=Ss(l);const t=Cs(s,r);if(t.length>0&&(e=e.filter((e=>t.indexOf(e)<0))),e[0]===o&&1===e.length)return{...n,overrides:s};const a=ys([o,...t]);return{...n,overrides:[...s,a]}}const c=ws(l,o);return xs(c,r)?{...n,overrides:s}:{...n,overrides:[...s,c]}}(e,t,this.state.fieldConfig,this._dataWithFieldConfig.series),!0)},this._onInstanceStateChange=e=>{this._panelContext&&(this._panelContext={...this._panelContext,instanceState:e}),this.setState({_pluginInstanceState:e})},this._onToggleLegendSort=e=>{const t=this.state.options.legend;if(!t)return;let n=t.sortDesc,r=t.sortBy;e!==r&&(n=void 0),!1===n?(r=void 0,n=void 0):(n=!n,r=e),this.onOptionsChange({...this.state.options,legend:{...t,sortBy:r,sortDesc:n}},!0)},this.addActivationHandler((()=>{this._onActivate()})),null==(t=e.menu)||t.addActivationHandler((()=>{this.publishEvent(new C({origin:this,interaction:"panel-menu-shown"}),!0)}))}_onActivate(){this._plugin||this._loadPlugin(this.state.pluginId)}forceRender(){var e;this.setState({_renderCounter:(null!=(e=this.state._renderCounter)?e:0)+1})}async _loadPlugin(e,t,n,r){const a=function(e){var t;const{getPanelPluginFromCache:n}=(0,i.getPluginImportUtils)();return null!=(t=n(e))?t:c.get(e)}(e);if(a)this._pluginLoaded(a,t,n,r);else{const{importPanelPlugin:a}=(0,i.getPluginImportUtils)();try{const o=a(e),i=Xi.getQueryController(this);i&&i.state.enableProfiling&&Be(o).pipe(Me({type:"plugin",origin:this})).subscribe((()=>{}));const s=await o;this._pluginLoaded(s,t,n,r)}catch(t){this._pluginLoaded(function(e){const t=new o.PanelPlugin((()=>null));return t.meta={id:e,name:e,sort:100,type:o.PluginType.panel,module:"",baseUrl:"",info:{author:{name:""},description:"",links:[],logos:{large:"",small:"public/img/grafana_icon.svg"},screenshots:[],updated:"",version:""}},t}(e)),t instanceof Error&&this.setState({_pluginLoadError:t.message})}}}getLegacyPanelId(){var e,t;const n=null!=(t=null==(e=this.state.key)?void 0:e.split("/"))?t:[];if(0===n.length)return 0;const r=n[n.length-1],a=parseInt(r.replace("panel-",""),10);return isNaN(a)?0:a}async _pluginLoaded(e,t,n,r){const{options:a,fieldConfig:i,title:s,pluginVersion:l,_UNSAFE_customMigrationHandler:c}=this.state,u={title:s,options:a,fieldConfig:i,id:this.getLegacyPanelId(),type:e.meta.id,pluginVersion:l};t&&(u.options=t),n&&(u.fieldConfig=n);const d=this._getPluginVersion(e);null==c||c(u,e),e.onPanelMigration&&d!==l&&!r&&(u.options=await e.onPanelMigration(u));const p=(0,o.getPanelOptionsWithDefaults)({plugin:e,currentOptions:u.options,currentFieldConfig:u.fieldConfig,isAfterPluginChange:null!=r&&r});if(this._plugin=e,this.setState({options:p.options,fieldConfig:p.fieldConfig,pluginVersion:d,pluginId:e.meta.id}),e.meta.skipDataQuery){const e=Xi.getTimeRange(this);this._subs.add(e.subscribeToState((()=>this.forceRender())))}}_getPluginVersion(e){return e&&e.meta.info.version?e.meta.info.version:i.config.buildInfo.version}getPlugin(){return this._plugin}getPanelContext(){return null!=this._panelContext||(this._panelContext=this.buildPanelContext()),this._panelContext}async changePluginType(e,t,n){var r,a;const{options:o,fieldConfig:i,pluginId:s}=this.state;this._dataWithFieldConfig=void 0;const l=this.state.pluginId!==e;await this._loadPlugin(e,null!=t?t:{},n,l);const c={title:this.state.title,options:this.state.options,fieldConfig:this.state.fieldConfig,id:1,type:e},u=null==(a=null==(r=this._plugin)?void 0:r.onPanelTypeChanged)?void 0:a.call(r,c,s,o,i);u&&!(0,k.isEmpty)(u)&&this.onOptionsChange(u,!0,!0)}clearFieldConfigCache(){this._dataWithFieldConfig=void 0}applyFieldConfig(e){var t,n,r,a;const s=this._plugin;if(!s||s.meta.skipDataQuery||!e)return U;if(this._prevData===e&&this._dataWithFieldConfig)return this._dataWithFieldConfig;const l=s.dataSupport||{alertStates:!1,annotations:!1},c=s.fieldConfigRegistry,u=null!=(n=null==(t=this._dataWithFieldConfig)?void 0:t.series)?n:[],d=(0,o.applyFieldOverrides)({data:e.series,fieldConfig:this.state.fieldConfig,fieldConfigRegistry:c,replaceVariables:this.interpolate,theme:i.config.theme2,timeZone:null==(r=e.request)?void 0:r.timezone});return(0,o.compareArrayValues)(d,u,o.compareDataFrameStructures)||this._structureRev++,this._dataWithFieldConfig={...e,structureRev:this._structureRev,series:d},this._dataWithFieldConfig.annotations&&(this._dataWithFieldConfig.annotations=(0,o.applyFieldOverrides)({data:this._dataWithFieldConfig.annotations,fieldConfig:{defaults:{},overrides:[]},fieldConfigRegistry:c,replaceVariables:this.interpolate,theme:i.config.theme2,timeZone:null==(a=e.request)?void 0:a.timezone})),l.alertStates||(this._dataWithFieldConfig.alertState=void 0),l.annotations||(this._dataWithFieldConfig.annotations=void 0),this._prevData=e,this._dataWithFieldConfig}buildPanelContext(){const e=(t=this,Xi.findObject(t,(e=>e instanceof as)));var t;const n={eventsScope:e?e.getEventsScope():"__global_",eventBus:e?e.getEventsBus(this):(0,i.getAppEvents)(),app:o.CoreApp.Unknown,sync:()=>e?e.state.sync:o.DashboardCursorSync.Off,onSeriesColorChange:this._onSeriesColorChange,onToggleSeriesVisibility:this._onSeriesVisibilityChange,onToggleLegendSort:this._onToggleLegendSort,onInstanceStateChange:this._onInstanceStateChange};return this.state.extendPanelContext&&this.state.extendPanelContext(this,n),n}}_s.Component=function({model:e}){var t;const{title:n,options:r,fieldConfig:a,_pluginLoadError:s,displayMode:l,hoverHeader:c,showMenuAlways:d,hoverHeaderOffset:f,menu:h,headerActions:g,titleItems:m,seriesLimit:v,seriesLimitShowAll:b,description:y,collapsible:w,collapsed:S,_renderCounter:x=0}=e.useState(),[E,{width:C,height:R}]=us(),D=(0,u.useMemo)((()=>(0,i.getAppEvents)()),[]),_=(0,u.useCallback)((()=>{e.state.key&&D.publish(new o.SetPanelAttentionEvent({panelId:e.state.key}))}),[e.state.key,D]),O=(0,u.useMemo)((()=>(0,k.debounce)(_,100,{leading:!0,trailing:!1})),[_]),I=e.getPlugin(),{dragClass:T,dragClassCancel:A}=function(e){var t,n;const r=Xi.getLayout(e),a=null==r?void 0:r.isDraggable();if(!r||!a||function(e,t){let n=e.parent;for(;n&&n!==t;){if("isDraggable"in n.state&&!1===n.state.isDraggable)return!0;n=n.parent}return!1}(e,r))return{dragClass:"",dragClassCancel:""};return{dragClass:null==(t=r.getDragClass)?void 0:t.call(r),dragClassCancel:null==(n=null==r?void 0:r.getDragClassCancel)?void 0:n.call(r)}}(e),P=function(e){var t,n;const r=Xi.getLayout(e);return null!=(n=null==(t=null==r?void 0:r.getDragHooks)?void 0:t.call(r))?n:{}}(e),L=Xi.getData(e),N=L.useState(),M=function(e,t,n){return(0,u.useMemo)((()=>(null==e?void 0:e.series)&&t&&!n?{...e,series:e.series.slice(0,t)}:e),[e,t,n])}(N.data,v,b),B=e.applyFieldConfig(M),V=Xi.getTimeRange(e).getTimeZone(),j=e.getTimeRange(B),F=e.interpolate(n,void 0,"text"),$=(0,qe.useStyles2)(ms);if(!I)return p().createElement("div",null,"Loading plugin panel...");if(!I.panel)return p().createElement("div",null,"Panel plugin has no panel component");const z=I.panel;L&&L.setContainerWidth&&L.setContainerWidth(Math.round(C));let U,W,H=[];m&&(Array.isArray(m)?H=H.concat(m.map((e=>p().createElement(e.Component,{model:e,key:`${e.state.key}`})))):Pe(m)?H.push(p().createElement(m.Component,{model:m})):H.push(m)),v&&H.push(p().createElement(ds,{key:"series-limit",data:N.data,seriesLimit:v,showAll:b,onShowAllSeries:()=>e.setState({seriesLimitShowAll:!b})})),e.state.$timeRange&&H.push(p().createElement(e.state.$timeRange.Component,{model:e.state.$timeRange,key:e.state.key})),B.alertState&&H.push(p().createElement(qe.Tooltip,{content:null!=(t=B.alertState.state)?t:"unknown",key:`alert-states-icon-${e.state.key}`},p().createElement(qe.PanelChrome.TitleItem,{className:(0,rt.cx)({[$.ok]:B.alertState.state===o.AlertState.OK,[$.pending]:B.alertState.state===o.AlertState.Pending,[$.alerting]:B.alertState.state===o.AlertState.Alerting})},p().createElement(qe.Icon,{name:"alerting"===B.alertState.state?"heart-break":"heart",className:"panel-alert-icon",size:"md"})))),h&&(U=p().createElement(h.Component,{model:h})),g&&(W=Array.isArray(g)?p().createElement(p().Fragment,null,g.map((e=>p().createElement(e.Component,{model:e,key:`${e.state.key}`})))):Pe(g)?p().createElement(g.Component,{model:g}):g);const G=B,q=!L.isDataReadyToDisplay||L.isDataReadyToDisplay(),Q=e.getPanelContext(),Y=e.getLegacyPanelId();return p().createElement("div",{className:hs},p().createElement("div",{ref:E,className:gs,"data-viz-panel-key":e.state.key},C>0&&R>0&&p().createElement(qe.PanelChrome,{title:F,description:(null==y?void 0:y.trim())?e.getDescription:void 0,loadingState:G.state,statusMessage:fs(G,s),statusMessageOnClick:e.onStatusMessageClick,width:C,height:R,selectionId:e.state.key,displayMode:l,titleItems:H,dragClass:T,actions:W,dragClassCancel:A,padding:I.noPadding?"none":"md",menu:U,onCancelQuery:e.onCancelQuery,onFocus:_,onMouseEnter:_,onMouseMove:O,onDragStart:t=>{var n;null==(n=P.onDragStart)||n.call(P,t,e)},showMenuAlways:d,...w?{collapsible:Boolean(w),collapsed:S,onToggleCollapse:e.onToggleCollapse}:{hoverHeader:c,hoverHeaderOffset:f}},((t,i)=>p().createElement(p().Fragment,null,p().createElement(qe.ErrorBoundaryAlert,{dependencies:[I,G]},p().createElement(o.PluginContextProvider,{meta:I.meta},p().createElement(qe.PanelContextProvider,{value:Q},q&&p().createElement(z,{id:Y,data:G,title:n,timeRange:j,timeZone:V,options:r,fieldConfig:a,transparent:!1,width:t,height:i,renderCounter:x,replaceVariables:e.interpolate,onOptionsChange:e.onOptionsChange,onFieldConfigChange:e.onFieldConfigChange,onChangeTimeRange:e.onTimeRangeChange,eventBus:Q.eventBus})))))))))};const Os=class e extends I{constructor({enabled:e=!1}){super({enabled:e}),this.timerId=void 0,this._activationHandler=()=>(this.state.enabled&&this.enable(),()=>{window.clearInterval(this.timerId),this.timerId=void 0}),this.addActivationHandler(this._activationHandler)}enable(){window.clearInterval(this.timerId),this.timerId=void 0,this.timerId=window.setInterval((()=>{const e=Xi.findAllObjects(this.getRoot(),(e=>e instanceof _s));for(const t of e)t.forceRender()}),e.REFRESH_RATE),this.setState({enabled:!0})}disable(){window.clearInterval(this.timerId),this.timerId=void 0,this.setState({enabled:!1})}get isEnabled(){return this.state.enabled}};Os.REFRESH_RATE=100;let Is=Os;function Ts(e){if("string"==typeof e)return e;if(e){if(e instanceof Error)return e.message;if((0,i.isFetchError)(e)){if(e.data&&e.data.message)return e.data.message;if(e.statusText)return e.statusText}else if(e.hasOwnProperty("message"))return e.message}return JSON.stringify(e)}class As extends I{constructor(e,t=[]){super({isEnabled:!0,...e}),this._results=new f.ReplaySubject(1),this.isDataLayer=!0,this._variableValueRecorder=new je,this._variableDependency=new Di(this,{onVariableUpdateCompleted:this.onVariableUpdateCompleted.bind(this)}),this._variableDependency.setPaths(t),this.addActivationHandler((()=>this.onActivate()))}onActivate(){return this.state.isEnabled&&this.onEnable(),this.shouldRunLayerOnActivate()&&this.runLayer(),this.subscribeToState(((e,t)=>{!e.isEnabled&&this.querySub&&(this.querySub.unsubscribe(),this.querySub=void 0,this.onDisable(),this._results.next({origin:this,data:U}),this.setStateHelper({data:U})),e.isEnabled&&!t.isEnabled&&(this.onEnable(),this.runLayer())})),()=>{this.onDeactivate()}}onDeactivate(){this.querySub&&(this.querySub.unsubscribe(),this.querySub=void 0),this.onDisable(),this._variableValueRecorder.recordCurrentDependencyValuesForSceneObject(this)}onVariableUpdateCompleted(){this.runLayer()}cancelQuery(){this.querySub&&(this.querySub.unsubscribe(),this.querySub=void 0,this.publishResults(U))}publishResults(e){this.state.isEnabled&&(this._results.next({origin:this,data:e}),this.setStateHelper({data:e}))}getResultsStream(){return this._results}shouldRunLayerOnActivate(){return!!this.state.isEnabled&&(this._variableValueRecorder.hasDependenciesChanged(this)?(V(),!0):!this.state.data)}setStateHelper(e){Ee(this,e)}}function ks({layer:e}){var t,n;const r=`data-layer-${e.state.key}`,{data:a,isEnabled:o}=e.useState(),i=Boolean(a&&a.state===$.Loading);return p().createElement("div",{className:Ps},p().createElement(Lt,{htmlFor:r,isLoading:i,onCancel:()=>{var t;return null==(t=e.cancelQuery)?void 0:t.call(e)},label:e.state.name,description:e.state.description,error:null==(n=null==(t=e.state.data)?void 0:t.errors)?void 0:n[0].message}),p().createElement(qe.InlineSwitch,{id:r,value:o,onChange:()=>e.setState({isEnabled:!o})}))}(class extends I{constructor(){super({})}}).Component=function({model:e}){const t=Xi.getDataLayers(e,!0);if(0===t.length)return null;return p().createElement(p().Fragment,null,t.map((e=>p().createElement(e.Component,{model:e,key:e.state.key}))))};const Ps=(0,rt.css)({display:"flex"});function Ls(e){return"function"==typeof e}function Ns(e){return function(t){if(function(e){return Ls(null==e?void 0:e.lift)}(t))return t.lift((function(t){try{return e(t,this)}catch(e){this.error(e)}}));throw new TypeError("Unable to lift unknown Observable type")}}var Ms=function(e,t){return Ms=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},Ms(e,t)};function Bs(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}Ms(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function Vs(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))}function js(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=s(0),i.throw=s(1),i.return=s(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(l){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&s[0]?r.return:s[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,s[1])).done)return a;switch(r=0,a&&(s=[2&s[0],a.value]),s[0]){case 0:case 1:a=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,r=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!(a=o.trys,(a=a.length>0&&a[a.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!a||s[1]>a[0]&&s[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function $s(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)i.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return i}function zs(e,t,n){if(n||2===arguments.length)for(var r,a=0,o=t.length;a1||s(e,t)}))},t&&(r[e]=t(r[e])))}function s(e,t){try{(n=a[e](t)).value instanceof Us?Promise.resolve(n.value.v).then(l,c):u(o[0][2],n)}catch(e){u(o[0][3],e)}var n}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,t){e(t),o.shift(),o.length&&s(o[0][0],o[0][1])}}function Hs(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=Fs(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,a){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,a,(t=e[n](t)).done,t.value)}))}}}Object.create;"function"==typeof SuppressedError&&SuppressedError;var Gs,qs=((Gs=function(e){return function(t){e(this),this.message=t?t.length+" errors occurred during unsubscription:\n"+t.map((function(e,t){return t+1+") "+e.toString()})).join("\n "):"",this.name="UnsubscriptionError",this.errors=t}}((function(e){Error.call(e),e.stack=(new Error).stack}))).prototype=Object.create(Error.prototype),Gs.prototype.constructor=Gs,Gs);function Qs(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var Ys=function(){function e(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}var t;return e.prototype.unsubscribe=function(){var e,t,n,r,a;if(!this.closed){this.closed=!0;var o=this._parentage;if(o)if(this._parentage=null,Array.isArray(o))try{for(var i=Fs(o),s=i.next();!s.done;s=i.next()){s.value.remove(this)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}else o.remove(this);var l=this.initialTeardown;if(Ls(l))try{l()}catch(e){a=e instanceof qs?e.errors:[e]}var c=this._finalizers;if(c){this._finalizers=null;try{for(var u=Fs(c),d=u.next();!d.done;d=u.next()){var p=d.value;try{Ks(p)}catch(e){a=null!=a?a:[],e instanceof qs?a=zs(zs([],$s(a)),$s(e.errors)):a.push(e)}}}catch(e){n={error:e}}finally{try{d&&!d.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}}if(a)throw new qs(a)}},e.prototype.add=function(t){var n;if(t&&t!==this)if(this.closed)Ks(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=null!==(n=this._finalizers)&&void 0!==n?n:[]).push(t)}},e.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},e.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},e.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&Qs(t,e)},e.prototype.remove=function(t){var n=this._finalizers;n&&Qs(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=((t=new e).closed=!0,t),e}();Ys.EMPTY;function Xs(e){return e instanceof Ys||e&&"closed"in e&&Ls(e.remove)&&Ls(e.add)&&Ls(e.unsubscribe)}function Ks(e){Ls(e)?e():e.unsubscribe()}var Zs={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},Js={setTimeout:function(e,t){for(var n=[],r=2;r{if((0,k.isString)(null==e?void 0:e.query)){const{query:t,...n}=e;return{...n,target:{refId:"annotation_query",query:t},mappings:{}}}return e},prepareQuery:e=>e.target,processEvents:(e,t)=>function(e,t){return(0,f.of)(e).pipe((e=>e.pipe(Cl((e=>{if(!(null==e?void 0:e.length))return(0,f.of)(void 0);if(1===e.length)return(0,f.of)(e[0]);const t={interpolate:e=>e};return(0,f.of)(e).pipe(o.standardTransformers.mergeTransformer.operator({},t),gl((e=>e[0])))})))),gl((e=>{if(!(null==e?void 0:e.length))return[];let n=!1,r=!1;const a={};for(const t of e.fields){a[(0,o.getFieldDisplayName)(t,e).toLowerCase()]=t}t||(t={});const i=[];for(const s of _l){const l=t[s.key]||{};if(l.source===o.AnnotationEventFieldSource.Skip)continue;const c={key:s.key,split:s.split};if(l.source===o.AnnotationEventFieldSource.Text)c.text=l.value;else{const t=(l.value||s.key).toLowerCase();c.field=a[t],!c.field&&s.field&&(c.field=s.field(e))}(c.field||c.text)&&(i.push(c),"time"===c.key?n=!0:"text"===c.key&&(r=!0))}if(!n||!r)return console.error("Cannot process annotation fields. No time or text present."),[];const s=[];for(let t=0;te.fields.find((e=>e.type===o.FieldType.time)),placeholder:"time, or the first time field"},{key:"timeEnd",help:"When this field is defined, the annotation will be treated as a range"},{key:"title"},{key:"text",field:e=>e.fields.find((e=>e.type===o.FieldType.string)),placeholder:"text, or the first text field"},{key:"tags",split:",",help:"The results will be split on comma (,)"},{key:"id"}],_l=[...i.config.publicDashboardAccessToken?[{key:"color"},{key:"isRegion"},{key:"source"}]:[],...Dl,{key:"userId"},{key:"login"},{key:"email"},{key:"prevState"},{key:"newState"},{key:"data"},{key:"panelId"},{key:"alertId"},{key:"dashboardId"},{key:"dashboardUID"}];const Ol=["prometheus","loki","elasticsearch","grafana-opensearch-datasource"];let Il=100;function Tl(e,t,n,r){var a;if(e.annotationQuery&&function(e){const{type:t}=e;return!e.annotations||Ol.includes(t)}(e))return console.warn("Using deprecated annotationQuery method, please upgrade your datasource"),(0,f.from)(e.annotationQuery({range:t.state.value,rangeRaw:t.state.value.raw,annotation:n,dashboard:{getVariables:(0,i.getTemplateSrv)().getVariables}})).pipe(gl((e=>({state:$.Done,events:e}))));const s={...Rl,...e.annotations},l={...null==(a=s.getDefaultQuery)?void 0:a.call(s),...n},c=s.prepareAnnotation(l);if(!c)return(0,f.of)({state:$.Done,events:[]});const u=s.prepareQuery(c);if(!u)return(0,f.of)({state:$.Done,events:[]});const d=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,p=o.rangeUtil.calculateInterval(t.state.value,d,e.interval),h={__interval:{text:p.interval,value:p.interval},__interval_ms:{text:p.intervalMs.toString(),value:p.intervalMs},__annotation:{text:c.name,value:c},__sceneObject:It(r)},g={startTime:Date.now(),requestId:"AQ"+Il++,range:t.state.value,maxDataPoints:d,scopedVars:h,...p,app:o.CoreApp.Dashboard,timezone:t.getTimeZone(),targets:[{...u,refId:"Anno"}],...Ue(r)};return(0,i.getRunRequest)()(e,g).pipe(Cl((e=>{const t=(null==e?void 0:e.series.length)?e.series:e.annotations;return(null==t?void 0:t.length)?(t.forEach((e=>{var t;(null==(t=e.meta)?void 0:t.dataTopic)||(e.meta={...e.meta||{},dataTopic:o.DataTopic.Annotations})})),s.processEvents(c,t).pipe(gl((t=>({state:e.state,events:t||[]}))))):(0,f.of)({state:e.state,events:[]})})))}function Al(e){return"panel-alert"===e.eventType}(class extends As{constructor(e){super({isEnabled:!0,...e},["query"]),this._scopedVars={__sceneObject:It(this)}}onEnable(){this.publishEvent(new i.RefreshEvent,!0);const e=Xi.getTimeRange(this);this._timeRangeSub=e.subscribeToState((()=>{this.runWithTimeRange(e)}))}onDisable(){var e;this.publishEvent(new i.RefreshEvent,!0),null==(e=this._timeRangeSub)||e.unsubscribe()}runLayer(){V();const e=Xi.getTimeRange(this);this.runWithTimeRange(e)}async runWithTimeRange(e){const{query:t}=this.state;if(this.querySub&&this.querySub.unsubscribe(),this._variableDependency.hasDependencyInLoadingState())V();else try{let n=Tl(await this.resolveDataSource(t),e,t,this).pipe(Me({type:"annotations",origin:this,cancel:()=>this.cancelQuery()}),(0,f.map)((e=>this.processEvents(t,e))));this.querySub=n.subscribe((e=>{this.publishResults(e)}))}catch(e){this.publishResults({...U,state:$.Error,errors:[{message:Ts(e)}]}),console.error("AnnotationsDataLayer error",e)}}async resolveDataSource(e){return await Ve(e.datasource||void 0,this._scopedVars)}processEvents(e,t){let n=(r=e,a=t.events||[],r.snapshotData&&delete(r=(0,k.cloneDeep)(r)).snapshotData,a.map((e=>{var t;const n={...e};switch(n.source=r,n.color=i.config.theme2.visualization.getColorByName(r.iconColor),n.type=r.name,n.isRegion=Boolean(n.timeEnd&&n.time!==n.timeEnd),null==(t=n.newState)?void 0:t.toLowerCase()){case"pending":n.color="yellow";break;case"alerting":n.color="red";break;case"ok":case"normal":n.color="green";break;case"no_data":case"nodata":n.color="gray"}return n})));var r,a;n=function(e){let t=[];const n=(0,k.partition)(e,"id"),r=(0,k.groupBy)(n[0],"id");return t=(0,k.map)(r,(e=>e.length>1&&!(0,k.every)(e,Al)?(0,k.find)(e,(e=>"panel-alert"!==e.eventType)):(0,k.head)(e))),t=(0,k.concat)(t,n[1]),t}(n);const s={...U,state:t.state},l=(0,o.arrayToDataFrame)(n);return l.meta={...l.meta,dataTopic:o.DataTopic.Annotations},s.series=[l],s}}).Component=function({model:e}){const{isHidden:t}=e.useState();if(t)return null;return p().createElement(ks,{layer:e})};class kl extends I{constructor(){super(...arguments),this.isDataLayer=!0,this._results=new f.ReplaySubject(1),this._dataLayersMerger=new ai}subscribeToAllLayers(e){e.length>0?this.querySub=this._dataLayersMerger.getMergedStream(e).subscribe(this._onLayerUpdateReceived.bind(this)):(this._results.next({origin:this,data:U}),this.setStateHelper({data:U}))}_onLayerUpdateReceived(e){var t;let n=[];for(const r of e)(null==(t=r.data)?void 0:t.series)&&(n=n.concat(r.data.series));const r={...U,series:n};this._results.next({origin:this,data:r}),this.setStateHelper({data:r})}getResultsStream(){return this._results}cancelQuery(){var e;null==(e=this.querySub)||e.unsubscribe()}setStateHelper(e){Ee(this,e)}}class Pl extends kl{constructor(e){var t,n;super({name:null!=(t=e.name)?t:"Data layers",layers:null!=(n=e.layers)?n:[]}),this.addActivationHandler((()=>this._onActivate()))}_onActivate(){return this._subs.add(this.subscribeToState(((e,t)=>{var n;e.layers!==t.layers&&(null==(n=this.querySub)||n.unsubscribe(),this.subscribeToAllLayers(e.layers))}))),this.subscribeToAllLayers(this.state.layers),()=>{var e;null==(e=this.querySub)||e.unsubscribe()}}}Pl.Component=({model:e})=>{const{layers:t}=e.useState();return p().createElement(p().Fragment,null,t.map((e=>p().createElement(e.Component,{model:e,key:e.state.key}))))};class Ll extends I{constructor(e){super(e),this._results=new f.ReplaySubject(1),this._variableDependency=new Di(this,{statePaths:["transformations"],onReferencedVariableValueChanged:()=>this.reprocessTransformations()}),this.addActivationHandler((()=>this.activationHandler()))}activationHandler(){const e=this.getSourceData();return this._subs.add(e.subscribeToState((e=>this.transform(e.data)))),e.state.data&&this.transform(e.state.data),()=>{this._transformSub&&this._transformSub.unsubscribe()}}getSourceData(){if(this.state.$data){if(this.state.$data instanceof Pl)throw new Error("SceneDataLayerSet can not be used as data provider for SceneDataTransformer.");return this.state.$data}if(!this.parent||!this.parent.parent)throw new Error("SceneDataTransformer must either have $data set on it or have a parent.parent with $data");return Xi.getData(this.parent.parent)}setContainerWidth(e){this.state.$data&&this.state.$data.setContainerWidth&&this.state.$data.setContainerWidth(e)}isDataReadyToDisplay(){const e=this.getSourceData();return!e.isDataReadyToDisplay||e.isDataReadyToDisplay()}reprocessTransformations(){this.transform(this.getSourceData().state.data,!0)}cancelQuery(){var e,t;null==(t=(e=this.getSourceData()).cancelQuery)||t.call(e)}getResultsStream(){return this._results}clone(e){const t=super.clone(e);return this._prevDataFromSource&&(t._prevDataFromSource=this._prevDataFromSource),t}haveAlreadyTransformedData(e){if(!this._prevDataFromSource)return!1;if(e===this._prevDataFromSource)return!0;const{series:t,annotations:n}=this._prevDataFromSource;return e.series===t&&e.annotations===n&&(this.state.data&&e.state!==this.state.data.state&&this.setState({data:{...this.state.data,state:e.state}}),!0)}transform(e,t=!1){var n;if(0===this.state.transformations.length||!e)return this._prevDataFromSource=e,this.setState({data:e}),void(e&&this._results.next({origin:this,data:e}));if(!t&&this.haveAlreadyTransformedData(e))return;let r=this._interpolateVariablesInTransformationConfigs(e);const a=r.filter((e=>!("options"in e)&&!("topic"in e)||(null==e.topic||e.topic===o.DataTopic.Series))).map((e=>"operator"in e?e.operator:e)),s=r.filter((e=>("options"in e||"topic"in e)&&e.topic===o.DataTopic.Annotations)).map((e=>"operator"in e?e.operator:e));this._transformSub&&this._transformSub.unsubscribe();const l={interpolate:t=>{var n;return Xi.interpolate(this,t,null==(n=e.request)?void 0:n.scopedVars)}};let c=[(0,o.transformDataFrame)(a,e.series,l)];e.annotations&&e.annotations.length>0&&s.length>0&&c.push((0,o.transformDataFrame)(s,null!=(n=e.annotations)?n:[])),this._transformSub=(0,f.forkJoin)(c).pipe((0,f.map)((t=>{const n=t[0],r=t[1];return{...e,series:n,annotations:null!=r?r:e.annotations}})),(0,f.catchError)((t=>{var n;console.error("Error transforming data: ",t);const r=(null==(n=this.getSourceData().state.data)?void 0:n.errors)||[],a=(0,i.toDataQueryError)(t);a.message=`Error transforming data: ${a.message}`;const s={...e,state:o.LoadingState.Error,errors:[...r,a]};return(0,f.of)(s)}))).subscribe((t=>{this.setState({data:t}),this._results.next({origin:this,data:t}),this._prevDataFromSource=e}))}_interpolateVariablesInTransformationConfigs(e){var t;const n=this.state.transformations;if(0===this._variableDependency.getNames().size)return n;return n.every((e=>"object"==typeof e))?JSON.parse(Xi.interpolate(this,JSON.stringify(n),null==(t=e.request)?void 0:t.scopedVars)):n.map((t=>{var n;return"object"==typeof t?JSON.parse(Xi.interpolate(this,JSON.stringify(t),null==(n=e.request)?void 0:n.scopedVars)):t}))}}function Nl({variable:e,layout:t,showAlways:n,hideLabel:r}){return T(e,{shouldActivateOrKeepAlive:!0}).hide!==o.VariableHide.hideVariable||n?"vertical"===t?p().createElement("div",{className:Vl,"data-testid":nt.pages.Dashboard.SubMenu.submenuItem},p().createElement(Ml,{variable:e,layout:t,hideLabel:r}),p().createElement(e.Component,{model:e})):p().createElement("div",{className:Bl,"data-testid":nt.pages.Dashboard.SubMenu.submenuItem},p().createElement(Ml,{variable:e,hideLabel:r}),p().createElement(e.Component,{model:e})):null}function Ml({variable:e,layout:t,hideLabel:n}){var r;const{state:a}=e;if(e.state.hide===o.VariableHide.hideLabel||n)return null;const i=`var-${a.key}`,s=a.label||a.name;return p().createElement(Lt,{htmlFor:i,isLoading:a.loading,onCancel:()=>{var t;return null==(t=e.onCancel)?void 0:t.call(e)},label:s,error:a.error,layout:t,description:null!=(r=a.description)?r:void 0})}(class extends I{}).Component=function({model:e}){const t=Xi.getVariables(e).useState();return p().createElement(p().Fragment,null,t.variables.map((t=>p().createElement(Nl,{key:t.state.key,variable:t,layout:e.state.layout}))))};const Bl=(0,rt.css)({display:"flex","> :nth-child(2)":(0,rt.css)({borderTopLeftRadius:0,borderBottomLeftRadius:0})}),Vl=(0,rt.css)({display:"flex",flexDirection:"column"});(class extends I{}).Component=function({model:e}){const t=Xi.lookupVariable(e.state.variableName,e);if(!t)return null;return p().createElement(Nl,{key:t.state.key,variable:t,layout:e.state.layout,showAlways:!0})};class jl extends I{constructor(e){super(e),this._variablesThatHaveChanged=new Set,this._variablesToUpdate=new Set,this._updating=new Map,this._variableValueRecorder=new je,this._variableDependency=new $l(this._handleParentVariableUpdatesCompleted.bind(this)),this._onActivate=()=>{const e=Xi.getTimeRange(this);this._subs.add(this.subscribeToEvent(te,(e=>this._handleVariableValueChanged(e.payload)))),this._subs.add(e.subscribeToState((()=>{this._refreshTimeRangeBasedVariables()}))),this._subs.add(this.subscribeToState(this._onStateChanged)),this._checkForVariablesThatChangedWhileInactive();for(const e of this.state.variables)this._variableNeedsUpdate(e)&&this._variablesToUpdate.add(e);return this._updateNextBatch(),this._onDeactivate},this._onDeactivate=()=>{var e;for(const t of this._updating.values())null==(e=t.subscription)||e.unsubscribe();for(const e of this.state.variables)this._variablesToUpdate.has(e)||this._updating.has(e)||this._variableValueRecorder.recordCurrentValue(e);this._variablesToUpdate.clear(),this._updating.clear()},this._onStateChanged=(e,t)=>{const n=this._variablesToUpdate.size;for(const n of t.variables)if(!e.variables.includes(n)){const e=this._updating.get(n);(null==e?void 0:e.subscription)&&e.subscription.unsubscribe(),this._updating.delete(n),this._variablesToUpdate.delete(n)}for(const n of e.variables)t.variables.includes(n)||this._variableNeedsUpdate(n)&&this._variablesToUpdate.add(n);0===n&&this._variablesToUpdate.size>0&&this._updateNextBatch()},this.addActivationHandler(this._onActivate)}getByName(e){return this.state.variables.find((t=>t.state.name===e))}_refreshTimeRangeBasedVariables(){for(const e of this.state.variables)"refresh"in e.state&&e.state.refresh===o.VariableRefresh.onTimeRangeChanged&&this._variablesToUpdate.add(e);this._updateNextBatch()}_checkForVariablesThatChangedWhileInactive(){if(this._variableValueRecorder.hasValues())for(const e of this.state.variables)this._variableValueRecorder.hasValueChanged(e)&&(Fl(e,"Changed while in-active"),this._addDependentVariablesToUpdateQueue(e))}_variableNeedsUpdate(e){return!e.isLazy&&(!!e.validateAndUpdate&&(!this._variableValueRecorder.hasRecordedValue(e)||(Fl(e,"Skipping updateAndValidate current value valid"),!1)))}_updateNextBatch(){for(const e of this._variablesToUpdate){if(!e.validateAndUpdate)throw new Error("Variable added to variablesToUpdate but does not have validateAndUpdate");if(this._updating.has(e))continue;if(Xi.hasVariableDependencyInLoadingState(e))continue;const t={variable:e};this._updating.set(e,t),Fl(e,"updateAndValidate started"),t.subscription=e.validateAndUpdate().subscribe({next:()=>this._validateAndUpdateCompleted(e),complete:()=>this._validateAndUpdateCompleted(e),error:t=>this._handleVariableError(e,t)})}}_validateAndUpdateCompleted(e){var t;if(!this._updating.has(e))return;const n=this._updating.get(e);null==(t=null==n?void 0:n.subscription)||t.unsubscribe(),this._updating.delete(e),this._variablesToUpdate.delete(e),Fl(e,"updateAndValidate completed"),this._notifyDependentSceneObjects(e),this._updateNextBatch()}cancel(e){var t;const n=this._updating.get(e);null==(t=null==n?void 0:n.subscription)||t.unsubscribe(),this._updating.delete(e),this._variablesToUpdate.delete(e)}_handleVariableError(e,t){var n;const r=this._updating.get(e);null==(n=null==r?void 0:r.subscription)||n.unsubscribe(),this._updating.delete(e),this._variablesToUpdate.delete(e),e.setState({loading:!1,error:t.message}),console.error("SceneVariableSet updateAndValidate error",t),Fl(e,"updateAndValidate error",t),this._notifyDependentSceneObjects(e),this._updateNextBatch()}_handleVariableValueChanged(e){this._variablesThatHaveChanged.add(e),this._addDependentVariablesToUpdateQueue(e),this._updating.has(e)||(this._updateNextBatch(),this._notifyDependentSceneObjects(e))}_handleParentVariableUpdatesCompleted(e,t){t&&this._addDependentVariablesToUpdateQueue(e),this._variablesToUpdate.size>0&&0===this._updating.size&&this._updateNextBatch()}_addDependentVariablesToUpdateQueue(e){for(const t of this.state.variables)t.variableDependency&&t.variableDependency.hasDependencyOn(e.state.name)&&(Fl(t,"Added to update queue, dependant variable value changed"),this._updating.has(t)&&t.onCancel&&t.onCancel(),this._variablesToUpdate.add(t))}_notifyDependentSceneObjects(e){this.parent&&(this._traverseSceneAndNotify(this.parent,e,this._variablesThatHaveChanged.has(e)),this._variablesThatHaveChanged.delete(e))}_traverseSceneAndNotify(e,t,n){if(this!==e&&e.isActive){if(e.state.$variables&&e.state.$variables!==this){const n=e.state.$variables.getByName(t.state.name);if(null==n?void 0:n.isAncestorLoading)t=n;else if(n)return}e.variableDependency&&e.variableDependency.variableUpdateCompleted(t,n),e.forEachChild((e=>this._traverseSceneAndNotify(e,t,n)))}}isVariableLoadingOrWaitingToUpdate(e){return!(!e.isAncestorLoading||!e.isAncestorLoading())||(!(!this._variablesToUpdate.has(e)&&!this._updating.has(e))||Xi.hasVariableDependencyInLoadingState(e))}}function Fl(e,t,n){V(0,e.state.name)}class $l{constructor(e){this._variableUpdatesCompleted=e,this._emptySet=new Set}getNames(){return this._emptySet}hasDependencyOn(e){return!1}variableUpdateCompleted(e,t){this._variableUpdatesCompleted(e,t)}}class zl extends Re{constructor(e){super({type:"custom",query:"",value:"",text:"",options:[],name:"",...e}),this._variableDependency=new Di(this,{statePaths:["query"]})}getValueOptions(e){var t;const n=(null!=(t=Xi.interpolate(this,this.state.query).match(/(?:\\,|[^,])+/g))?t:[]).map((e=>{var t;e=e.replace(/\\,/g,",");const n=null!=(t=/^(.+)\s:\s(.+)$/g.exec(e))?t:[];if(3===n.length){const[,e,t]=n;return{label:e.trim(),value:t.trim()}}return{label:e.trim(),value:e.trim()}}));return n.length||(this.skipNextValidation=!0),(0,f.of)(n)}}zl.Component=({model:e})=>p().createElement(St,{model:e});class Ul extends Re{constructor(e){super({type:"datasource",value:"",text:"",options:[],name:"",regex:"",pluginId:"",...e}),this._variableDependency=new Di(this,{statePaths:["regex"]})}getValueOptions(e){if(!this.state.pluginId)return(0,f.of)([]);const t=(0,i.getDataSourceSrv)().getList({metrics:!0,variables:!1,pluginId:this.state.pluginId});let n;if(this.state.regex){const e=Xi.interpolate(this,this.state.regex,void 0,"regex");n=(0,o.stringToJsRegex)(e)}const r=[];for(let e=0;e5)return[];for(const a of n){const n=`${e}${a}`;r.push({name:n,children:Gl(n,t+1)})}return r}function ql(e,t,n){if(n>=t.length)return e;if("*"===t[n])return e;const r=t[n];let a=[],o=[r];r.startsWith("{")&&(o=r.replace(/\{|\}/g,"").split(","));for(const r of e)for(const e of o)if(-1!==e.indexOf("*")){const o=e.replace("*","");new RegExp(`^${o}.*`,"gi").test(r.name)&&(a=a.concat(ql([r],t,n+1)))}else r.name===e&&(a=a.concat(ql(r.children,t,n+1)));return a}function Ql(e){if(0===e.indexOf("value"))return[{name:e,children:[]}];return ql(Gl("",0),e.split("."),0)}Ul.Component=({model:e})=>p().createElement(St,{model:e});function Yl({model:e}){const{value:t,key:n,loading:r}=e.useState(),a=(0,u.useCallback)((t=>{e.setValue(t.currentTarget.value)}),[e]),o=(0,u.useCallback)((t=>{"Enter"===t.key&&e.setValue(t.currentTarget.value)}),[e]);return p().createElement(qe.AutoSizeInput,{id:n,placeholder:"Enter value",minWidth:15,maxWidth:30,value:t,loading:r,onBlur:a,onKeyDown:o})}(class extends Re{constructor(e,t=!1){super({type:"custom",name:"Test",value:"Value",text:"Text",query:"Query",options:[],refresh:o.VariableRefresh.onDashboardLoad,updateOptions:!0,...e}),this.completeUpdate=new f.Subject,this.isGettingValues=!0,this.getValueOptionsCount=0,this.isLazy=!1,this._variableDependency=new Di(this,{statePaths:["query"]}),this.isLazy=t}getValueOptions(e){const{delayMs:t}=this.state;this.getValueOptionsCount+=1;const n=Xi.getQueryController(this);return new f.Observable((e=>{const r={type:"variable",origin:this,cancel:()=>e.complete()};if(n&&n.queryStarted(r),this.setState({loading:!0}),this.state.throwError)throw new Error(this.state.throwError);const a=Xi.interpolate(this,this.state.query),o=this.getOptions(a),i=this.completeUpdate.subscribe({next:()=>{const t={issuedQuery:a,loading:!1};this.state.updateOptions&&(t.options=o),this.setState(t),e.next(o),e.complete()}});let s;return t?s=window.setTimeout((()=>this.signalUpdateCompleted()),t):0===t&&this.signalUpdateCompleted(),this.isGettingValues=!0,()=>{i.unsubscribe(),window.clearTimeout(s),this.isGettingValues=!1,this.state.loading&&this.setState({loading:!1}),n&&n.queryCompleted(r)}}))}cancel(){const e=L(this,(e=>e instanceof jl?e:void 0));null==e||e.cancel(this)}getOptions(e){return this.state.optionsToReturn?this.state.optionsToReturn:Ql(e).map((e=>({label:e.name,value:e.name})))}signalUpdateCompleted(){this.completeUpdate.next(1)}}).Component=({model:e})=>p().createElement(St,{model:e});(class extends I{constructor(e){super({type:"textbox",value:"",name:"",...e}),this._urlSync=new W(this,{keys:()=>[this.getKey()]})}getValue(){return this.state.value}setValue(e){e!==this.state.value&&(this.setState({value:e}),this.publishEvent(new te(this),!0))}getKey(){return`var-${this.state.name}`}getUrlState(){return{[this.getKey()]:this.state.value}}updateFromUrl(e){const t=e[this.getKey()];"string"==typeof t&&this.setValue(t)}}).Component=({model:e})=>p().createElement(Yl,{model:e});(class extends I{constructor(e){super({type:"interval",value:"",intervals:["1m","10m","30m","1h","6h","12h","1d","7d","14d","30d"],name:"",autoStepCount:30,autoMinInterval:"10s",autoEnabled:!1,refresh:rs.CO.onTimeRangeChanged,...e}),this._onChange=e=>{this.setState({value:e.value}),this.publishEvent(new te(this),!0)},this._urlSync=new W(this,{keys:()=>[this.getKey()]})}getKey(){return`var-${this.state.name}`}getUrlState(){return{[this.getKey()]:this.state.value}}updateFromUrl(e){const t={},n=e[this.getKey()];"string"==typeof n&&(n.startsWith("$__auto_interval_")?t.value=ve:t.value=n),this.setState(t)}getOptionsForSelect(){const{value:e,intervals:t,autoEnabled:n}=this.state;let r=t.map((e=>({value:e,label:e})));return n&&(r=[{value:ve,label:"Auto"},...r]),e&&!r.some((t=>t.value===e))&&r.push({value:e,label:e}),r}getValue(){const{value:e,autoStepCount:t,autoMinInterval:n}=this.state;return e===ve?this.getAutoRefreshInteval(t,n):e}getAutoRefreshInteval(e,t){const n=Xi.getTimeRange(this).state.value;return o.rangeUtil.calculateInterval(n,e,t).interval}validateAndUpdate(){const{value:e,intervals:t}=this.state;let n=!1;if(e===ve)n=!0;else if(!e&&t.length>0){const e=t[0];this.setState({value:e}),n=!0}return n&&this.publishEvent(new te(this),!0),(0,f.of)({})}}).Component=({model:e})=>{const{key:t,value:n}=e.useState();return p().createElement(qe.Select,{id:t,placeholder:"Select value",width:"auto",value:n,tabSelectsValue:!1,options:e.getOptionsForSelect(),onChange:e._onChange})};var Xl,Kl,Zl=e=>{throw TypeError(e)},Jl=(e,t,n)=>t.has(e)||Zl("Cannot "+n),ec=(e,t,n)=>(Jl(e,t,"read from private field"),n?n.call(e):t.get(e)),tc=(e,t,n)=>t.has(e)?Zl("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),nc=(e,t,n,r)=>(Jl(e,t,"write to private field"),t.set(e,n),n);class rc extends o.BusEventWithPayload{}rc.type="new-scene-object-added";class ac{constructor(e={},t=i.locationService){this._urlKeyMapper=new Ki,this._options=e,this._locationService=t,this._paramsCache=new oc(t)}initSync(e){var t;if(this._subs&&(V(0,0,null==(t=this._sceneRoot)||t.state.key),this._subs.unsubscribe()),V(0,0,e.state.key),this._sceneRoot=e,this._subs=new f.Subscription,this._subs.add(e.subscribeToEvent(E,(e=>{this.handleSceneObjectStateChanged(e.payload.changedObject)}))),this._subs.add(e.subscribeToEvent(rc,(e=>{this.handleNewObject(e.payload)}))),this._urlKeyMapper.clear(),this._lastLocation=this._locationService.getLocation(),this.handleNewObject(this._sceneRoot),this._options.updateUrlOnInit){const t=Ji(e);(function(e,t){for(let n in e)if(!ns(t.getAll(n),e[n]))return!0;return!1})(t,this._paramsCache.getParams())&&this._locationService.partial(t,!0)}}cleanUp(e){this._sceneRoot===e&&(V(),this._subs&&(this._subs.unsubscribe(),this._subs=void 0,V(0,0,(this._sceneRoot.state.key,e.state.key))),this._sceneRoot=void 0,this._lastLocation=void 0)}handleNewLocation(e){this._sceneRoot&&this._lastLocation!==e&&(V(),this._lastLocation=e,es(this._sceneRoot,this._paramsCache.getParams(),this._urlKeyMapper))}handleNewObject(e){this._sceneRoot&&es(e,this._paramsCache.getParams(),this._urlKeyMapper)}handleSceneObjectStateChanged(e){var t,n;if(!e.urlSync)return;const r=e.urlSync.getUrlState(),a=this._locationService.getSearch(),o={};for(const[t,n]of Object.entries(r)){const r=this._urlKeyMapper.getUniqueKey(t,e);ns(a.getAll(r),n)||(o[r]=n)}if(Object.keys(o).length>0){const a=!0!==(null==(n=(t=e.urlSync).shouldCreateHistoryStep)?void 0:n.call(t,r));V(),this._locationService.partial(o,a),this._lastLocation=this._locationService.getLocation()}}getUrlState(e){return Ji(e)}}class oc{constructor(e){this.locationService=e,tc(this,Xl),tc(this,Kl)}getParams(){const e=this.locationService.getLocation();return ec(this,Kl)===e||(nc(this,Kl,e),nc(this,Xl,new URLSearchParams(e.search))),ec(this,Xl)}}function ic(e,t={}){const n=(0,a.useLocation)(),r=Ce(),[o,i]=(0,u.useState)(!1),s=function(e,t){return(0,u.useMemo)((()=>new ac({updateUrlOnInit:e.updateUrlOnInit,createBrowserHistorySteps:e.createBrowserHistorySteps},t)),[e.updateUrlOnInit,e.createBrowserHistorySteps,t])}(t,r);return(0,u.useEffect)((()=>(s.initSync(e),i(!0),()=>s.cleanUp(e))),[e,s]),(0,u.useEffect)((()=>{const e=r.getLocation(),t=e!==n?e:n;e!==n&&V(),s.handleNewLocation(t)}),[e,s,n,r]),o}Xl=new WeakMap,Kl=new WeakMap;class sc extends I{constructor(e){super(e),this.addActivationHandler((()=>{const e=function(e){const t=window.__grafanaSceneContext;return V(),window.__grafanaSceneContext=e,()=>{window.__grafanaSceneContext===e&&(V(),window.__grafanaSceneContext=t)}}(this);return()=>{e()}}))}}sc.Component=function({model:e}){const{body:t,controls:n}=e.useState(),r=(0,qe.useStyles2)(lc);return p().createElement("div",{className:r.container},n&&p().createElement("div",{className:r.controls},n.map((e=>p().createElement(e.Component,{key:e.state.key,model:e})))),p().createElement("div",{className:r.body},p().createElement(t.Component,{model:t})))};const lc=e=>({container:(0,rt.css)({flexGrow:1,display:"flex",gap:e.spacing(2),minHeight:"100%",flexDirection:"column"}),body:(0,rt.css)({flexGrow:1,display:"flex",gap:e.spacing(1)}),controls:(0,rt.css)({display:"flex",gap:e.spacing(2),alignItems:"flex-end",flexWrap:"wrap"})});class cc extends I{addItem(e){this.setState({items:this.state.items?[...this.state.items,e]:[e]})}setItems(e){this.setState({items:e})}}cc.Component=function({model:e}){const{items:t=[]}=e.useState(),n=p().useRef(null);(0,u.useEffect)((()=>{n.current&&n.current.focus()}),[]);const r=e=>e.map((e=>{switch(e.type){case"divider":return p().createElement(qe.Menu.Divider,{key:e.text});case"group":return p().createElement(qe.Menu.Group,{key:e.text,label:e.text},e.subMenu?r(e.subMenu):void 0);default:return p().createElement(qe.Menu.Item,{key:e.text,label:e.text,icon:e.iconClassName,childItems:e.subMenu?r(e.subMenu):void 0,url:e.href,onClick:e.onClick,shortcut:e.shortcut,testId:nt.components.Panels.Panel.menuItems(e.text)})}}));return p().createElement(qe.Menu,{ref:n},r(t))};var uc=function(){return uc=Object.assign||function(e){for(var t,n=1,r=arguments.length;nn?async function(e,t,n,r){var a,o,s,l;const c=null==(a=e.request)?void 0:a.targets;if(!c)return"";const{from:u,to:d}=n,p=null==(o=e.request)?void 0:o.filters,f={__sceneObject:It(t)},h=(await Promise.allSettled(c.map((async e=>{var t;const n=await(0,i.getDataSourceSrv)().get(e.datasource);return(null==(t=n.interpolateVariablesInQueries)?void 0:t.call(n,[e],null!=f?f:{},p)[0])||e})))).filter((e=>"fulfilled"===e.status)).map((e=>e.value)).map((e=>{var t;return null!=(t=null==r?void 0:r(e))?t:e})),g=null!=h?h:[];let m=new Set(g.map((e=>{var t;return null==(t=e.datasource)?void 0:t.uid}))).size>1?"-- Mixed --":null==(l=null==(s=g.find((e=>{var t;return!!(null==(t=e.datasource)?void 0:t.uid)})))?void 0:s.datasource)?void 0:l.uid;if((null==g?void 0:g.length)&&m&&u&&d)return`/explore?left=${encodeURIComponent(JSON.stringify({datasource:m,queries:g,range:{from:u,to:d}}))}`;return""}(n,e,{from:r,to:a},t.transform):""),[n,e,r,a]),s=(0,i.useReturnToPrevious)();if(o)return p().createElement(qe.LinkButton,{key:"explore",icon:"compass",size:"sm",variant:"secondary",href:o,onClick:()=>{var e;t.returnToPrevious&&s(t.returnToPrevious.title,t.returnToPrevious.href),null==(e=t.onClick)||e.call(t)}},"Explore");return null};function pc(e){return e instanceof Oc}(class extends I{}).Component=function({model:e}){const{body:t}=e.useState(),n=e.parent;if(n&&(r=n,!(r instanceof Rc))&&!pc(n))throw new Error("SceneGridItem must be a child of SceneGridLayout or SceneGridRow");var r;if(!t)return null;return p().createElement(t.Component,{model:t})};var fc=n(2548),hc=n.n(fc);const gc=function(e){(0,u.useEffect)(e,[])};function mc(){const e=(0,u.useRef)(void 0);return null!=e.current||(e.current=(0,k.uniqueId)()),e.current}const vc=p().forwardRef((({children:e,onLoad:t,onChange:n,className:r,...a},o)=>{const i=mc(),{hideEmpty:s}=(0,qe.useStyles2)(bc),[l,c]=(0,u.useState)(!1),[d,f]=(0,u.useState)(!1),h=(0,u.useRef)(null);return(0,u.useImperativeHandle)(o,(()=>h.current)),gc((()=>{vc.addCallback(i,(e=>{!l&&e.isIntersecting&&(c(!0),null==t||t()),f(e.isIntersecting),null==n||n(e.isIntersecting)}));const e=h.current;return e&&vc.observer.observe(e),()=>{e&&vc.observer.unobserve(e),delete vc.callbacks[i],0===Object.keys(vc.callbacks).length&&vc.observer.disconnect()}})),p().createElement("div",{id:i,ref:h,className:`${s} ${r}`,...a},!l&&" ",l&&("function"==typeof e?e({isInView:d}):e))}));function bc(){return{hideEmpty:(0,rt.css)({"&:empty":{display:"none"}})}}vc.displayName="LazyLoader",vc.callbacks={},vc.addCallback=(e,t)=>vc.callbacks[e]=t,vc.observer=new IntersectionObserver((e=>{for(const t of e)"function"==typeof vc.callbacks[t.target.id]&&vc.callbacks[t.target.id](t)}),{rootMargin:"100px"});const yc=p().forwardRef(((e,t)=>{var n;const{grid:r,layoutItem:a,index:o,totalCount:i,isLazy:s,style:l,onLoad:c,onChange:u,children:d,...f}=e,h=r.getSceneLayoutChild(a.i),g=null==(n=h.getClassName)?void 0:n.call(h),m=p().createElement(h.Component,{model:h,key:h.state.key});return s?p().createElement(vc,{...f,key:h.state.key,"data-griditem-key":h.state.key,className:(0,rt.cx)(g,e.className),style:l,ref:t},m,d):p().createElement("div",{...f,ref:t,key:h.state.key,"data-griditem-key":h.state.key,className:(0,rt.cx)(g,e.className),style:l},m,d)}));function wc(e,t,n){e.current?t?e.current.classList.add("react-grid-layout--enable-move-animations"):e.current.classList.remove("react-grid-layout--enable-move-animations"):n||setTimeout((()=>wc(e,t,!0)),50)}yc.displayName="GridItemWrapper";const Sc=p().forwardRef((({handleAxis:e,...t},n)=>{const r=(0,qe.useStyles2)(xc);return p().createElement("div",{ref:n,...t,className:`${r} scene-resize-handle`},p().createElement("svg",{width:"16px",height:"16px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},p().createElement("path",{d:"M21 15L15 21M21 8L8 21",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})))}));function xc(e){return(0,rt.css)({position:"absolute",bottom:0,right:0,zIndex:999,padding:e.spacing(1.5,0,0,1.5),color:e.colors.border.strong,cursor:"se-resize","&:hover":{color:e.colors.text.link},svg:{display:"block"},".react-resizable-hide &":{display:"none"}})}Sc.displayName="ResizeHandle";class Ec extends o.BusEventWithPayload{}Ec.type="scene-grid-layout-drag-start";const Cc=class e extends I{constructor(e){super({...e,children:Dc(e.children)}),this._skipOnLayoutChange=!1,this._oldLayout=[],this._loadOldLayout=!1,this.onLayoutChange=e=>{if(this._skipOnLayoutChange)this._skipOnLayoutChange=!1;else{this._loadOldLayout&&(e=[...this._oldLayout],this._loadOldLayout=!1);for(const r of e){const e=this.getSceneLayoutChild(r.i),a={x:r.x,y:r.y,width:r.w,height:r.h};t=e.state,n=a,(t.x!==n.x||t.y!==n.y||t.width!==n.width||t.height!==n.height)&&e.setState({...a})}var t,n;this.setState({children:Dc(this.state.children)})}},this.onResizeStop=(e,t,n)=>{this.getSceneLayoutChild(n.i).setState({width:n.w,height:n.h})},this.onDragStart=e=>{this._oldLayout=[...e]},this.onDragStop=(e,t,n)=>{const r=this.getSceneLayoutChild(n.i);e=_c(e);for(let t=0;te.i===n.i));let o=this.findGridItemSceneParent(e,a-1),i=this.state.children;r instanceof Oc&&o instanceof Oc&&(this.isRowDropValid(e,n,a)||(this._loadOldLayout=!0),o=this),o!==r.parent&&(i=this.moveChildTo(r,o)),this.setState({children:Dc(i)}),this._skipOnLayoutChange=!0}}isDraggable(){var e;return null!=(e=this.state.isDraggable)&&e}getDragClass(){return`grid-drag-handle-${this.state.key}`}getDragClassCancel(){return"grid-drag-cancel"}getDragHooks(){return{onDragStart:(e,t)=>{this.publishEvent(new Ec({evt:e,panel:t}),!0)}}}toggleRow(e){var t,n;if(!e.state.isCollapsed)return e.setState({isCollapsed:!0}),void this.setState({});const r=e.state.children;if(0===r.length)return e.setState({isCollapsed:!1}),void this.setState({});const a=e.state.y,o=(null!=(t=r[0].state.y)?t:a)-(a+1);let i=a;for(const e of r){const t={...e.state};t.y=null!=(n=t.y)?n:a,t.y-=o,t.y!==e.state.y&&e.setState(t),i=Math.max(i,Number(t.y)+Number(t.height))}const s=i-a-1;for(const t of this.state.children)if(t.state.y>a&&this.pushChildDown(t,s),pc(t)&&t!==e)for(const e of t.state.children)e.state.y>a&&this.pushChildDown(e,s);e.setState({isCollapsed:!1}),this.setState({})}ignoreLayoutChange(e){this._skipOnLayoutChange=e}getSceneLayoutChild(e){for(const t of this.state.children){if(t.state.key===e)return t;if(t instanceof Oc)for(const n of t.state.children)if(n.state.key===e)return n}throw new Error("Scene layout child not found for GridItem")}pushChildDown(e,t){e.setState({y:e.state.y+t})}findGridItemSceneParent(e,t){for(let n=t;n>=0;n--){const t=e[n],r=this.getSceneLayoutChild(t.i);if(r instanceof Oc)return r.state.isCollapsed?this:r}return this}isRowDropValid(t,n,r){if(t[t.length-1].i===n.i)return!0;const a=this.getSceneLayoutChild(t[r+1].i);return a instanceof Oc||a.parent instanceof e}moveChildTo(t,n){const r=t.parent;let a=this.state.children;const o=t.clone({key:t.state.key});if(r instanceof Oc){const e=r.clone();if(e.setState({children:e.state.children.filter((e=>e.state.key!==t.state.key))}),a=a.map((t=>t===r?e:t)),n instanceof Oc){const e=n.clone();e.setState({children:[...e.state.children,o]}),a=a.map((t=>t===n?e:t))}else a=[...a,o]}else if(!(n instanceof e)){a=a.filter((e=>e.state.key!==t.state.key));const e=n.clone();e.setState({children:[...e.state.children,o]}),a=a.map((t=>t===n?e:t))}return a}toGridCell(e){var t,n;const r=e.state;let a=null!=(t=r.x)?t:0,o=null!=(n=r.y)?n:0;const i=Number.isInteger(Number(r.width))?Number(r.width):4,s=Number.isInteger(Number(r.height))?Number(r.height):4;let l=e.state.isDraggable,c=e.state.isResizable;return e instanceof Oc&&(l=!!e.state.isCollapsed,c=!1),{i:e.state.key,x:a,y:o,h:s,w:i,isResizable:c,isDraggable:l}}buildGridLayout(e,t){let n=[];for(const e of this.state.children)if(n.push(this.toGridCell(e)),e instanceof Oc&&!e.state.isCollapsed)for(const t of e.state.children)n.push(this.toGridCell(t));return n=_c(n),this.state.UNSAFE_fitPanels&&(n=function(e,t){const n=t-32,r=Math.max(...e.map((e=>e.h+e.y)))/Math.floor(n/38);return e.map((e=>({...e,y:Math.round(e.y/r)||0,h:Math.round(e.h/r)||1})))}(n,t)),e<768?(this._skipOnLayoutChange=!0,n.map((e=>({...e,w:24})))):(this._skipOnLayoutChange=!1,n)}};Cc.Component=function({model:e}){const{children:t,isLazy:n,isDraggable:r,isResizable:a}=e.useState(),[o,{width:i,height:s}]=us(),l=(0,u.useRef)(null);return(0,u.useEffect)((()=>{wc(l,!!r)}),[r]),function(e){if(e.some((e=>void 0===e.state.height||void 0===e.state.width||void 0===e.state.x||void 0===e.state.y)))throw new Error("All children must have a size specified")}(t),p().createElement("div",{ref:o,style:{flex:"1 1 auto",position:"relative",zIndex:1,width:"100%"}},((t,o)=>{if(!t||!o)return null;const i=e.buildGridLayout(t,o);return p().createElement("div",{ref:l,style:{width:`${t}px`,height:"100%"},className:"react-grid-layout"},p().createElement(hc(),{width:t,isDraggable:r&&t>768,isResizable:null!=a&&a,containerPadding:[0,0],useCSSTransforms:!0,margin:[8,8],cols:24,rowHeight:30,draggableHandle:`.grid-drag-handle-${e.state.key}`,draggableCancel:".grid-drag-cancel",layout:i,onDragStart:e.onDragStart,onDragStop:e.onDragStop,onResizeStop:e.onResizeStop,onLayoutChange:e.onLayoutChange,isBounded:!1,resizeHandle:p().createElement(Sc,null)},i.map(((t,r)=>p().createElement(yc,{key:t.i,grid:e,layoutItem:t,index:r,isLazy:n,totalCount:i.length})))))})(i,s))};let Rc=Cc;function Dc(e){return e.forEach((e=>{e instanceof Oc&&e.setState({children:Dc(e.state.children)})})),[...e].sort(((e,t)=>e.state.y-t.state.y||e.state.x-t.state.x))}function _c(e){return[...e].sort(((e,t)=>e.y-t.y||e.x-t.x))}class Oc extends I{constructor(e){super({children:e.children||[],isCollapsible:e.isCollapsible||!0,title:e.title||"",...e,x:0,height:1,width:24}),this._variableDependency=new Di(this,{statePaths:["title"],handleTimeMacros:!0}),this.onCollapseToggle=()=>{this.state.isCollapsible&&this.getGridLayout().toggleRow(this)}}getGridLayout(){const e=this.parent;if(!(e&&e instanceof Rc))throw new Error("SceneGridRow must be a child of SceneGridLayout");return e}getUrlState(){return{rowc:this.state.isCollapsed?"1":"0"}}updateFromUrl(e){null!=e.rowc&&e.rowc!==this.getUrlState().rowc&&this.onCollapseToggle()}}Oc.Component=function({model:e}){const t=(0,qe.useStyles2)(Ic),{isCollapsible:n,isCollapsed:r,title:a,actions:o,children:i}=e.useState(),s=e.getGridLayout(),l=s.getDragClass(),c=s.isDraggable(),u=i?i.length:0,d=1===u?"panel":"panels";return p().createElement("div",{className:(0,rt.cx)(t.row,r&&t.rowCollapsed)},p().createElement("div",{className:t.rowTitleAndActionsGroup},p().createElement("button",{onClick:e.onCollapseToggle,className:t.rowTitleButton,"aria-label":r?"Expand row":"Collapse row","data-testid":nt.components.DashboardRow.title(Xi.interpolate(e,a,void 0,"text"))},n&&p().createElement(qe.Icon,{name:r?"angle-right":"angle-down"}),p().createElement("span",{className:t.rowTitle,role:"heading"},Xi.interpolate(e,a,void 0,"text"))),p().createElement("span",{className:(0,rt.cx)(t.panelCount,r&&t.panelCountCollapsed)},"(",u," ",d,")"),o&&p().createElement("div",{className:t.rowActions},p().createElement(o.Component,{model:o}))),c&&r&&p().createElement("div",{className:(0,rt.cx)(t.dragHandle,l)},p().createElement(qe.Icon,{name:"draggabledots"})))};const Ic=e=>({row:(0,rt.css)({width:"100%",height:"30px",display:"flex",justifyContent:"space-between",gap:e.spacing(1)}),rowTitleButton:(0,rt.css)({display:"flex",alignItems:"center",cursor:"pointer",background:"transparent",border:"none",minWidth:0,gap:e.spacing(1)}),rowCollapsed:(0,rt.css)({borderBottom:`1px solid ${e.colors.border.weak}`}),rowTitle:(0,rt.css)({fontSize:e.typography.h5.fontSize,fontWeight:e.typography.fontWeightMedium,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",flexGrow:1,minWidth:0}),collapsedInfo:(0,rt.css)({fontSize:e.typography.bodySmall.fontSize,color:e.colors.text.secondary,display:"flex",alignItems:"center",flexGrow:1}),rowTitleAndActionsGroup:(0,rt.css)({display:"flex",minWidth:0,"&:hover, &:focus-within":{"& > div":{opacity:1}}}),rowActions:(0,rt.css)({display:"flex",whiteSpace:"nowrap",opacity:0,transition:"200ms opacity ease-in 200ms","&:hover, &:focus-within":{opacity:1}}),dragHandle:(0,rt.css)({display:"flex",padding:e.spacing(0,1),alignItems:"center",justifyContent:"flex-end",cursor:"move",color:e.colors.text.secondary,"&:hover":{color:e.colors.text.primary}}),panelCount:(0,rt.css)({whiteSpace:"nowrap",paddingLeft:e.spacing(2),color:e.colors.text.secondary,fontStyle:"italic",fontSize:e.typography.size.sm,fontWeight:"normal",display:"none",lineHeight:"30px"}),panelCountCollapsed:(0,rt.css)({display:"inline-block"})});(class extends I{constructor(){super(...arguments),this.onToggle=()=>{this.setState({isCollapsed:!this.state.isCollapsed})},this.onRemove=()=>{const e=this.parent;"body"in e.state&&e.setState({body:void 0})}}}).Component=function({model:e}){const{title:t,isCollapsed:n,canCollapse:r,canRemove:a,body:o,controls:i}=e.useState(),s=(0,qe.useStyles2)(Ic),l=(0,qe.useStyles2)(Tc),c=(null!=i?i:[]).map((e=>p().createElement(e.Component,{key:e.state.key,model:e})));a&&c.push(p().createElement(qe.ToolbarButton,{icon:"times",variant:"default",onClick:e.onRemove,key:"remove-button","aria-label":"Remove scene"}));return p().createElement("div",{className:l.wrapper},p().createElement("div",{className:(0,rt.cx)(l.row,n&&l.rowCollapsed)},p().createElement("button",{onClick:e.onToggle,className:s.rowTitleButton,"aria-label":n?"Expand scene":"Collapse scene"},r&&p().createElement(qe.Icon,{name:n?"angle-right":"angle-down"}),p().createElement("span",{className:s.rowTitle,role:"heading"},Xi.interpolate(e,t,void 0,"text"))),p().createElement("div",{className:l.actions},c)),!n&&p().createElement(o.Component,{model:o}))};const Tc=e=>({wrapper:(0,rt.css)({display:"flex",flexDirection:"column",flexGrow:1,gap:e.spacing(1)}),row:(0,rt.css)({width:"100%",display:"flex",justifyContent:"space-between",gap:e.spacing(1)}),rowCollapsed:(0,rt.css)({borderBottom:`1px solid ${e.colors.border.weak}`,paddingBottom:e.spacing(1)}),actions:(0,rt.css)({display:"flex",alignItems:"center",gap:e.spacing(1),justifyContent:"flex-end",flexGrow:1})});(class extends I{constructor(){super(...arguments),this._variableDependency=new Di(this,{statePaths:["text"]})}}).Component=({model:e})=>{const{text:t,fontSize:n=20,align:r="left",key:a,spacing:o}=e.useState(),i=(0,qe.useTheme2)(),s=(0,rt.css)({fontSize:n,display:"flex",flexGrow:1,alignItems:"center",padding:o?i.spacing(o,0):void 0,justifyContent:r});return p().createElement("div",{className:s,"data-testid":a},Xi.interpolate(e,t))};(class extends I{}).Component=({model:e})=>{const t=e.useState();return p().createElement(qe.ToolbarButton,{onClick:t.onClick,icon:t.icon})};(class extends I{}).Component=({model:e})=>{const t=e.useState();return p().createElement("div",{style:{display:"flex"}},t.label&&p().createElement(Lt,{label:t.label}),p().createElement(qe.Input,{defaultValue:t.value,width:8,onBlur:t=>{e.state.onChange(parseInt(t.currentTarget.value,10))}}))};const Ac=function(e,t,n){if(!ss)return[t,is,is];if(!e)throw new Error("useLocalStorage key may not be falsy");var r=n?n.raw?function(e){return e}:n.deserializer:JSON.parse,a=(0,u.useRef)((function(e){try{var a=n?n.raw?String:n.serializer:JSON.stringify,o=localStorage.getItem(e);return null!==o?r(o):(t&&localStorage.setItem(e,a(t)),t)}catch(e){return t}})),o=(0,u.useState)((function(){return a.current(e)})),i=o[0],s=o[1];(0,u.useLayoutEffect)((function(){return s(a.current(e))}),[e]);var l=(0,u.useCallback)((function(t){try{var a="function"==typeof t?t(i):t;if(void 0===a)return;var o=void 0;o=n?n.raw?"string"==typeof a?a:JSON.stringify(a):n.serializer?n.serializer(a):JSON.stringify(a):JSON.stringify(a),localStorage.setItem(e,o),s(r(o))}catch(e){}}),[e,s]),c=(0,u.useCallback)((function(){try{localStorage.removeItem(e),s(void 0)}catch(e){}}),[e,s]);return[i,l,c]};class kc extends I{constructor(){super(...arguments),this.onZoom=()=>{const e=Xi.getTimeRange(this),t=function(e,t){const n=e.to.valueOf()-e.from.valueOf(),r=e.to.valueOf()-n/2,a=0===n?3e4:n*t,i=r+a/2,s=r-a/2;return{from:(0,o.toUtc)(s),to:(0,o.toUtc)(i),raw:{from:(0,o.toUtc)(s),to:(0,o.toUtc)(i)}}}(e.state.value,2);e.onTimeRangeChange(t)},this.onChangeFiscalYearStartMonth=e=>{Xi.getTimeRange(this).setState({fiscalYearStartMonth:e})},this.toAbsolute=()=>{const e=Xi.getTimeRange(this),t=e.state.value,n=(0,o.toUtc)(t.from),r=(0,o.toUtc)(t.to);e.onTimeRangeChange({from:n,to:r,raw:{from:n,to:r}})},this.onMoveBackward=()=>{const e=Xi.getTimeRange(this),{state:{value:t}}=e;e.onTimeRangeChange(Pc(0,t,Date.now()))},this.onMoveForward=()=>{const e=Xi.getTimeRange(this),{state:{value:t}}=e;e.onTimeRangeChange(Pc(1,t,Date.now()))}}}function Pc(e,t,n){const r=t.to.valueOf(),a=t.from.valueOf(),i=(r-a)/2;let s,l;0===e?(s=a-i,l=r-i):(s=a+i,l=r+i,l>n&&r{var t;t=e,((0,o.isDateTime)(t.raw.from)||(0,o.isDateTime)(t.raw.to))&&c([e,...null!=l?l:[]]),a.onTimeRangeChange(e)},timeZone:i,fiscalYearStartMonth:s.fiscalYearStartMonth,onMoveBackward:e.onMoveBackward,onMoveForward:e.onMoveForward,onZoom:e.onZoom,onChangeTimeZone:a.onTimeZoneChange,onChangeFiscalYearStartMonth:e.onChangeFiscalYearStartMonth,weekStart:s.weekStart,history:l,quickRanges:r})};const Lc="grafana.dashboard.timepicker.history";function Nc(e){return JSON.parse(e).map((e=>o.rangeUtil.convertRawToRange(e,"utc",void 0,"YYYY-MM-DD HH:mm:ss")))}function Mc(e){return JSON.stringify((t=e.map((e=>({from:"string"==typeof e.raw.from?e.raw.from:e.raw.from.toISOString(),to:"string"==typeof e.raw.to?e.raw.to:e.raw.to.toISOString()}))),(0,k.uniqBy)(t,(e=>e.from+e.to)).slice(0,4)));var t}const Bc=["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"];class Vc extends I{constructor(e){var t,n,r;super({refresh:"",...e,autoValue:void 0,autoEnabled:null==(t=e.autoEnabled)||t,autoMinInterval:null!=(n=e.autoMinInterval)?n:i.config.minRefreshInterval,intervals:(null!=(r=e.intervals)?r:Bc).filter((t=>{var n;const r=null!=(n=e.minRefreshInterval)?n:i.config.minRefreshInterval;try{return!r||o.rangeUtil.intervalToMs(t)>=o.rangeUtil.intervalToMs(r)}catch(e){return!1}}))}),this._urlSync=new W(this,{keys:["refresh"]}),this._autoRefreshBlocked=!1,this.onRefresh=()=>{const e=Xi.getQueryController(this);if(null==e||e.startProfile("SceneRefreshPicker"),null==e?void 0:e.state.isRunning)return void e.cancelAll();const t=Xi.getTimeRange(this);this._intervalTimer&&clearInterval(this._intervalTimer),t.onRefresh(),this.setupIntervalTimer()},this.onIntervalChanged=e=>{this.setState({refresh:e}),this.setupIntervalTimer()},this.setupAutoTimeRangeListener=()=>Xi.getTimeRange(this).subscribeToState(((e,t)=>{e.from===t.from&&e.to===t.to||this.setupIntervalTimer()})),this.calculateAutoRefreshInterval=()=>{var e;const t=Xi.getTimeRange(this),n=null!=(e=null==window?void 0:window.innerWidth)?e:2e3;return o.rangeUtil.calculateInterval(t.state.value,n,this.state.autoMinInterval)},this.setupIntervalTimer=()=>{var e;const t=Xi.getTimeRange(this),{refresh:n,intervals:r}=this.state;if((this._intervalTimer||""===n)&&clearInterval(this._intervalTimer),""===n)return;if(n!==qe.RefreshPicker.autoOption.value&&r&&!r.includes(n))return;let a;if(null==(e=this._autoTimeRangeListener)||e.unsubscribe(),n===qe.RefreshPicker.autoOption.value){const e=this.calculateAutoRefreshInterval();a=e.intervalMs,this._autoTimeRangeListener=this.setupAutoTimeRangeListener(),e.interval!==this.state.autoValue&&this.setState({autoValue:e.interval})}else a=o.rangeUtil.intervalToMs(n);this._intervalTimer=setInterval((()=>{if(this.isTabVisible()){const e=Xi.getQueryController(this);null==e||e.startProfile("SceneRefreshPicker"),t.onRefresh()}else this._autoRefreshBlocked=!0}),a)},this.addActivationHandler((()=>{this.setupIntervalTimer();const e=()=>{this._autoRefreshBlocked&&"visible"===document.visibilityState&&(this._autoRefreshBlocked=!1,this.onRefresh())};return document.addEventListener("visibilitychange",e),()=>{var t;this._intervalTimer&&clearInterval(this._intervalTimer),document.removeEventListener("visibilitychange",e),null==(t=this._autoTimeRangeListener)||t.unsubscribe()}}))}getUrlState(){let e=this.state.refresh;return"string"==typeof e&&0!==e.length||(e=void 0),{refresh:e}}updateFromUrl(e){const{intervals:t}=this.state;let n=e.refresh;"string"==typeof n&&function(e){try{return o.rangeUtil.describeInterval(e).count>0}catch(e){return!1}}(n)&&((null==t?void 0:t.includes(n))?this.setState({refresh:n}):this.setState({refresh:t?t[0]:void 0}))}isTabVisible(){return void 0===document.visibilityState||"visible"===document.visibilityState}}Vc.Component=function({model:e}){var t;const{refresh:n,intervals:r,autoEnabled:a,autoValue:o,isOnCanvas:i,primary:s,withText:l}=e.useState(),c=function(e){const t=Xi.getQueryController(e);if(!t)return!1;return t.useState().isRunning}(e);let u,d,f=n===(null==(t=qe.RefreshPicker.autoOption)?void 0:t.value)?o:l?"Refresh":void 0;c&&(u="Cancel all queries",l&&(f="Cancel"));l&&(d="96px");return p().createElement(qe.RefreshPicker,{showAutoInterval:a,value:n,intervals:r,tooltip:u,width:d,text:f,onRefresh:()=>{e.onRefresh()},primary:s,onIntervalChanged:e.onIntervalChanged,isLoading:c,isOnCanvas:null==i||i})};const jc=e=>`${e}-compare`,Fc="__previousPeriod",$c="__noPeriod",zc={label:"Previous period",value:Fc},Uc={label:"No comparison",value:$c},Wc=[{label:"Day before",value:"24h"},{label:"Week before",value:"1w"},{label:"Month before",value:"1M"}];(class extends I{constructor(e){super({compareOptions:Wc,...e}),this._urlSync=new W(this,{keys:["compareWith"]}),this._onActivate=()=>{const e=Xi.getTimeRange(this);this.setState({compareOptions:this.getCompareOptions(e.state.value)}),this._subs.add(e.subscribeToState((e=>{const t=this.getCompareOptions(e.value),n={compareOptions:t};Boolean(this.state.compareWith)&&!t.find((({value:e})=>e===this.state.compareWith))&&(n.compareWith=Fc),this.setState(n)})))},this.getCompareOptions=e=>{const t=Math.ceil(e.to.diff(e.from)),n=Wc.findIndex((({value:e})=>o.rangeUtil.intervalToMs(e)>=t));return[Uc,zc,...Wc.slice(n).map((({label:e,value:t})=>({label:e,value:t})))]},this.onCompareWithChanged=e=>{e===$c?this.onClearCompare():this.setState({compareWith:e})},this.onClearCompare=()=>{this.setState({compareWith:void 0})},this.addActivationHandler(this._onActivate)}getExtraQueries(e){const t=[],n=this.getCompareTimeRange(e.range);if(!n)return t;const r=e.targets.filter((e=>!1!==e.timeRangeCompare));return r.length&&t.push({req:{...e,targets:r,range:n},processor:Hc}),t}shouldRerun(e,t,n){return e.compareWith!==t.compareWith&&void 0!==n.find((e=>!1!==e.timeRangeCompare))}getCompareTimeRange(e){let t,n;if(this.state.compareWith){if(this.state.compareWith===Fc){const r=e.to.diff(e.from);t=(0,o.dateTime)(e.from).subtract(r),n=(0,o.dateTime)(e.to).subtract(r)}else t=(0,o.dateTime)(e.from).subtract(o.rangeUtil.intervalToMs(this.state.compareWith)),n=(0,o.dateTime)(e.to).subtract(o.rangeUtil.intervalToMs(this.state.compareWith));return{from:t,to:n,raw:{from:t,to:n}}}}getUrlState(){return{compareWith:this.state.compareWith}}updateFromUrl(e){if(!e.compareWith)return;const t=G(e.compareWith);if(t){this.getCompareOptions(Xi.getTimeRange(this).state.value).find((({value:e})=>e===t))?this.setState({compareWith:t}):this.setState({compareWith:"__previousPeriod"})}}}).Component=function({model:e}){var t;const n=(0,qe.useStyles2)(Gc),{compareWith:r,compareOptions:a}=e.useState(),[o,i]=p().useState(r),s=null!=(t=a.find((({value:e})=>e===o)))?t:zc,l=a.find((({value:e})=>e===r)),c=Boolean(l),u=()=>{c?(i(r),e.onClearCompare()):c||e.onCompareWithChanged(s.value)};return p().createElement(qe.ButtonGroup,null,p().createElement(qe.ToolbarButton,{variant:"canvas",tooltip:"Enable time frame comparison",onClick:e=>{e.stopPropagation(),e.preventDefault(),u()}},p().createElement(qe.Checkbox,{label:" ",value:c,onClick:u}),"Comparison"),c?p().createElement(qe.ButtonSelect,{variant:"canvas",value:l,options:a,onChange:t=>{e.onCompareWithChanged(t.value)}}):p().createElement(qe.ToolbarButton,{className:n.previewButton,disabled:!0,variant:"canvas",isOpen:!1},s.label))};const Hc=(e,t)=>{const n=t.timeRange.from.diff(e.timeRange.from);return t.series.forEach((e=>{e.refId=jc(e.refId||""),e.meta={...e.meta,timeCompare:{diffMs:n,isTimeShiftQuery:!0}},e.fields.forEach((e=>(e.type===o.FieldType.time&&(e.values=e.values.map((e=>n<0?e-n:e+n))),e.config={...e.config,color:{mode:"fixed",fixedColor:i.config.theme.palette.gray60}},e)))})),(0,f.of)(t)};function Gc(e){return{previewButton:(0,rt.css)({"&:disabled":{border:`1px solid ${e.colors.secondary.border}`,color:e.colors.text.disabled,opacity:1}})}}(class extends I{constructor(e){super(e),this.addActivationHandler((()=>{const e=Xi.getData(this);this._subs.add(e.subscribeToState((e=>{var t;(null==(t=e.data)?void 0:t.state)===o.LoadingState.Done&&this.performRepeat(e.data)}))),e.state.data&&this.performRepeat(e.state.data)}))}performRepeat(e){const t=[];for(let n=0;n{const{body:t}=e.useState();return p().createElement(t.Component,{model:t})};(class extends I{constructor(e){super(e),this._variableDependency=new Di(this,{variableNames:[this.state.variableName],onVariableUpdateCompleted:()=>this.performRepeat()}),this.addActivationHandler((()=>this.performRepeat()))}performRepeat(){if(this._variableDependency.hasDependencyInLoadingState())return;const e=Xi.lookupVariable(this.state.variableName,this);if(!(e instanceof Re))return void console.error("SceneByVariableRepeater: variable is not a MultiValueVariable");const t=function(e){const{value:t,text:n,options:r}=e.state;if(e.hasAllValue())return r;if(Array.isArray(t)&&Array.isArray(n))return t.map(((e,t)=>({value:e,label:n[t]})));return[{value:t,label:n}]}(e),n=[];for(const e of t){const t=this.state.getLayoutChild(e);n.push(t)}this.state.body.setState({children:n})}}).Component=({model:e})=>{const{body:t}=e.useState();return p().createElement(t.Component,{model:t})};(class extends I{constructor(){super({}),this._renderBeforeActivation=!0}}).Component=e=>p().createElement("div",{style:{flexGrow:1}});class qc extends I{toggleDirection(){this.setState({direction:"row"===this.state.direction?"column":"row"})}isDraggable(){return!1}}qc.Component=function({model:e,parentState:t}){const{children:n,isHidden:r}=e.useState(),a=function(e,t){return(0,u.useMemo)((()=>{var n,r,a,o,s,l,c,u,d,p;const{direction:f="row",wrap:h}=e,g=i.config.theme2,m={};return t?Yc(m,e,t):(m.display="flex",m.flexGrow=1,m.minWidth=e.minWidth,m.minHeight=e.minHeight),m.flexDirection=f,m.gap="8px",m.flexWrap=h||"nowrap",m.alignContent="baseline",m.minWidth=m.minWidth||0,m.minHeight=m.minHeight||0,m[g.breakpoints.down("md")]={flexDirection:null!=(r=null==(n=e.md)?void 0:n.direction)?r:"column",maxWidth:null!=(o=null==(a=e.md)?void 0:a.maxWidth)?o:"unset",maxHeight:null!=(l=null==(s=e.md)?void 0:s.maxHeight)?l:"unset",height:null!=(u=null==(c=e.md)?void 0:c.height)?u:"unset",width:null!=(p=null==(d=e.md)?void 0:d.width)?p:"unset"},(0,rt.css)(m)}),[t,e])}(e.state,t);if(r)return null;return p().createElement("div",{className:a},n.map((t=>{const n=t.Component;return p().createElement(n,{key:t.state.key,model:t,parentState:e.state})})))};class Qc extends I{}function Yc(e,t,n){var r,a,o;const i=null!=(r=n.direction)?r:"row",{xSizing:s="fill",ySizing:l="fill"}=t;return e.display="flex",e.position="relative",e.flexDirection=i,"column"===i?(t.height?e.height=t.height:e.flexGrow="fill"===l?1:0,t.width?e.width=t.width:e.alignSelf="fill"===s?"stretch":"flex-start"):(t.height?e.height=t.height:e.alignSelf="fill"===l?"stretch":"flex-start",t.width?e.width=t.width:e.flexGrow="fill"===s?1:0),e.minWidth=t.minWidth,e.maxWidth=t.maxWidth,e.maxHeight=t.maxHeight,e.minHeight=null!=(a=t.minHeight)?a:n.minHeight,e.height=null!=(o=t.height)?o:n.height,e}Qc.Component=function({model:e,parentState:t}){if(!t)throw new Error("SceneFlexItem must be a child of SceneFlexLayout");const{body:n,isHidden:r}=e.useState(),a=function(e,t){return(0,u.useMemo)((()=>{var n,r,a,o,s,l,c,u,d,p;const f=i.config.theme2,h=Yc({},e,t);return h[f.breakpoints.down("md")]={maxWidth:null!=(r=null==(n=e.md)?void 0:n.maxWidth)?r:"unset",maxHeight:null!=(o=null==(a=e.md)?void 0:a.maxHeight)?o:"unset",height:null!=(c=null==(s=e.md)?void 0:s.height)?c:null==(l=t.md)?void 0:l.height,width:null!=(p=null==(u=e.md)?void 0:u.width)?p:null==(d=t.md)?void 0:d.width},(0,rt.css)(h)}),[e,t])}(e.state,t);if(!n||r)return null;return p().createElement("div",{className:a},p().createElement(n.Component,{model:n}))};class Xc extends I{constructor(e){var t,n;super({rowGap:1,columnGap:1,templateColumns:"repeat(auto-fit, minmax(400px, 1fr))",autoRows:null!=(t=e.autoRows)?t:"320px",children:null!=(n=e.children)?n:[],...e})}isDraggable(){return!1}}Xc.Component=function({model:e}){const{children:t,isHidden:n,isLazy:r}=e.useState(),a=(o=e.state,(0,u.useMemo)((()=>{var e,t,n,r,a,s,l,c,u,d,p;const f={},h=i.config.theme2;return f.display="grid",f.gridTemplateColumns=o.templateColumns,f.gridTemplateRows=o.templateRows||"unset",f.gridAutoRows=o.autoRows||"unset",f.rowGap=h.spacing(null!=(e=o.rowGap)?e:1),f.columnGap=h.spacing(null!=(t=o.columnGap)?t:1),f.justifyItems=o.justifyItems||"unset",f.alignItems=o.alignItems||"unset",f.justifyContent=o.justifyContent||"unset",f.flexGrow=1,o.md&&(f[h.breakpoints.down("md")]={gridTemplateRows:null==(n=o.md)?void 0:n.templateRows,gridTemplateColumns:null==(r=o.md)?void 0:r.templateColumns,rowGap:o.md.rowGap?h.spacing(null!=(s=null==(a=o.md)?void 0:a.rowGap)?s:1):void 0,columnGap:o.md.columnGap?h.spacing(null!=(c=null==(l=o.md)?void 0:l.rowGap)?c:1):void 0,justifyItems:null==(u=o.md)?void 0:u.justifyItems,alignItems:null==(d=o.md)?void 0:d.alignItems,justifyContent:null==(p=o.md)?void 0:p.justifyContent}),(0,rt.css)(f)}),[o]));var o;if(n)return null;return p().createElement("div",{className:a},t.map((t=>{const n=t.Component;return r?p().createElement(vc,{key:t.state.key,className:a},p().createElement(n,{key:t.state.key,model:t,parentState:e.state})):p().createElement(n,{key:t.state.key,model:t,parentState:e.state})})))};class Kc extends I{}Kc.Component=function({model:e,parentState:t}){if(!t)throw new Error("SceneCSSGridItem must be a child of SceneCSSGridLayout");const{body:n,isHidden:r}=e.useState(),a=(o=e.state,(0,u.useMemo)((()=>{const e={};return e.gridColumn=o.gridColumn||"unset",e.gridRow=o.gridRow||"unset",e.position="relative",(0,rt.css)(e)}),[o]));var o;if(!n||r)return null;return p().createElement("div",{className:a},p().createElement(n.Component,{model:n}))};const Zc=new Set(["ArrowUp","ArrowDown"]),Jc=new Set(["ArrowLeft","ArrowRight"]),eu={row:{dim:"width",axis:"clientX",min:"minWidth",max:"maxWidth"},column:{dim:"height",axis:"clientY",min:"minHeight",max:"maxHeight"}};function tu({direction:e="row",handleSize:t=32,initialSize:n="auto",primaryPaneStyles:r,secondaryPaneStyles:a,onDragFinished:o,children:i}){const s=p().Children.toArray(i),l=(0,u.useRef)(null),c=(0,u.useRef)(null),d=(0,u.useRef)(null),f=(0,u.useRef)(null),h=(0,u.useRef)(null),g=(0,u.useRef)("1fr"),m=(0,u.useRef)(void 0),v=(0,u.useRef)(void 0),b=eu[e].dim,y=eu[e].axis,w=eu[e].min,S=eu[e].max;!function(e,t,n=0,r){const a=(0,k.throttle)(t,n);(0,u.useLayoutEffect)((()=>{if(!e)return;const t=new ResizeObserver(a);return t.observe(e,{box:"device-pixel-content-box"}),()=>t.disconnect()}),r)}(f.current,(e=>{for(const t of e){if(!t.target.isSameNode(f.current))return;const e=c.current.getBoundingClientRect()[b],n=ru(c.current);l.current.ariaValueNow=`${(0,k.clamp)((e-n[w])/(n[S]-n[w])*100,0,100)}`}}),500,[S,w,e,b]);const x=(0,u.useRef)(null),E=(0,u.useCallback)((e=>{g.current=c.current.getBoundingClientRect()[b],h.current=f.current.getBoundingClientRect()[b],x.current=e[y],l.current.setPointerCapture(e.pointerId),m.current=ru(c.current),v.current=void 0}),[b,y]),C=(0,u.useCallback)((e=>{if(null!==x.current&&"1fr"!==g.current){const n=e[y]-x.current,r=m.current,a=(0,k.clamp)(g.current+n,r[w],r[S]),o=a/(h.current-t);c.current.style.flexGrow=`${o}`,d.current.style.flexGrow=""+(1-o);const i=(0,k.clamp)((a-r[w])/(r[S]-r[w])*100,0,100);l.current.ariaValueNow=`${i}`}}),[t,y,w,S]),R=(0,u.useCallback)((e=>{e.preventDefault(),e.stopPropagation(),l.current.releasePointerCapture(e.pointerId),x.current=null,null==o||o(parseFloat(c.current.style.flexGrow))}),[o]),D=(0,u.useRef)(new Set),_=(0,u.useRef)(null),O=(0,u.useCallback)((n=>{var r;if(0===D.current.size)return void(_.current=null);if("1fr"===g.current)return;const a=.3*(n-(null!=(r=_.current)?r:n));let o=0;"row"===e?(D.current.has("ArrowLeft")&&(o-=a),D.current.has("ArrowRight")&&(o+=a)):(D.current.has("ArrowUp")&&(o-=a),D.current.has("ArrowDown")&&(o+=a));const i=m.current,s=c.current.getBoundingClientRect()[b],u=(0,k.clamp)(s+o,i[w],i[S]),p=u/(h.current-t);c.current.style.flexGrow=`${p}`,d.current.style.flexGrow=""+(1-p);const f=(u-i[w])/(i[S]-i[w])*100;l.current.ariaValueNow=`${(0,k.clamp)(f,0,100)}`,_.current=n,window.requestAnimationFrame(O)}),[e,t,w,S,b]),I=(0,u.useCallback)((n=>{if("Enter"===n.key)return void(void 0===v.current?(v.current=c.current.style.flexGrow,c.current.style.flexGrow="0",d.current.style.flexGrow="1"):(c.current.style.flexGrow=v.current,d.current.style.flexGrow=""+(1-parseFloat(v.current)),v.current=void 0));if("Home"===n.key){m.current=ru(c.current),h.current=f.current.getBoundingClientRect()[b];const e=m.current[w]/(h.current-t);return c.current.style.flexGrow=`${e}`,d.current.style.flexGrow=""+(1-e),void(l.current.ariaValueNow="0")}if("End"===n.key){m.current=ru(c.current),h.current=f.current.getBoundingClientRect()[b];const e=m.current[S]/(h.current-t);return c.current.style.flexGrow=`${e}`,d.current.style.flexGrow=""+(1-e),void(l.current.ariaValueNow="100")}if(!("column"===e&&Zc.has(n.key)||"row"===e&&Jc.has(n.key))||D.current.has(n.key))return;v.current=void 0,n.preventDefault(),n.stopPropagation(),g.current=c.current.getBoundingClientRect()[b],h.current=f.current.getBoundingClientRect()[b],m.current=ru(c.current);if(!D.current.has(n.key)){const e=0===D.current.size;D.current.add(n.key),e&&window.requestAnimationFrame(O)}}),[e,O,t,S,b,w]),T=(0,u.useCallback)((t=>{"row"===e&&!Jc.has(t.key)||"column"===e&&!Zc.has(t.key)||(D.current.delete(t.key),null==o||o(parseFloat(c.current.style.flexGrow)))}),[e,o]),A=(0,u.useCallback)((()=>{c.current.style.flexGrow="0.5",d.current.style.flexGrow="0.5";const e=ru(c.current);m.current=e,g.current=c.current.getBoundingClientRect()[b],l.current.ariaValueNow=""+(g.current-e[w])/(e[S]-e[w])*100}),[S,b,w]),P=(0,u.useCallback)((()=>{D.current.size>0&&(D.current.clear(),x.current=null,null==o||o(parseFloat(c.current.style.flexGrow)))}),[o]),L=(0,qe.useStyles2)(nu),N=mc(),M=2===s.length?"visible":"hidden";return p().createElement("div",{ref:f,className:L.container,style:{flexDirection:e}},p().createElement("div",{ref:c,className:L.panel,style:{flexGrow:"auto"===n?.5:(0,k.clamp)(n,0,1),[w]:"min-content",...r},id:`start-panel-${N}`},s[0]),s[1]&&p().createElement(p().Fragment,null,p().createElement("div",{ref:l,style:{[b]:`${t}px`},className:(0,rt.cx)(L.handle,{[L.handleHorizontal]:"column"===e}),onPointerUp:R,onPointerDown:E,onPointerMove:C,onKeyDown:I,onKeyUp:T,onDoubleClick:A,onBlur:P,role:"separator","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":50,"aria-controls":`start-panel-${N}`,"aria-label":"Pane resize widget",tabIndex:0}),p().createElement("div",{ref:d,className:L.panel,style:{flexGrow:"auto"===n?.5:(0,k.clamp)(1-n,0,1),[w]:"min-content",visibility:`${M}`,...a},id:`end-panel-${N}`},s[1])))}function nu(e){return{handle:(0,rt.css)({cursor:"col-resize",position:"relative",flexShrink:0,userSelect:"none","&::before":{content:'""',position:"absolute",backgroundColor:e.colors.primary.main,left:"50%",transform:"translate(-50%)",top:0,height:"100%",width:"1px",opacity:0,transition:"opacity ease-in-out 0.2s"},"&::after":{content:'""',width:"4px",borderRadius:"4px",backgroundColor:e.colors.border.weak,transition:"background-color ease-in-out 0.2s",height:"50%",top:"calc(50% - (50%) / 2)",transform:"translateX(-50%)",position:"absolute",left:"50%"},"&:hover, &:focus-visible":{outline:"none","&::before":{opacity:1},"&::after":{backgroundColor:e.colors.primary.main}}}),handleHorizontal:(0,rt.css)({cursor:"row-resize","&::before":{left:"inherit",transform:"translateY(-50%)",top:"50%",height:"1px",width:"100%"},"&::after":{width:"50%",height:"4px",top:"50%",transform:"translateY(-50%)",left:"calc(50% - (50%) / 2)"}}),container:(0,rt.css)({display:"flex",width:"100%",flexGrow:1,overflow:"hidden"}),panel:(0,rt.css)({display:"flex",position:"relative",flexBasis:0})}}function ru(e){if(null===e)return;const t=document.body.style.overflow,n=e.style.width,r=e.style.height,a=e.style.flexGrow;document.body.style.overflow="hidden",e.style.flexGrow="0";const{width:o,height:i}=e.getBoundingClientRect();e.style.flexGrow="100";const{width:s,height:l}=e.getBoundingClientRect();return document.body.style.overflow=t,e.style.width=n,e.style.height=r,e.style.flexGrow=a,{minWidth:o,maxWidth:s,minHeight:i,maxHeight:l}}(class extends I{toggleDirection(){this.setState({direction:"row"===this.state.direction?"column":"row"})}isDraggable(){return!1}}).Component=function({model:e}){const{primary:t,secondary:n,direction:r,isHidden:a,initialSize:o,primaryPaneStyles:i,secondaryPaneStyles:s}=e.useState();if(a)return null;const l=t.Component,c=null==n?void 0:n.Component;let u=n?o:1;return p().createElement(tu,{direction:r,initialSize:null!=u?u:.5,primaryPaneStyles:i,secondaryPaneStyles:s},p().createElement(l,{key:t.state.key,model:t,parentState:e.state}),c&&n&&p().createElement(c,{key:n.state.key,model:n,parentState:e.state}))};class au extends I{constructor(){super(...arguments),this._renderBeforeActivation=!0}enrichDataRequest(){return{app:this.state.name||"app"}}}au.Component=({model:e})=>{const{pages:t,scopesBridge:n}=e.useState();return p().createElement(p().Fragment,null,n&&p().createElement(n.Component,{model:n}),p().createElement(ou.Provider,{value:e},p().createElement(a.Routes,null,t.map((e=>p().createElement(a.Route,{key:e.state.url,path:e.state.routePath,element:p().createElement(e.Component,{model:e})}))))))};const ou=(0,u.createContext)(null),iu=new Map;function su(e){const t=iu.get(e);if(t)return t;const n=e();return iu.set(e,n),n}class lu extends I{}function cu({node:e}){const t=e.useState(),n=(0,qe.useStyles2)(uu);return p().createElement("div",{className:n.container},Object.keys(t).map((r=>p().createElement("div",{className:n.row,key:r},p().createElement("div",{className:n.keyName},r),p().createElement("div",{className:n.value},function(e,t,n){if(null===t)return"null";switch(typeof t){case"number":return p().createElement(qe.Input,{type:"number",defaultValue:t,onBlur:t=>n.setState({[e]:t.currentTarget.valueAsNumber})});case"string":return p().createElement(qe.Input,{type:"text",defaultValue:t,onBlur:t=>n.setState({[e]:t.currentTarget.value})});case"object":return Pe(t)?t.constructor.name:(0,k.isPlainObject)(t)||(0,k.isArray)(t)?p().createElement(qe.JSONFormatter,{json:t,open:0}):String(t);default:return typeof t}}(r,t[r],e))))))}function uu(e){return{container:(0,rt.css)({flexGrow:1,display:"flex",gap:e.spacing(.5),flexDirection:"column"}),row:(0,rt.css)({display:"flex",gap:e.spacing(2)}),keyName:(0,rt.css)({display:"flex",flexGrow:"0",width:120,alignItems:"center",height:e.spacing(e.components.height.md)}),value:(0,rt.css)({flexGrow:1,minHeight:e.spacing(e.components.height.md),display:"flex",alignItems:"center"})}}function du({node:e,selectedObject:t,onSelect:n}){const r=(0,qe.useStyles2)(pu),a=[],o=e===t;return e.forEachChild((e=>{a.push(p().createElement(du,{node:e,key:e.state.key,selectedObject:t,onSelect:n}))})),p().createElement("div",{className:r.container},p().createElement("div",{className:(0,rt.cx)(r.name,o&&r.selected),onClick:()=>n(e)},e.constructor.name),p().createElement("div",{className:r.children},a))}function pu(e){return{container:(0,rt.css)({flexGrow:1,display:"flex",gap:e.spacing(.5),flexDirection:"column"}),name:(0,rt.css)({flexGrow:1,display:"flex",gap:e.spacing(1),fontSize:e.typography.bodySmall.fontSize,cursor:"pointer",padding:e.spacing(0,1),borderRadius:e.shape.borderRadius(2),position:"relative","&:hover":{background:e.colors.background.secondary}}),selected:(0,rt.css)({"&::before":{display:"block",content:"' '",position:"absolute",left:0,width:4,bottom:2,top:2,borderRadius:e.shape.radius.default,backgroundImage:e.colors.gradients.brandVertical}}),children:(0,rt.css)({flexGrow:1,display:"flex",flexDirection:"column",paddingLeft:e.spacing(1)})}}function fu({scene:e}){const t=(0,qe.useStyles2)(hu),[n,r]=(0,u.useState)(!1),[a,o]=(0,u.useState)();return p().createElement(p().Fragment,null,p().createElement(qe.ToolbarButton,{variant:"canvas",icon:"bug",onClick:()=>r(!0)}),n&&p().createElement(qe.Drawer,{title:"Scene debugger",onClose:()=>r(!1),size:"lg"},p().createElement("div",{className:t.panes},p().createElement("div",{className:t.pane1},p().createElement("div",{className:t.paneHeading},"Scene graph"),p().createElement(qe.CustomScrollbar,{autoHeightMin:"100%"},p().createElement("div",{className:t.treeWrapper},p().createElement(du,{node:e,selectedObject:a,onSelect:o})))),p().createElement("div",{className:t.pane2},p().createElement("div",{className:t.paneHeading},"Object details"),a&&p().createElement(cu,{node:a})))))}function hu(e){return{panes:(0,rt.css)({flexGrow:1,display:"flex",height:"100%",flexDirection:"row",marginTop:e.spacing(-2)}),pane1:(0,rt.css)({flexGrow:0,display:"flex",height:"100%",flexDirection:"column",borderRight:`1px solid ${e.colors.border.weak}`}),pane2:(0,rt.css)({flexGrow:1,display:"flex",minHeight:"100%",flexDirection:"column",paddingLeft:e.spacing(2)}),treeWrapper:(0,rt.css)({paddingRight:e.spacing(2),height:"100%",marginLeft:e.spacing(-1)}),paneHeading:(0,rt.css)({padding:e.spacing(1,0),fontWeight:e.typography.fontWeightMedium})}}function gu({page:e}){const t=l(e.state.url),n=function(e){if(e.parent instanceof bu)return e.parent;return e}(e),r=n.useState(),o=function(){const e=(0,a.useLocation)();return(0,i.locationSearchToObject)(e.search||"")}(),c=e.getScene(t),d=(0,u.useContext)(ou),f=r.initializedScene===c,{layout:h}=e.state,g=Ce();(0,u.useLayoutEffect)((()=>{f||n.initializeScene(c)}),[c,n,f]),(0,u.useEffect)((()=>()=>n.setState({initializedScene:void 0})),[n]);const m=ic(n,null==d?void 0:d.state.urlSyncOptions);if(!f&&!m)return null;const v={text:r.title,img:r.titleImg,icon:r.titleIcon,url:s(r.url,g.getSearchObject(),r.preserveUrlKeys),hideFromBreadcrumbs:r.hideFromBreadcrumbs,parentItem:mu(r.getParentPage?r.getParentPage():n.parent,o,g.getSearchObject())};r.tabs&&(v.children=r.tabs.map((t=>({text:t.state.title,icon:t.state.titleIcon,tabSuffix:t.state.tabSuffix,active:e===t,url:s(t.state.url,g.getSearchObject(),t.state.preserveUrlKeys),parentItem:v}))));let b=[];return r.controls&&(b=r.controls.map((e=>p().createElement(e.Component,{model:e,key:e.state.key})))),o["scene-debugger"]&&b.push(p().createElement(fu,{scene:n,key:"scene-debugger"})),p().createElement(i.PluginPage,{layout:h,pageNav:v,actions:b,renderTitle:r.renderTitle,subTitle:r.subTitle},p().createElement(c.Component,{model:c}))}function mu(e,t,n){if(e instanceof bu)return{text:e.state.title,url:s(e.state.url,n,e.state.preserveUrlKeys),hideFromBreadcrumbs:e.state.hideFromBreadcrumbs,parentItem:mu(e.state.getParentPage?e.state.getParentPage():e.parent,t,n)}}function vu({drilldown:e,parent:t}){const n=l(e.routePath),r=t.getDrilldownPage(e,n);return p().createElement(r.Component,{model:r})}lu.Component=({model:e})=>{const{component:t,props:n,reactNode:r}=e.useState();return t?p().createElement(t,{...n}):r||null};class bu extends I{constructor(e){super(e),this._sceneCache=new Map,this._drilldownCache=new Map,this._activationHandler=()=>{if(this.state.useScopes){if(this._scopesBridge=Xi.getScopesBridge(this),!this._scopesBridge)throw new Error("Use of scopes is enabled but no scopes bridge found");return this._scopesBridge.setEnabled(!0),()=>{var e;null==(e=this._scopesBridge)||e.setEnabled(!1)}}},this.addActivationHandler(this._activationHandler)}initializeScene(e){this.setState({initializedScene:e})}getScene(e){let t=this._sceneCache.get(e.url);if(t)return t;if(!this.state.getScene)throw new Error("Missing getScene on SceneAppPage "+this.state.title);return t=this.state.getScene(e),this._sceneCache.set(e.url,t),t}getDrilldownPage(e,t){let n=this._drilldownCache.get(t.url);return n||(n=e.getPage(t,this),this._drilldownCache.set(t.url,n),n)}enrichDataRequest(e){if(this.state.getParentPage)return this.state.getParentPage().enrichDataRequest(e);if(!this.parent)return null;const t=this.getRoot();return Le(t)?t.enrichDataRequest(e):null}}bu.Component=function({model:e}){const{tabs:t,drilldowns:n}=e.useState(),r=[];if(r.push(function(e){var t,n,r;return p().createElement(a.Route,{key:"fallback route",path:"*",element:p().createElement(gu,{page:null!=(r=null==(n=(t=e.state).getFallbackPage)?void 0:n.call(t))?r:new bu({url:"",title:"Not found",subTitle:"The url did not match any page",routePath:"*",getScene:()=>new sc({body:new qc({direction:"column",children:[new Qc({body:new lu({component:()=>p().createElement("div",{"data-testid":"default-fallback-content"},"If you found your way here using a link then there might be a bug in this application.")})})]})})})})})}(e)),t&&t.length>0)for(let n=0;np().createElement(vu,{drilldown:t,parent:e})}));t||r.push(p().createElement(a.Route,{key:"home route",path:"/",element:p().createElement(gu,{page:e})}));return p().createElement(a.Routes,null,r)};var yu=(e=>(e.Always="always",e.Auto="auto",e.Never="never",e))(yu||{}),wu=(e=>(e.Hue="hue",e.None="none",e.Opacity="opacity",e.Scheme="scheme",e))(wu||{}),Su=(e=>(e.None="none",e.Normal="normal",e.Percent="percent",e))(Su||{}),xu=(e=>(e.Auto="auto",e.Horizontal="horizontal",e.Vertical="vertical",e))(xu||{}),Eu=(e=>(e.Background="background",e.BackgroundSolid="background_solid",e.None="none",e.Value="value",e))(Eu||{}),Cu=(e=>(e.Area="area",e.Line="line",e.None="none",e))(Cu||{}),Ru=(e=>(e.Auto="auto",e.Center="center",e))(Ru||{}),Du=(e=>(e.Auto="auto",e.Name="name",e.None="none",e.Value="value",e.ValueAndName="value_and_name",e))(Du||{}),_u=(e=>(e.Inverted="inverted",e.SameAsValue="same_as_value",e.Standard="standard",e))(_u||{}),Ou=(e=>(e.Multi="multi",e.None="none",e.Single="single",e))(Ou||{}),Iu=(e=>(e.Basic="basic",e.Gradient="gradient",e.Lcd="lcd",e))(Iu||{}),Tu=(e=>(e.Color="color",e.Hidden="hidden",e.Text="text",e))(Tu||{}),Au=(e=>(e.Auto="auto",e.Hidden="hidden",e.Left="left",e.Top="top",e))(Au||{}),ku=(e=>(e.Auto="auto",e.Manual="manual",e))(ku||{}),Pu=(e=>(e.Auto="auto",e.Lg="lg",e.Md="md",e.Sm="sm",e))(Pu||{});const Lu={barRadius:0,barWidth:.97,fullHighlight:!1,groupWidth:.7,orientation:xu.Auto,showValue:yu.Auto,stacking:Su.None,xTickLabelRotation:0,xTickLabelSpacing:0},Nu={fillOpacity:80,gradientMode:wu.None,lineWidth:1},Mu={displayMode:Iu.Gradient,maxVizHeight:300,minVizHeight:16,minVizWidth:8,namePlacement:Au.Auto,showUnfilled:!0,sizing:ku.Auto,valueMode:Tu.Color},Bu={selectedSeries:0},Vu={minVizHeight:75,minVizWidth:75,showThresholdLabels:!1,showThresholdMarkers:!0,sizing:ku.Auto},ju={layers:[]};const Fu={calculate:!1,cellGap:1,cellValues:{},color:{scheme:"Oranges",fill:"dark-orange",reverse:!1,exponent:.5,steps:64},exemplars:{color:"rgba(255,0,255,0.7)"},filterValues:{le:1e-9},legend:{show:!0},selectionMode:"x",showValue:yu.Auto,tooltip:{mode:Ou.Single,yHistogram:!1,showColorScale:!1}},$u={bucketCount:30,bucketOffset:0},zu={fillOpacity:80,gradientMode:wu.None,lineWidth:1},Uu={showImage:!0};const Wu={displayLabels:[]},Hu={colorMode:Eu.Value,graphMode:Cu.Area,justifyMode:Ru.Auto,percentChangeColorMode:_u.Standard,showPercentChange:!1,textMode:Du.Auto,wideLayout:!0},Gu={alignValue:"left",mergeValues:!0,perPage:20,rowHeight:.9,showValue:yu.Auto},qu={fillOpacity:70,lineWidth:0},Qu={colWidth:.9,perPage:20,rowHeight:.9,showValue:yu.Auto},Yu={fillOpacity:70,lineWidth:1},Xu={cellHeight:Pu.Sm,footer:{show:!1,countRows:!1,reducer:[]},frameIndex:0,showHeader:!0,showTypeIcons:!1,sortBy:[]};const Ku={content:"# Title\n\nFor markdown syntax help: [commonmark.org/help](https://commonmark.org/help/)",mode:"markdown"};const Zu={fillOpacity:50,show:"points"},Ju={series:[]};class ed{constructor(){this._overrides=[]}overrideColor(e){return this._overrides[this._overrides.length-1].properties.push({id:"color",value:e}),this}overrideDecimals(e){return this._overrides[this._overrides.length-1].properties.push({id:"decimals",value:e}),this}overrideDisplayName(e){return this._overrides[this._overrides.length-1].properties.push({id:"displayName",value:e}),this}overrideFilterable(e){return this._overrides[this._overrides.length-1].properties.push({id:"filterable",value:e}),this}overrideLinks(e){return this._overrides[this._overrides.length-1].properties.push({id:"links",value:e}),this}overrideMappings(e){return this._overrides[this._overrides.length-1].properties.push({id:"mappings",value:e}),this}overrideMax(e){return this._overrides[this._overrides.length-1].properties.push({id:"max",value:e}),this}overrideMin(e){return this._overrides[this._overrides.length-1].properties.push({id:"min",value:e}),this}overrideNoValue(e){return this._overrides[this._overrides.length-1].properties.push({id:"noValue",value:e}),this}overrideThresholds(e){return this._overrides[this._overrides.length-1].properties.push({id:"thresholds",value:e}),this}overrideUnit(e){return this._overrides[this._overrides.length-1].properties.push({id:"unit",value:e}),this}}class td extends ed{match(e){return this._overrides.push({matcher:e,properties:[]}),this}matchFieldsWithName(e){return this._overrides.push({matcher:{id:o.FieldMatcherID.byName,options:e},properties:[]}),this}matchFieldsWithNameByRegex(e){return this._overrides.push({matcher:{id:o.FieldMatcherID.byRegexp,options:e},properties:[]}),this}matchFieldsByType(e){return this._overrides.push({matcher:{id:o.FieldMatcherID.byType,options:e},properties:[]}),this}matchFieldsByQuery(e){return this._overrides.push({matcher:{id:o.FieldMatcherID.byFrameRefID,options:e},properties:[]}),this}matchFieldsByValue(e){return this._overrides.push({matcher:{id:o.FieldMatcherID.byValue,options:e},properties:[]}),this}matchComparisonQuery(e){return this.matchFieldsByQuery(jc(e))}overrideCustomFieldConfig(e,t){const n=`custom.${String(e)}`;return this._overrides[this._overrides.length-1].properties.push({id:n,value:t}),this}build(){return this._overrides}}class nd{constructor(e){this.defaultFieldConfig=e,this._fieldConfig={defaults:{},overrides:[]},this._overridesBuilder=new td,this.setDefaults()}setDefaults(){const e={defaults:{custom:this.defaultFieldConfig?(0,k.cloneDeep)(this.defaultFieldConfig()):{}},overrides:[]};this._fieldConfig=e}setColor(e){return this.setFieldConfigDefaults("color",e)}setDecimals(e){return this.setFieldConfigDefaults("decimals",e)}setDisplayName(e){return this.setFieldConfigDefaults("displayName",e)}setFilterable(e){return this.setFieldConfigDefaults("filterable",e)}setLinks(e){return this.setFieldConfigDefaults("links",e)}setMappings(e){return this.setFieldConfigDefaults("mappings",e)}setMax(e){return this.setFieldConfigDefaults("max",e)}setMin(e){return this.setFieldConfigDefaults("min",e)}setNoValue(e){return this.setFieldConfigDefaults("noValue",e)}setThresholds(e){return this.setFieldConfigDefaults("thresholds",e)}setUnit(e){return this.setFieldConfigDefaults("unit",e)}setCustomFieldConfig(e,t){return this._fieldConfig.defaults={...this._fieldConfig.defaults,custom:(0,k.merge)(this._fieldConfig.defaults.custom,{[e]:t})},this}setOverrides(e){return e(this._overridesBuilder),this}setFieldConfigDefaults(e,t){return this._fieldConfig.defaults={...this._fieldConfig.defaults,[e]:t},this}build(){return{defaults:this._fieldConfig.defaults,overrides:this._overridesBuilder.build()}}}class rd{constructor(e){this.defaultOptions=e,this._options={},this.setDefaults()}setDefaults(){this._options=this.defaultOptions?(0,k.cloneDeep)(this.defaultOptions()):{}}setOption(e,t){return this._options=(0,k.merge)(this._options,{[e]:t}),this}build(){return this._options}}class ad{constructor(e,t,n,r){this._state={},this._state.title="",this._state.description="",this._state.displayMode="default",this._state.hoverHeader=!1,this._state.pluginId=e,this._state.pluginVersion=t,this._fieldConfigBuilder=new nd(r),this._panelOptionsBuilder=new rd(n)}setTitle(e){return this._state.title=e,this}setDescription(e){return this._state.description=e,this}setDisplayMode(e){return this._state.displayMode=e,this}setHoverHeader(e){return this._state.hoverHeader=e,this}setShowMenuAlways(e){return this._state.showMenuAlways=e,this}setMenu(e){return this._state.menu=e,this}setHeaderActions(e){return this._state.headerActions=e,this}setCollapsible(e){return this._state.collapsible=e,this}setCollapsed(e){return this._state.collapsed=e,this}setColor(e){return this._fieldConfigBuilder.setColor(e),this}setDecimals(e){return this._fieldConfigBuilder.setDecimals(e),this}setDisplayName(e){return this._fieldConfigBuilder.setDisplayName(e),this}setFilterable(e){return this._fieldConfigBuilder.setFilterable(e),this}setLinks(e){return this._fieldConfigBuilder.setLinks(e),this}setMappings(e){return this._fieldConfigBuilder.setMappings(e),this}setMax(e){return this._fieldConfigBuilder.setMax(e),this}setMin(e){return this._fieldConfigBuilder.setMin(e),this}setNoValue(e){return this._fieldConfigBuilder.setNoValue(e),this}setThresholds(e){return this._fieldConfigBuilder.setThresholds(e),this}setUnit(e){return this._fieldConfigBuilder.setUnit(e),this}setCustomFieldConfig(e,t){return this._fieldConfigBuilder.setCustomFieldConfig(e,t),this}setOverrides(e){return this._fieldConfigBuilder.setOverrides(e),this}setOption(e,t){return this._panelOptionsBuilder.setOption(e,t),this}setData(e){return this._state.$data=e,this}setTimeRange(e){return this._state.$timeRange=e,this}setVariables(e){return this._state.$variables=e,this}setBehaviors(e){return this._state.$behaviors=e,this}setSeriesLimit(e){return this._state.seriesLimit=e,this}applyMixin(e){return e(this),this}build(){return new _s({...this._state,options:this._panelOptionsBuilder.build(),fieldConfig:this._fieldConfigBuilder.build()})}}const od={barchart:()=>new ad("barchart","10.0.0",(()=>Lu),(()=>Nu)),bargauge:()=>new ad("bargauge","10.0.0",(()=>Mu)),datagrid:()=>new ad("datagrid","10.0.0",(()=>Bu)),flamegraph:()=>new ad("flamegraph","10.0.0"),gauge:()=>new ad("gauge","10.0.0",(()=>Vu)),geomap:()=>new ad("geomap","10.0.0",(()=>ju)),heatmap:()=>new ad("heatmap","10.0.0",(()=>Fu)),histogram:()=>new ad("histogram","10.0.0",(()=>$u),(()=>zu)),logs:()=>new ad("logs","10.0.0"),news:()=>new ad("news","10.0.0",(()=>Uu)),nodegraph:()=>new ad("nodeGraph","10.0.0"),piechart:()=>new ad("piechart","10.0.0",(()=>Wu)),stat:()=>new ad("stat","10.0.0",(()=>Hu)),statetimeline:()=>new ad("state-timeline","10.0.0",(()=>Gu),(()=>qu)),statushistory:()=>new ad("status-history","10.0.0",(()=>Qu),(()=>Yu)),table:()=>new ad("table","10.0.0",(()=>Xu)),text:()=>new ad("text","10.0.0",(()=>Ku)),timeseries:()=>new ad("timeseries","10.0.0"),trend:()=>new ad("trend","10.0.0"),traces:()=>new ad("traces","10.0.0"),xychart:()=>new ad("xychart","10.0.0",(()=>Ju),(()=>Zu))};const id={barchart:()=>new nd((()=>Nu)),bargauge:()=>new nd,datagrid:()=>new nd,flamegraph:()=>new nd,gauge:()=>new nd,geomap:()=>new nd,heatmap:()=>new nd,histogram:()=>new nd((()=>zu)),logs:()=>new nd,news:()=>new nd,nodegraph:()=>new nd,piechart:()=>new nd,stat:()=>new nd,statetimeline:()=>new nd((()=>qu)),statushistory:()=>new nd((()=>Yu)),table:()=>new nd,text:()=>new nd,timeseries:()=>new nd,trend:()=>new nd,traces:()=>new nd,xychart:()=>new nd((()=>Zu))},sd={getUrlWithAppState:s,registerRuntimePanelPlugin:function({pluginId:e,plugin:t}){if(c.has(e))throw new Error(`A runtime panel plugin with id ${e} has already been registered`);t.meta={...t.meta,id:e,name:e,module:"runtime plugin",baseUrl:"runtime plugin",info:{author:{name:"Runtime plugin "+e},description:"",links:[],logos:{large:"",small:""},screenshots:[],updated:"",version:""}},c.set(e,t)},registerRuntimeDataSource:function({dataSource:e}){if(M.has(e.uid))throw new Error(`A runtime data source with uid ${e.uid} has already been registered`);M.set(e.uid,e)},registerVariableMacro:function(e,t){if(Ae.get(e))throw new Error(`Macro already registered ${e}`);return Ae.set(e,t),()=>{Ae.delete(e)}},cloneSceneObjectState:P,syncStateFromSearchParams:function(e,t){es(e,t,new Ki)},getUrlState:Ji,renderPrometheusLabelFilters:pi,escapeLabelValueInRegexSelector:hi,escapeLabelValueInExactSelector:fi,escapeURLDelimiters:function(e){return bi(vi(e))},isAdHocVariable:function(e){return"adhoc"===e.state.type},isConstantVariable:function(e){return"constant"===e.state.type},isCustomVariable:function(e){return"custom"===e.state.type},isDataSourceVariable:function(e){return"datasource"===e.state.type},isIntervalVariable:function(e){return"interval"===e.state.type},isQueryVariable:function(e){return"query"===e.state.type},isTextBoxVariable:function(e){return"textbox"===e.state.type},isGroupByVariable:function(e){return"groupby"===e.state.type}}},9902:(e,t,n)=>{"use strict";n.d(t,{JY:()=>Nr,sx:()=>ea,gL:()=>Da});var r=n(5959),a=n.n(r),o=n(8398),i=n.n(o),s=n(7694),l=n(200);function c(e,t){var n=(0,r.useState)((function(){return{inputs:t,result:e()}}))[0],a=(0,r.useRef)(!0),o=(0,r.useRef)(n),i=a.current||Boolean(t&&o.current.inputs&&function(e,t){if(e.length!==t.length)return!1;for(var n=0;n{const r=function(e,t){return{...e,...t}}(n,t.options);return e.addEventListener(t.eventName,t.fn,r),function(){e.removeEventListener(t.eventName,t.fn,r)}}));return function(){r.forEach((e=>{e()}))}}const A=!0,k="Invariant failed";class P extends Error{}function L(e,t){if(!e)throw new P(A?k:`${k}: ${t||""}`)}P.prototype.toString=function(){return this.message};class N extends a().Component{constructor(...e){super(...e),this.callbacks=null,this.unbind=I,this.onWindowError=e=>{const t=this.getCallbacks();t.isDragging()&&t.tryAbort();e.error instanceof P&&e.preventDefault()},this.getCallbacks=()=>{if(!this.callbacks)throw new Error("Unable to find AppCallbacks in ");return this.callbacks},this.setCallbacks=e=>{this.callbacks=e}}componentDidMount(){this.unbind=T(window,[{eventName:"error",fn:this.onWindowError}])}componentDidCatch(e){if(!(e instanceof P))throw e;this.setState({})}componentWillUnmount(){this.unbind()}render(){return this.props.children(this.setCallbacks)}}const M=e=>e+1,B=(e,t)=>{const n=e.droppableId===t.droppableId,r=M(e.index),a=M(t.index);return n?`\n You have moved the item from position ${r}\n to position ${a}\n `:`\n You have moved the item from position ${r}\n in list ${e.droppableId}\n to list ${t.droppableId}\n in position ${a}\n `},V=(e,t,n)=>t.droppableId===n.droppableId?`\n The item ${e}\n has been combined with ${n.draggableId}`:`\n The item ${e}\n in list ${t.droppableId}\n has been combined with ${n.draggableId}\n in list ${n.droppableId}\n `,j=e=>`\n The item has returned to its starting position\n of ${M(e.index)}\n`,F={dragHandleUsageInstructions:"\n Press space bar to start a drag.\n When dragging you can use the arrow keys to move the item around and escape to cancel.\n Some screen readers may require you to be in focus mode or to use your pass through key\n",onDragStart:e=>`\n You have lifted an item in position ${M(e.source.index)}\n`,onDragUpdate:e=>{const t=e.destination;if(t)return B(e.source,t);const n=e.combine;return n?V(e.draggableId,e.source,n):"You are over an area that cannot be dropped on"},onDragEnd:e=>{if("CANCEL"===e.reason)return`\n Movement cancelled.\n ${j(e.source)}\n `;const t=e.destination,n=e.combine;return t?`\n You have dropped the item.\n ${B(e.source,t)}\n `:n?`\n You have dropped the item.\n ${V(e.draggableId,e.source,n)}\n `:`\n The item has been dropped while not over a drop area.\n ${j(e.source)}\n `}};var $=F;const z={x:0,y:0},U=(e,t)=>({x:e.x+t.x,y:e.y+t.y}),W=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),H=(e,t)=>e.x===t.x&&e.y===t.y,G=e=>({x:0!==e.x?-e.x:0,y:0!==e.y?-e.y:0}),q=(e,t,n=0)=>"x"===e?{x:t,y:n}:{x:n,y:t},Q=(e,t)=>Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2),Y=(e,t)=>Math.min(...t.map((t=>Q(e,t)))),X=e=>t=>({x:e(t.x),y:e(t.y)});const K=(e,t)=>({top:e.top+t.y,left:e.left+t.x,bottom:e.bottom+t.y,right:e.right+t.x}),Z=e=>[{x:e.left,y:e.top},{x:e.right,y:e.top},{x:e.left,y:e.bottom},{x:e.right,y:e.bottom}],J=(e,t)=>t&&t.shouldClipSubject?((e,t)=>{const n=f({top:Math.max(t.top,e.top),right:Math.min(t.right,e.right),bottom:Math.min(t.bottom,e.bottom),left:Math.max(t.left,e.left)});return n.width<=0||n.height<=0?null:n})(t.pageMarginBox,e):f(e);var ee=({page:e,withPlaceholder:t,axis:n,frame:r})=>{const a=((e,t)=>t?K(e,t.scroll.diff.displacement):e)(e.marginBox,r),o=((e,t,n)=>n&&n.increasedBy?{...e,[t.end]:e[t.end]+n.increasedBy[t.line]}:e)(a,n,t);return{page:e,withPlaceholder:t,active:J(o,r)}},te=(e,t)=>{e.frame||L(!1);const n=e.frame,r=W(t,n.scroll.initial),a=G(r),o={...n,scroll:{initial:n.scroll.initial,current:t,diff:{value:r,displacement:a},max:n.scroll.max}},i=ee({page:e.subject.page,withPlaceholder:e.subject.withPlaceholder,axis:e.axis,frame:o});return{...e,frame:o,subject:i}};const ne=R((e=>e.reduce(((e,t)=>(e[t.descriptor.id]=t,e)),{}))),re=R((e=>e.reduce(((e,t)=>(e[t.descriptor.id]=t,e)),{}))),ae=R((e=>Object.values(e))),oe=R((e=>Object.values(e)));var ie=R(((e,t)=>{const n=oe(t).filter((t=>e===t.descriptor.droppableId)).sort(((e,t)=>e.descriptor.index-t.descriptor.index));return n}));function se(e){return e.at&&"REORDER"===e.at.type?e.at.destination:null}function le(e){return e.at&&"COMBINE"===e.at.type?e.at.combine:null}var ce=R(((e,t)=>t.filter((t=>t.descriptor.id!==e.descriptor.id)))),ue=(e,t)=>e.descriptor.droppableId===t.descriptor.id;const de={point:z,value:0},pe={invisible:{},visible:{},all:[]};var fe={displaced:pe,displacedBy:de,at:null},he=(e,t)=>n=>e<=n&&n<=t,ge=e=>{const t=he(e.top,e.bottom),n=he(e.left,e.right);return r=>{if(t(r.top)&&t(r.bottom)&&n(r.left)&&n(r.right))return!0;const a=t(r.top)||t(r.bottom),o=n(r.left)||n(r.right);if(a&&o)return!0;const i=r.tope.bottom,s=r.lefte.right;if(i&&s)return!0;return i&&o||s&&a}},me=e=>{const t=he(e.top,e.bottom),n=he(e.left,e.right);return e=>t(e.top)&&t(e.bottom)&&n(e.left)&&n(e.right)};const ve={direction:"vertical",line:"y",crossAxisLine:"x",start:"top",end:"bottom",size:"height",crossAxisStart:"left",crossAxisEnd:"right",crossAxisSize:"width"},be={direction:"horizontal",line:"x",crossAxisLine:"y",start:"left",end:"right",size:"width",crossAxisStart:"top",crossAxisEnd:"bottom",crossAxisSize:"height"};const ye=({target:e,destination:t,viewport:n,withDroppableDisplacement:r,isVisibleThroughFrameFn:a})=>{const o=r?((e,t)=>{const n=t.frame?t.frame.scroll.diff.displacement:z;return K(e,n)})(e,t):e;return((e,t,n)=>!!t.subject.active&&n(t.subject.active)(e))(o,t,a)&&((e,t,n)=>n(t)(e))(o,n,a)},we=e=>ye({...e,isVisibleThroughFrameFn:me});function Se({afterDragging:e,destination:t,displacedBy:n,viewport:r,forceShouldAnimate:a,last:o}){return e.reduce((function(e,i){const s=function(e,t){const n=e.page.marginBox,r={top:t.point.y,right:0,bottom:0,left:t.point.x};return f(h(n,r))}(i,n),l=i.descriptor.id;e.all.push(l);var c;if(!(c={target:s,destination:t,viewport:r,withDroppableDisplacement:!0},ye({...c,isVisibleThroughFrameFn:ge})))return e.invisible[i.descriptor.id]=!0,e;const u=((e,t,n)=>{if("boolean"==typeof n)return n;if(!t)return!0;const{invisible:r,visible:a}=t;if(r[e])return!1;const o=a[e];return!o||o.shouldAnimate})(l,o,a),d={draggableId:l,shouldAnimate:u};return e.visible[l]=d,e}),{all:[],visible:{},invisible:{}})}function xe({insideDestination:e,inHomeList:t,displacedBy:n,destination:r}){const a=function(e,t){if(!e.length)return 0;const n=e[e.length-1].descriptor.index;return t.inHomeList?n:n+1}(e,{inHomeList:t});return{displaced:pe,displacedBy:n,at:{type:"REORDER",destination:{droppableId:r.descriptor.id,index:a}}}}function Ee({draggable:e,insideDestination:t,destination:n,viewport:r,displacedBy:a,last:o,index:i,forceShouldAnimate:s}){const l=ue(e,n);if(null==i)return xe({insideDestination:t,inHomeList:l,displacedBy:a,destination:n});const c=t.find((e=>e.descriptor.index===i));if(!c)return xe({insideDestination:t,inHomeList:l,displacedBy:a,destination:n});const u=ce(e,t),d=t.indexOf(c);return{displaced:Se({afterDragging:u.slice(d),destination:n,displacedBy:a,last:o,viewport:r.frame,forceShouldAnimate:s}),displacedBy:a,at:{type:"REORDER",destination:{droppableId:n.descriptor.id,index:i}}}}function Ce(e,t){return Boolean(t.effected[e])}var Re=({isMovingForward:e,isInHomeList:t,draggable:n,draggables:r,destination:a,insideDestination:o,previousImpact:i,viewport:s,afterCritical:l})=>{const c=i.at;if(c||L(!1),"REORDER"===c.type){const r=(({isMovingForward:e,isInHomeList:t,insideDestination:n,location:r})=>{if(!n.length)return null;const a=r.index,o=e?a+1:a-1,i=n[0].descriptor.index,s=n[n.length-1].descriptor.index;return o(t?s:s+1)?null:o})({isMovingForward:e,isInHomeList:t,location:c.destination,insideDestination:o});return null==r?null:Ee({draggable:n,insideDestination:o,destination:a,viewport:s,last:i.displaced,displacedBy:i.displacedBy,index:r})}const u=(({isMovingForward:e,destination:t,draggables:n,combine:r,afterCritical:a})=>{if(!t.isCombineEnabled)return null;const o=r.draggableId,i=n[o].descriptor.index;return Ce(o,a)?e?i:i-1:e?i+1:i})({isMovingForward:e,destination:a,displaced:i.displaced,draggables:r,combine:c.combine,afterCritical:l});return null==u?null:Ee({draggable:n,insideDestination:o,destination:a,viewport:s,last:i.displaced,displacedBy:i.displacedBy,index:u})},De=({afterCritical:e,impact:t,draggables:n})=>{const r=le(t);r||L(!1);const a=r.draggableId,o=n[a].page.borderBox.center,i=(({displaced:e,afterCritical:t,combineWith:n,displacedBy:r})=>{const a=Boolean(e.visible[n]||e.invisible[n]);return Ce(n,t)?a?z:G(r.point):a?r.point:z})({displaced:t.displaced,afterCritical:e,combineWith:a,displacedBy:t.displacedBy});return U(o,i)};const _e=(e,t)=>t.margin[e.start]+t.borderBox[e.size]/2,Oe=(e,t,n)=>t[e.crossAxisStart]+n.margin[e.crossAxisStart]+n.borderBox[e.crossAxisSize]/2,Ie=({axis:e,moveRelativeTo:t,isMoving:n})=>q(e.line,t.marginBox[e.end]+_e(e,n),Oe(e,t.marginBox,n)),Te=({axis:e,moveRelativeTo:t,isMoving:n})=>q(e.line,t.marginBox[e.start]-((e,t)=>t.margin[e.end]+t.borderBox[e.size]/2)(e,n),Oe(e,t.marginBox,n));var Ae=({impact:e,draggable:t,draggables:n,droppable:r,afterCritical:a})=>{const o=ie(r.descriptor.id,n),i=t.page,s=r.axis;if(!o.length)return(({axis:e,moveInto:t,isMoving:n})=>q(e.line,t.contentBox[e.start]+_e(e,n),Oe(e,t.contentBox,n)))({axis:s,moveInto:r.page,isMoving:i});const{displaced:l,displacedBy:c}=e,u=l.all[0];if(u){const e=n[u];if(Ce(u,a))return Te({axis:s,moveRelativeTo:e.page,isMoving:i});const t=y(e.page,c.point);return Te({axis:s,moveRelativeTo:t,isMoving:i})}const d=o[o.length-1];if(d.descriptor.id===t.descriptor.id)return i.borderBox.center;if(Ce(d.descriptor.id,a)){const e=y(d.page,G(a.displacedBy.point));return Ie({axis:s,moveRelativeTo:e,isMoving:i})}return Ie({axis:s,moveRelativeTo:d.page,isMoving:i})},ke=(e,t)=>{const n=e.frame;return n?U(t,n.scroll.diff.displacement):t};var Pe=e=>{const t=(({impact:e,draggable:t,droppable:n,draggables:r,afterCritical:a})=>{const o=t.page.borderBox.center,i=e.at;return n&&i?"REORDER"===i.type?Ae({impact:e,draggable:t,draggables:r,droppable:n,afterCritical:a}):De({impact:e,draggables:r,afterCritical:a}):o})(e),n=e.droppable;return n?ke(n,t):t},Le=(e,t)=>{const n=W(t,e.scroll.initial),r=G(n);return{frame:f({top:t.y,bottom:t.y+e.frame.height,left:t.x,right:t.x+e.frame.width}),scroll:{initial:e.scroll.initial,max:e.scroll.max,current:t,diff:{value:n,displacement:r}}}};function Ne(e,t){return e.map((e=>t[e]))}var Me=({pageBorderBoxCenter:e,draggable:t,viewport:n})=>{const r=((e,t)=>U(e.scroll.diff.displacement,t))(n,e),a=W(r,t.page.borderBox.center);return U(t.client.borderBox.center,a)},Be=({draggable:e,destination:t,newPageBorderBoxCenter:n,viewport:r,withDroppableDisplacement:a,onlyOnMainAxis:o=!1})=>{const i=W(n,e.page.borderBox.center),s={target:K(e.page.borderBox,i),destination:t,withDroppableDisplacement:a,viewport:r};return o?(e=>{return ye({...e,isVisibleThroughFrameFn:(t=e.destination.axis,e=>{const n=he(e.top,e.bottom),r=he(e.left,e.right);return e=>t===ve?n(e.top)&&n(e.bottom):r(e.left)&&r(e.right)})});var t})(s):we(s)},Ve=({isMovingForward:e,draggable:t,destination:n,draggables:r,previousImpact:a,viewport:o,previousPageBorderBoxCenter:i,previousClientSelection:s,afterCritical:l})=>{if(!n.isEnabled)return null;const c=ie(n.descriptor.id,r),u=ue(t,n),d=(({isMovingForward:e,draggable:t,destination:n,insideDestination:r,previousImpact:a})=>{if(!n.isCombineEnabled)return null;if(!se(a))return null;function o(e){const t={type:"COMBINE",combine:{draggableId:e,droppableId:n.descriptor.id}};return{...a,at:t}}const i=a.displaced.all,s=i.length?i[0]:null;if(e)return s?o(s):null;const l=ce(t,r);if(!s)return l.length?o(l[l.length-1].descriptor.id):null;const c=l.findIndex((e=>e.descriptor.id===s));-1===c&&L(!1);const u=c-1;return u<0?null:o(l[u].descriptor.id)})({isMovingForward:e,draggable:t,destination:n,insideDestination:c,previousImpact:a})||Re({isMovingForward:e,isInHomeList:u,draggable:t,draggables:r,destination:n,insideDestination:c,previousImpact:a,viewport:o,afterCritical:l});if(!d)return null;const p=Pe({impact:d,draggable:t,droppable:n,draggables:r,afterCritical:l});if(Be({draggable:t,destination:n,newPageBorderBoxCenter:p,viewport:o.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0})){return{clientSelection:Me({pageBorderBoxCenter:p,draggable:t,viewport:o}),impact:d,scrollJumpRequest:null}}const f=W(p,i),h=(({impact:e,viewport:t,destination:n,draggables:r,maxScrollChange:a})=>{const o=Le(t,U(t.scroll.current,a)),i=n.frame?te(n,U(n.frame.scroll.current,a)):n,s=e.displaced,l=Se({afterDragging:Ne(s.all,r),destination:n,displacedBy:e.displacedBy,viewport:o.frame,last:s,forceShouldAnimate:!1}),c=Se({afterDragging:Ne(s.all,r),destination:i,displacedBy:e.displacedBy,viewport:t.frame,last:s,forceShouldAnimate:!1}),u={},d={},p=[s,l,c];return s.all.forEach((e=>{const t=function(e,t){for(let n=0;n{const t=e.subject.active;return t||L(!1),t};const Fe=(e,t)=>{const n=e.page.borderBox.center;return Ce(e.descriptor.id,t)?W(n,t.displacedBy.point):n},$e=(e,t)=>{const n=e.page.borderBox;return Ce(e.descriptor.id,t)?K(n,G(t.displacedBy.point)):n};var ze=R((function(e,t){const n=t[e.line];return{value:n,point:q(e.line,n)}}));const Ue=(e,t)=>({...e,scroll:{...e.scroll,max:t}}),We=(e,t,n)=>{const r=e.frame;ue(t,e)&&L(!1),e.subject.withPlaceholder&&L(!1);const a=ze(e.axis,t.displaceBy).point,o=((e,t,n)=>{const r=e.axis;if("virtual"===e.descriptor.mode)return q(r.line,t[r.line]);const a=e.subject.page.contentBox[r.size],o=ie(e.descriptor.id,n).reduce(((e,t)=>e+t.client.marginBox[r.size]),0)+t[r.line]-a;return o<=0?null:q(r.line,o)})(e,a,n),i={placeholderSize:a,increasedBy:o,oldFrameMaxScroll:e.frame?e.frame.scroll.max:null};if(!r){const t=ee({page:e.subject.page,withPlaceholder:i,axis:e.axis,frame:e.frame});return{...e,subject:t}}const s=o?U(r.scroll.max,o):r.scroll.max,l=Ue(r,s),c=ee({page:e.subject.page,withPlaceholder:i,axis:e.axis,frame:l});return{...e,subject:c,frame:l}};var He=({isMovingForward:e,previousPageBorderBoxCenter:t,draggable:n,isOver:r,draggables:a,droppables:o,viewport:i,afterCritical:s})=>{const l=(({isMovingForward:e,pageBorderBoxCenter:t,source:n,droppables:r,viewport:a})=>{const o=n.subject.active;if(!o)return null;const i=n.axis,s=he(o[i.start],o[i.end]),l=ae(r).filter((e=>e!==n)).filter((e=>e.isEnabled)).filter((e=>Boolean(e.subject.active))).filter((e=>ge(a.frame)(je(e)))).filter((t=>{const n=je(t);return e?o[i.crossAxisEnd]{const t=je(e),n=he(t[i.start],t[i.end]);return s(t[i.start])||s(t[i.end])||n(o[i.start])||n(o[i.end])})).sort(((t,n)=>{const r=je(t)[i.crossAxisStart],a=je(n)[i.crossAxisStart];return e?r-a:a-r})).filter(((e,t,n)=>je(e)[i.crossAxisStart]===je(n[0])[i.crossAxisStart]));if(!l.length)return null;if(1===l.length)return l[0];const c=l.filter((e=>he(je(e)[i.start],je(e)[i.end])(t[i.line])));return 1===c.length?c[0]:c.length>1?c.sort(((e,t)=>je(e)[i.start]-je(t)[i.start]))[0]:l.sort(((e,n)=>{const r=Y(t,Z(je(e))),a=Y(t,Z(je(n)));return r!==a?r-a:je(e)[i.start]-je(n)[i.start]}))[0]})({isMovingForward:e,pageBorderBoxCenter:t,source:r,droppables:o,viewport:i});if(!l)return null;const c=ie(l.descriptor.id,a),u=(({pageBorderBoxCenter:e,viewport:t,destination:n,insideDestination:r,afterCritical:a})=>{const o=r.filter((e=>we({target:$e(e,a),destination:n,viewport:t.frame,withDroppableDisplacement:!0}))).sort(((t,r)=>{const o=Q(e,ke(n,Fe(t,a))),i=Q(e,ke(n,Fe(r,a)));return o{if(!t){if(n.length)return null;const e={displaced:pe,displacedBy:de,at:{type:"REORDER",destination:{droppableId:o.descriptor.id,index:0}}},t=Pe({impact:e,draggable:r,droppable:o,draggables:a,afterCritical:s}),l=ue(r,o)?o:We(o,r,a);return Be({draggable:r,destination:l,newPageBorderBoxCenter:t,viewport:i.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0})?e:null}const l=Boolean(e[o.axis.line]<=t.page.borderBox.center[o.axis.line]),c=(()=>{const e=t.descriptor.index;return t.descriptor.id===r.descriptor.id||l?e:e+1})(),u=ze(o.axis,r.displaceBy);return Ee({draggable:r,insideDestination:n,destination:o,viewport:i,displacedBy:u,last:pe,index:c})})({previousPageBorderBoxCenter:t,destination:l,draggable:n,draggables:a,moveRelativeTo:u,insideDestination:c,viewport:i,afterCritical:s});if(!d)return null;const p=Pe({impact:d,draggable:n,droppable:l,draggables:a,afterCritical:s});return{clientSelection:Me({pageBorderBoxCenter:p,draggable:n,viewport:i}),impact:d,scrollJumpRequest:null}},Ge=e=>{const t=e.at;return t?"REORDER"===t.type?t.destination.droppableId:t.combine.droppableId:null};var qe=({state:e,type:t})=>{const n=((e,t)=>{const n=Ge(e);return n?t[n]:null})(e.impact,e.dimensions.droppables),r=Boolean(n),a=e.dimensions.droppables[e.critical.droppable.id],o=n||a,i=o.axis.direction,s="vertical"===i&&("MOVE_UP"===t||"MOVE_DOWN"===t)||"horizontal"===i&&("MOVE_LEFT"===t||"MOVE_RIGHT"===t);if(s&&!r)return null;const l="MOVE_DOWN"===t||"MOVE_RIGHT"===t,c=e.dimensions.draggables[e.critical.draggable.id],u=e.current.page.borderBoxCenter,{draggables:d,droppables:p}=e.dimensions;return s?Ve({isMovingForward:l,previousPageBorderBoxCenter:u,draggable:c,destination:o,draggables:d,viewport:e.viewport,previousClientSelection:e.current.client.selection,previousImpact:e.impact,afterCritical:e.afterCritical}):He({isMovingForward:l,previousPageBorderBoxCenter:u,draggable:c,isOver:o,draggables:d,droppables:p,viewport:e.viewport,afterCritical:e.afterCritical})};function Qe(e){return"DRAGGING"===e.phase||"COLLECTING"===e.phase}function Ye(e){const t=he(e.top,e.bottom),n=he(e.left,e.right);return function(e){return t(e.y)&&n(e.x)}}function Xe({pageBorderBox:e,draggable:t,droppables:n}){const r=ae(n).filter((t=>{if(!t.isEnabled)return!1;const n=t.subject.active;if(!n)return!1;if(a=n,!((r=e).lefta.left&&r.topa.top))return!1;var r,a;if(Ye(n)(e.center))return!0;const o=t.axis,i=n.center[o.crossAxisLine],s=e[o.crossAxisStart],l=e[o.crossAxisEnd],c=he(n[o.crossAxisStart],n[o.crossAxisEnd]),u=c(s),d=c(l);return!u&&!d||(u?si)}));return r.length?1===r.length?r[0].descriptor.id:function({pageBorderBox:e,draggable:t,candidates:n}){const r=t.page.borderBox.center,a=n.map((t=>{const n=t.axis,a=q(t.axis.line,e.center[n.line],t.page.borderBox.center[n.crossAxisLine]);return{id:t.descriptor.id,distance:Q(r,a)}})).sort(((e,t)=>t.distance-e.distance));return a[0]?a[0].id:null}({pageBorderBox:e,draggable:t,candidates:r}):null}const Ke=(e,t)=>f(K(e,t));function Ze({displaced:e,id:t}){return Boolean(e.visible[t]||e.invisible[t])}var Je=({pageOffset:e,draggable:t,draggables:n,droppables:r,previousImpact:a,viewport:o,afterCritical:i})=>{const s=Ke(t.page.borderBox,e),l=Xe({pageBorderBox:s,draggable:t,droppables:r});if(!l)return fe;const c=r[l],u=ie(c.descriptor.id,n),d=((e,t)=>{const n=e.frame;return n?Ke(t,n.scroll.diff.value):t})(c,s);return(({draggable:e,pageBorderBoxWithDroppableScroll:t,previousImpact:n,destination:r,insideDestination:a,afterCritical:o})=>{if(!r.isCombineEnabled)return null;const i=r.axis,s=ze(r.axis,e.displaceBy),l=s.value,c=t[i.start],u=t[i.end],d=ce(e,a).find((e=>{const t=e.descriptor.id,r=e.page.borderBox,a=r[i.size]/4,s=Ce(t,o),d=Ze({displaced:n.displaced,id:t});return s?d?u>r[i.start]+a&&ur[i.start]-l+a&&cr[i.start]+l+a&&ur[i.start]+a&&c{const s=n.axis,l=ze(n.axis,t.displaceBy),c=l.value,u=e[s.start],d=e[s.end],p=function({draggable:e,closest:t,inHomeList:n}){return t?n&&t.descriptor.index>e.descriptor.index?t.descriptor.index-1:t.descriptor.index:null}({draggable:t,closest:ce(t,r).find((e=>{const t=e.descriptor.id,n=e.page.borderBox.center[s.line],r=Ce(t,i),o=Ze({displaced:a,id:t});return r?o?d<=n:u({...e,[t.descriptor.id]:t});const tt=({previousImpact:e,impact:t,droppables:n})=>{const r=Ge(e),a=Ge(t);if(!r)return n;if(r===a)return n;const o=n[r];if(!o.subject.withPlaceholder)return n;const i=(e=>{const t=e.subject.withPlaceholder;t||L(!1);const n=e.frame;if(!n){const t=ee({page:e.subject.page,axis:e.axis,frame:null,withPlaceholder:null});return{...e,subject:t}}const r=t.oldFrameMaxScroll;r||L(!1);const a=Ue(n,r),o=ee({page:e.subject.page,axis:e.axis,frame:a,withPlaceholder:null});return{...e,subject:o,frame:a}})(o);return et(n,i)};var nt=({state:e,clientSelection:t,dimensions:n,viewport:r,impact:a,scrollJumpRequest:o})=>{const i=r||e.viewport,s=n||e.dimensions,l=t||e.current.client.selection,c=W(l,e.initial.client.selection),u={offset:c,selection:l,borderBoxCenter:U(e.initial.client.borderBoxCenter,c)},d={selection:U(u.selection,i.scroll.current),borderBoxCenter:U(u.borderBoxCenter,i.scroll.current),offset:U(u.offset,i.scroll.diff.value)},p={client:u,page:d};if("COLLECTING"===e.phase)return{...e,dimensions:s,viewport:i,current:p};const f=s.draggables[e.critical.draggable.id],h=a||Je({pageOffset:d.offset,draggable:f,draggables:s.draggables,droppables:s.droppables,previousImpact:e.impact,viewport:i,afterCritical:e.afterCritical}),g=(({draggable:e,draggables:t,droppables:n,previousImpact:r,impact:a})=>{const o=tt({previousImpact:r,impact:a,droppables:n}),i=Ge(a);if(!i)return o;const s=n[i];if(ue(e,s))return o;if(s.subject.withPlaceholder)return o;const l=We(s,e,t);return et(o,l)})({draggable:f,impact:h,previousImpact:e.impact,draggables:s.draggables,droppables:s.droppables});return{...e,current:p,dimensions:{draggables:s.draggables,droppables:g},impact:h,viewport:i,scrollJumpRequest:o||null,forceShouldAnimate:!o&&null}};var rt=({impact:e,viewport:t,draggables:n,destination:r,forceShouldAnimate:a})=>{const o=e.displaced,i=function(e,t){return e.map((e=>t[e]))}(o.all,n),s=Se({afterDragging:i,destination:r,displacedBy:e.displacedBy,viewport:t.frame,forceShouldAnimate:a,last:o});return{...e,displaced:s}},at=({impact:e,draggable:t,droppable:n,draggables:r,viewport:a,afterCritical:o})=>{const i=Pe({impact:e,draggable:t,draggables:r,droppable:n,afterCritical:o});return Me({pageBorderBoxCenter:i,draggable:t,viewport:a})},ot=({state:e,dimensions:t,viewport:n})=>{"SNAP"!==e.movementMode&&L(!1);const r=e.impact,a=n||e.viewport,o=t||e.dimensions,{draggables:i,droppables:s}=o,l=i[e.critical.draggable.id],c=Ge(r);c||L(!1);const u=s[c],d=rt({impact:r,viewport:a,destination:u,draggables:i}),p=at({impact:d,draggable:l,droppable:u,draggables:i,viewport:a,afterCritical:e.afterCritical});return nt({impact:d,clientSelection:p,state:e,dimensions:o,viewport:a})},it=({draggable:e,home:t,draggables:n,viewport:r})=>{const a=ze(t.axis,e.displaceBy),o=ie(t.descriptor.id,n),i=o.indexOf(e);-1===i&&L(!1);const s=o.slice(i+1),l=s.reduce(((e,t)=>(e[t.descriptor.id]=!0,e)),{}),c={inVirtualList:"virtual"===t.descriptor.mode,displacedBy:a,effected:l};var u;return{impact:{displaced:Se({afterDragging:s,destination:t,displacedBy:a,last:null,viewport:r.frame,forceShouldAnimate:!1}),displacedBy:a,at:{type:"REORDER",destination:(u=e.descriptor,{index:u.index,droppableId:u.droppableId})}},afterCritical:c}};const st=e=>{0},lt=e=>{0};var ct=({additions:e,updatedDroppables:t,viewport:n})=>{const r=n.scroll.diff.value;return e.map((e=>{const a=e.descriptor.droppableId,o=(e=>{const t=e.frame;return t||L(!1),t})(t[a]),i=o.scroll.diff.value,s=(({draggable:e,offset:t,initialWindowScroll:n})=>{const r=y(e.client,t),a=w(r,n);return{...e,placeholder:{...e.placeholder,client:r},client:r,page:a}})({draggable:e,offset:U(r,i),initialWindowScroll:n.scroll.initial});return s}))};const ut=e=>"SNAP"===e.movementMode,dt=(e,t,n)=>{const r=((e,t)=>({draggables:e.draggables,droppables:et(e.droppables,t)}))(e.dimensions,t);return!ut(e)||n?nt({state:e,dimensions:r}):ot({state:e,dimensions:r})};function pt(e){return e.isDragging&&"SNAP"===e.movementMode?{...e,scrollJumpRequest:null}:e}const ft={phase:"IDLE",completed:null,shouldFlush:!1};var ht=(e=ft,t)=>{if("FLUSH"===t.type)return{...ft,shouldFlush:!0};if("INITIAL_PUBLISH"===t.type){"IDLE"!==e.phase&&L(!1);const{critical:n,clientSelection:r,viewport:a,dimensions:o,movementMode:i}=t.payload,s=o.draggables[n.draggable.id],l=o.droppables[n.droppable.id],c={selection:r,borderBoxCenter:s.client.borderBox.center,offset:z},u={client:c,page:{selection:U(c.selection,a.scroll.initial),borderBoxCenter:U(c.selection,a.scroll.initial),offset:U(c.selection,a.scroll.diff.value)}},d=ae(o.droppables).every((e=>!e.isFixedOnPage)),{impact:p,afterCritical:f}=it({draggable:s,home:l,draggables:o.draggables,viewport:a});return{phase:"DRAGGING",isDragging:!0,critical:n,movementMode:i,dimensions:o,initial:u,current:u,isWindowScrollAllowed:d,impact:p,afterCritical:f,onLiftImpact:p,viewport:a,scrollJumpRequest:null,forceShouldAnimate:null}}if("COLLECTION_STARTING"===t.type){if("COLLECTING"===e.phase||"DROP_PENDING"===e.phase)return e;"DRAGGING"!==e.phase&&L(!1);return{...e,phase:"COLLECTING"}}if("PUBLISH_WHILE_DRAGGING"===t.type)return"COLLECTING"!==e.phase&&"DROP_PENDING"!==e.phase&&L(!1),(({state:e,published:t})=>{st();const n=t.modified.map((t=>{const n=e.dimensions.droppables[t.droppableId];return te(n,t.scroll)})),r={...e.dimensions.droppables,...ne(n)},a=re(ct({additions:t.additions,updatedDroppables:r,viewport:e.viewport})),o={...e.dimensions.draggables,...a};t.removals.forEach((e=>{delete o[e]}));const i={droppables:r,draggables:o},s=Ge(e.impact),l=s?i.droppables[s]:null,c=i.draggables[e.critical.draggable.id],u=i.droppables[e.critical.droppable.id],{impact:d,afterCritical:p}=it({draggable:c,home:u,draggables:o,viewport:e.viewport}),f=l&&l.isCombineEnabled?e.impact:d,h=Je({pageOffset:e.current.page.offset,draggable:i.draggables[e.critical.draggable.id],draggables:i.draggables,droppables:i.droppables,previousImpact:f,viewport:e.viewport,afterCritical:p});lt();const g={...e,phase:"DRAGGING",impact:h,onLiftImpact:d,dimensions:i,afterCritical:p,forceShouldAnimate:!1};return"COLLECTING"===e.phase?g:{...g,phase:"DROP_PENDING",reason:e.reason,isWaiting:!1}})({state:e,published:t.payload});if("MOVE"===t.type){if("DROP_PENDING"===e.phase)return e;Qe(e)||L(!1);const{client:n}=t.payload;return H(n,e.current.client.selection)?e:nt({state:e,clientSelection:n,impact:ut(e)?e.impact:null})}if("UPDATE_DROPPABLE_SCROLL"===t.type){if("DROP_PENDING"===e.phase)return pt(e);if("COLLECTING"===e.phase)return pt(e);Qe(e)||L(!1);const{id:n,newScroll:r}=t.payload,a=e.dimensions.droppables[n];if(!a)return e;const o=te(a,r);return dt(e,o,!1)}if("UPDATE_DROPPABLE_IS_ENABLED"===t.type){if("DROP_PENDING"===e.phase)return e;Qe(e)||L(!1);const{id:n,isEnabled:r}=t.payload,a=e.dimensions.droppables[n];a||L(!1),a.isEnabled===r&&L(!1);const o={...a,isEnabled:r};return dt(e,o,!0)}if("UPDATE_DROPPABLE_IS_COMBINE_ENABLED"===t.type){if("DROP_PENDING"===e.phase)return e;Qe(e)||L(!1);const{id:n,isCombineEnabled:r}=t.payload,a=e.dimensions.droppables[n];a||L(!1),a.isCombineEnabled===r&&L(!1);const o={...a,isCombineEnabled:r};return dt(e,o,!0)}if("MOVE_BY_WINDOW_SCROLL"===t.type){if("DROP_PENDING"===e.phase||"DROP_ANIMATING"===e.phase)return e;Qe(e)||L(!1),e.isWindowScrollAllowed||L(!1);const n=t.payload.newScroll;if(H(e.viewport.scroll.current,n))return pt(e);const r=Le(e.viewport,n);return ut(e)?ot({state:e,viewport:r}):nt({state:e,viewport:r})}if("UPDATE_VIEWPORT_MAX_SCROLL"===t.type){if(!Qe(e))return e;const n=t.payload.maxScroll;if(H(n,e.viewport.scroll.max))return e;const r={...e.viewport,scroll:{...e.viewport.scroll,max:n}};return{...e,viewport:r}}if("MOVE_UP"===t.type||"MOVE_DOWN"===t.type||"MOVE_LEFT"===t.type||"MOVE_RIGHT"===t.type){if("COLLECTING"===e.phase||"DROP_PENDING"===e.phase)return e;"DRAGGING"!==e.phase&&L(!1);const n=qe({state:e,type:t.type});return n?nt({state:e,impact:n.impact,clientSelection:n.clientSelection,scrollJumpRequest:n.scrollJumpRequest}):e}if("DROP_PENDING"===t.type){const n=t.payload.reason;"COLLECTING"!==e.phase&&L(!1);return{...e,phase:"DROP_PENDING",isWaiting:!0,reason:n}}if("DROP_ANIMATE"===t.type){const{completed:n,dropDuration:r,newHomeClientOffset:a}=t.payload;"DRAGGING"!==e.phase&&"DROP_PENDING"!==e.phase&&L(!1);return{phase:"DROP_ANIMATING",completed:n,dropDuration:r,newHomeClientOffset:a,dimensions:e.dimensions}}if("DROP_COMPLETE"===t.type){const{completed:e}=t.payload;return{phase:"IDLE",completed:e,shouldFlush:!1}}return e};const gt=e=>({type:"LIFT",payload:e}),mt=e=>({type:"PUBLISH_WHILE_DRAGGING",payload:e}),vt=()=>({type:"COLLECTION_STARTING",payload:null}),bt=e=>({type:"UPDATE_DROPPABLE_SCROLL",payload:e}),yt=e=>({type:"UPDATE_DROPPABLE_IS_ENABLED",payload:e}),wt=e=>({type:"UPDATE_DROPPABLE_IS_COMBINE_ENABLED",payload:e}),St=e=>({type:"MOVE",payload:e}),xt=()=>({type:"MOVE_UP",payload:null}),Et=()=>({type:"MOVE_DOWN",payload:null}),Ct=()=>({type:"MOVE_RIGHT",payload:null}),Rt=()=>({type:"MOVE_LEFT",payload:null}),Dt=()=>({type:"FLUSH",payload:null}),_t=e=>({type:"DROP_COMPLETE",payload:e}),Ot=e=>({type:"DROP",payload:e}),It=()=>({type:"DROP_ANIMATION_FINISHED",payload:null});const Tt="cubic-bezier(.2,1,.1,1)",At={drop:0,combining:.7},kt={drop:.75},Pt={outOfTheWay:.2,minDropTime:.33,maxDropTime:.55},Lt=`${Pt.outOfTheWay}s ${"cubic-bezier(0.2, 0, 0, 1)"}`,Nt={fluid:`opacity ${Lt}`,snap:`transform ${Lt}, opacity ${Lt}`,drop:e=>{const t=`${e}s ${Tt}`;return`transform ${t}, opacity ${t}`},outOfTheWay:`transform ${Lt}`,placeholder:`height ${Lt}, width ${Lt}, margin ${Lt}`},Mt=e=>H(e,z)?void 0:`translate(${e.x}px, ${e.y}px)`,Bt=Mt,Vt=(e,t)=>{const n=Mt(e);if(n)return t?`${n} scale(${kt.drop})`:n},{minDropTime:jt,maxDropTime:Ft}=Pt,$t=Ft-jt;var zt=({getState:e,dispatch:t})=>n=>r=>{if("DROP"!==r.type)return void n(r);const a=e(),o=r.payload.reason;if("COLLECTING"===a.phase)return void t((e=>({type:"DROP_PENDING",payload:e}))({reason:o}));if("IDLE"===a.phase)return;"DROP_PENDING"===a.phase&&a.isWaiting&&L(!1),"DRAGGING"!==a.phase&&"DROP_PENDING"!==a.phase&&L(!1);const i=a.critical,s=a.dimensions,l=s.draggables[a.critical.draggable.id],{impact:c,didDropInsideDroppable:u}=(({draggables:e,reason:t,lastImpact:n,home:r,viewport:a,onLiftImpact:o})=>{if(!n.at||"DROP"!==t)return{impact:rt({draggables:e,impact:o,destination:r,viewport:a,forceShouldAnimate:!0}),didDropInsideDroppable:!1};return"REORDER"===n.at.type?{impact:n,didDropInsideDroppable:!0}:{impact:{...n,displaced:pe},didDropInsideDroppable:!0}})({reason:o,lastImpact:a.impact,afterCritical:a.afterCritical,onLiftImpact:a.onLiftImpact,home:a.dimensions.droppables[a.critical.droppable.id],viewport:a.viewport,draggables:a.dimensions.draggables}),d=u?se(c):null,p=u?le(c):null,f={index:i.draggable.index,droppableId:i.droppable.id},h={draggableId:l.descriptor.id,type:l.descriptor.type,source:f,reason:o,mode:a.movementMode,destination:d,combine:p},g=(({impact:e,draggable:t,dimensions:n,viewport:r,afterCritical:a})=>{const{draggables:o,droppables:i}=n,s=Ge(e),l=s?i[s]:null,c=i[t.descriptor.droppableId],u=at({impact:e,draggable:t,draggables:o,afterCritical:a,droppable:l||c,viewport:r});return W(u,t.client.borderBox.center)})({impact:c,draggable:l,dimensions:s,viewport:a.viewport,afterCritical:a.afterCritical}),m={critical:a.critical,afterCritical:a.afterCritical,result:h,impact:c};if(!(!H(a.current.client.offset,g)||Boolean(h.combine)))return void t(_t({completed:m}));const v=(({current:e,destination:t,reason:n})=>{const r=Q(e,t);if(r<=0)return jt;if(r>=1500)return Ft;const a=jt+$t*(r/1500);return Number(("CANCEL"===n?.6*a:a).toFixed(2))})({current:a.current.client.offset,destination:g,reason:o});t((e=>({type:"DROP_ANIMATE",payload:e}))({newHomeClientOffset:g,dropDuration:v,completed:m}))},Ut=()=>({x:window.pageXOffset,y:window.pageYOffset});function Wt({onWindowScroll:e}){const t=D((function(){e(Ut())})),n=function(e){return{eventName:"scroll",options:{passive:!0,capture:!1},fn:t=>{t.target!==window&&t.target!==window.document||e()}}}(t);let r=I;function a(){return r!==I}return{start:function(){a()&&L(!1),r=T(window,[n])},stop:function(){a()||L(!1),t.cancel(),r(),r=I},isActive:a}}var Ht=e=>{const t=Wt({onWindowScroll:t=>{e.dispatch({type:"MOVE_BY_WINDOW_SCROLL",payload:{newScroll:t}})}});return e=>n=>{t.isActive()||"INITIAL_PUBLISH"!==n.type||t.start(),t.isActive()&&(e=>"DROP_COMPLETE"===e.type||"DROP_ANIMATE"===e.type||"FLUSH"===e.type)(n)&&t.stop(),e(n)}},Gt=()=>{const e=[];return{add:t=>{const n=setTimeout((()=>(t=>{const n=e.findIndex((e=>e.timerId===t));-1===n&&L(!1);const[r]=e.splice(n,1);r.callback()})(n))),r={timerId:n,callback:t};e.push(r)},flush:()=>{if(!e.length)return;const t=[...e];e.length=0,t.forEach((e=>{clearTimeout(e.timerId),e.callback()}))}}};const qt=(e,t)=>{st(),t(),lt()},Qt=(e,t)=>({draggableId:e.draggable.id,type:e.droppable.type,source:{droppableId:e.droppable.id,index:e.draggable.index},mode:t});function Yt(e,t,n,r){if(!e)return void n(r(t));const a=(e=>{let t=!1,n=!1;const r=setTimeout((()=>{n=!0})),a=a=>{t||n||(t=!0,e(a),clearTimeout(r))};return a.wasCalled=()=>t,a})(n);e(t,{announce:a}),a.wasCalled()||n(r(t))}var Xt=(e,t)=>{const n=((e,t)=>{const n=Gt();let r=null;const a=n=>{r||L(!1),r=null,qt(0,(()=>Yt(e().onDragEnd,n,t,$.onDragEnd)))};return{beforeCapture:(t,n)=>{r&&L(!1),qt(0,(()=>{const r=e().onBeforeCapture;r&&r({draggableId:t,mode:n})}))},beforeStart:(t,n)=>{r&&L(!1),qt(0,(()=>{const r=e().onBeforeDragStart;r&&r(Qt(t,n))}))},start:(a,o)=>{r&&L(!1);const i=Qt(a,o);r={mode:o,lastCritical:a,lastLocation:i.source,lastCombine:null},n.add((()=>{qt(0,(()=>Yt(e().onDragStart,i,t,$.onDragStart)))}))},update:(a,o)=>{const i=se(o),s=le(o);r||L(!1);const l=!((e,t)=>{if(e===t)return!0;const n=e.draggable.id===t.draggable.id&&e.draggable.droppableId===t.draggable.droppableId&&e.draggable.type===t.draggable.type&&e.draggable.index===t.draggable.index,r=e.droppable.id===t.droppable.id&&e.droppable.type===t.droppable.type;return n&&r})(a,r.lastCritical);l&&(r.lastCritical=a);const c=(d=i,!(null==(u=r.lastLocation)&&null==d||null!=u&&null!=d&&u.droppableId===d.droppableId&&u.index===d.index));var u,d;c&&(r.lastLocation=i);const p=!((e,t)=>null==e&&null==t||null!=e&&null!=t&&e.draggableId===t.draggableId&&e.droppableId===t.droppableId)(r.lastCombine,s);if(p&&(r.lastCombine=s),!l&&!c&&!p)return;const f={...Qt(a,r.mode),combine:s,destination:i};n.add((()=>{qt(0,(()=>Yt(e().onDragUpdate,f,t,$.onDragUpdate)))}))},flush:()=>{r||L(!1),n.flush()},drop:a,abort:()=>{if(!r)return;const e={...Qt(r.lastCritical,r.mode),combine:null,destination:null,reason:"CANCEL"};a(e)}}})(e,t);return e=>t=>r=>{if("BEFORE_INITIAL_CAPTURE"===r.type)return void n.beforeCapture(r.payload.draggableId,r.payload.movementMode);if("INITIAL_PUBLISH"===r.type){const e=r.payload.critical;return n.beforeStart(e,r.payload.movementMode),t(r),void n.start(e,r.payload.movementMode)}if("DROP_COMPLETE"===r.type){const e=r.payload.completed.result;return n.flush(),t(r),void n.drop(e)}if(t(r),"FLUSH"===r.type)return void n.abort();const a=e.getState();"DRAGGING"===a.phase&&n.update(a.critical,a.impact)}};var Kt=e=>t=>n=>{if("DROP_ANIMATION_FINISHED"!==n.type)return void t(n);const r=e.getState();"DROP_ANIMATING"!==r.phase&&L(!1),e.dispatch(_t({completed:r.completed}))};var Zt=e=>{let t=null,n=null;return r=>a=>{if("FLUSH"!==a.type&&"DROP_COMPLETE"!==a.type&&"DROP_ANIMATION_FINISHED"!==a.type||(n&&(cancelAnimationFrame(n),n=null),t&&(t(),t=null)),r(a),"DROP_ANIMATE"!==a.type)return;const o={eventName:"scroll",options:{capture:!0,passive:!1,once:!0},fn:function(){"DROP_ANIMATING"===e.getState().phase&&e.dispatch({type:"DROP_ANIMATION_FINISHED",payload:null})}};n=requestAnimationFrame((()=>{n=null,t=T(window,[o])}))}};var Jt=e=>t=>n=>{if(t(n),"PUBLISH_WHILE_DRAGGING"!==n.type)return;const r=e.getState();"DROP_PENDING"===r.phase&&(r.isWaiting||e.dispatch(Ot({reason:r.reason})))};const en=s.compose;var tn=({dimensionMarshal:e,focusMarshal:t,styleMarshal:n,getResponders:r,announce:a,autoScroller:o})=>{return(0,s.createStore)(ht,en((0,s.applyMiddleware)((i=n,()=>e=>t=>{"INITIAL_PUBLISH"===t.type&&i.dragging(),"DROP_ANIMATE"===t.type&&i.dropping(t.payload.completed.result.reason),"FLUSH"!==t.type&&"DROP_COMPLETE"!==t.type||i.resting(),e(t)}),(e=>()=>t=>n=>{"DROP_COMPLETE"!==n.type&&"FLUSH"!==n.type&&"DROP_ANIMATE"!==n.type||e.stopPublishing(),t(n)})(e),(e=>({getState:t,dispatch:n})=>r=>a=>{if("LIFT"!==a.type)return void r(a);const{id:o,clientSelection:i,movementMode:s}=a.payload,l=t();"DROP_ANIMATING"===l.phase&&n(_t({completed:l.completed})),"IDLE"!==t().phase&&L(!1),n(Dt()),n({type:"BEFORE_INITIAL_CAPTURE",payload:{draggableId:o,movementMode:s}});const c={draggableId:o,scrollOptions:{shouldPublishImmediately:"SNAP"===s}},{critical:u,dimensions:d,viewport:p}=e.startPublishing(c);n({type:"INITIAL_PUBLISH",payload:{critical:u,dimensions:d,clientSelection:i,movementMode:s,viewport:p}})})(e),zt,Kt,Zt,Jt,(e=>t=>n=>r=>{if((e=>"DROP_COMPLETE"===e.type||"DROP_ANIMATE"===e.type||"FLUSH"===e.type)(r))return e.stop(),void n(r);if("INITIAL_PUBLISH"===r.type){n(r);const a=t.getState();return"DRAGGING"!==a.phase&&L(!1),void e.start(a)}n(r),e.scroll(t.getState())})(o),Ht,(e=>{let t=!1;return()=>n=>r=>{if("INITIAL_PUBLISH"===r.type)return t=!0,e.tryRecordFocus(r.payload.critical.draggable.id),n(r),void e.tryRestoreFocusRecorded();if(n(r),t){if("FLUSH"===r.type)return t=!1,void e.tryRestoreFocusRecorded();if("DROP_COMPLETE"===r.type){t=!1;const n=r.payload.completed.result;n.combine&&e.tryShiftRecord(n.draggableId,n.combine.draggableId),e.tryRestoreFocusRecorded()}}}})(t),Xt(r,a))));var i};var nn=({scrollHeight:e,scrollWidth:t,height:n,width:r})=>{const a=W({x:t,y:e},{x:r,y:n});return{x:Math.max(0,a.x),y:Math.max(0,a.y)}},rn=()=>{const e=document.documentElement;return e||L(!1),e},an=()=>{const e=rn();return nn({scrollHeight:e.scrollHeight,scrollWidth:e.scrollWidth,width:e.clientWidth,height:e.clientHeight})},on=({critical:e,scrollOptions:t,registry:n})=>{st();const r=(()=>{const e=Ut(),t=an(),n=e.y,r=e.x,a=rn(),o=a.clientWidth,i=a.clientHeight;return{frame:f({top:n,left:r,right:r+o,bottom:n+i}),scroll:{initial:e,current:e,max:t,diff:{value:z,displacement:z}}}})(),a=r.scroll.current,o=e.droppable,i=n.droppable.getAllByType(o.type).map((e=>e.callbacks.getDimensionAndWatchScroll(a,t))),s=n.draggable.getAllByType(e.draggable.type).map((e=>e.getDimension(a))),l={draggables:re(s),droppables:ne(i)};lt();return{dimensions:l,critical:e,viewport:r}};function sn(e,t,n){if(n.descriptor.id===t.id)return!1;if(n.descriptor.type!==t.type)return!1;return"virtual"===e.droppable.getById(n.descriptor.droppableId).descriptor.mode}var ln=(e,t)=>{let n=null;const r=function({registry:e,callbacks:t}){let n={additions:{},removals:{},modified:{}},r=null;const a=()=>{r||(t.collectionStarting(),r=requestAnimationFrame((()=>{r=null,st();const{additions:a,removals:o,modified:i}=n,s=Object.keys(a).map((t=>e.draggable.getById(t).getDimension(z))).sort(((e,t)=>e.descriptor.index-t.descriptor.index)),l=Object.keys(i).map((t=>({droppableId:t,scroll:e.droppable.getById(t).callbacks.getScrollWhileDragging()}))),c={additions:s,removals:Object.keys(o),modified:l};n={additions:{},removals:{},modified:{}},lt(),t.publish(c)})))};return{add:e=>{const t=e.descriptor.id;n.additions[t]=e,n.modified[e.descriptor.droppableId]=!0,n.removals[t]&&delete n.removals[t],a()},remove:e=>{const t=e.descriptor;n.removals[t.id]=!0,n.modified[t.droppableId]=!0,n.additions[t.id]&&delete n.additions[t.id],a()},stop:()=>{r&&(cancelAnimationFrame(r),r=null,n={additions:{},removals:{},modified:{}})}}}({callbacks:{publish:t.publishWhileDragging,collectionStarting:t.collectionStarting},registry:e}),a=t=>{n||L(!1);const a=n.critical.draggable;"ADDITION"===t.type&&sn(e,a,t.value)&&r.add(t.value),"REMOVAL"===t.type&&sn(e,a,t.value)&&r.remove(t.value)},o={updateDroppableIsEnabled:(r,a)=>{e.droppable.exists(r)||L(!1),n&&t.updateDroppableIsEnabled({id:r,isEnabled:a})},updateDroppableIsCombineEnabled:(r,a)=>{n&&(e.droppable.exists(r)||L(!1),t.updateDroppableIsCombineEnabled({id:r,isCombineEnabled:a}))},scrollDroppable:(t,r)=>{n&&e.droppable.getById(t).callbacks.scroll(r)},updateDroppableScroll:(r,a)=>{n&&(e.droppable.exists(r)||L(!1),t.updateDroppableScroll({id:r,newScroll:a}))},startPublishing:t=>{n&&L(!1);const r=e.draggable.getById(t.draggableId),o=e.droppable.getById(r.descriptor.droppableId),i={draggable:r.descriptor,droppable:o.descriptor},s=e.subscribe(a);return n={critical:i,unsubscribe:s},on({critical:i,registry:e,scrollOptions:t.scrollOptions})},stopPublishing:()=>{if(!n)return;r.stop();const t=n.critical.droppable;e.droppable.getAllByType(t.type).forEach((e=>e.callbacks.dragStopped())),n.unsubscribe(),n=null}};return o},cn=(e,t)=>"IDLE"===e.phase||"DROP_ANIMATING"===e.phase&&(e.completed.result.draggableId!==t&&"DROP"===e.completed.result.reason),un=e=>{window.scrollBy(e.x,e.y)};const dn=R((e=>ae(e).filter((e=>!!e.isEnabled&&!!e.frame))));var pn=({center:e,destination:t,droppables:n})=>{if(t){const e=n[t];return e.frame?e:null}const r=((e,t)=>{const n=dn(t).find((t=>(t.frame||L(!1),Ye(t.frame.pageMarginBox)(e))))||null;return n})(e,n);return r};const fn={startFromPercentage:.25,maxScrollAtPercentage:.05,maxPixelScroll:28,ease:e=>e**2,durationDampening:{stopDampeningAt:1200,accelerateAt:360},disabled:!1};var hn=({startOfRange:e,endOfRange:t,current:n})=>{const r=t-e;if(0===r)return 0;return(n-e)/r},gn=({distanceToEdge:e,thresholds:t,dragStartTime:n,shouldUseTimeDampening:r,getAutoScrollerOptions:a})=>{const o=((e,t,n=()=>fn)=>{const r=n();if(e>t.startScrollingFrom)return 0;if(e<=t.maxScrollValueAt)return r.maxPixelScroll;if(e===t.startScrollingFrom)return 1;const a=1-hn({startOfRange:t.maxScrollValueAt,endOfRange:t.startScrollingFrom,current:e}),o=r.maxPixelScroll*r.ease(a);return Math.ceil(o)})(e,t,a);return 0===o?0:r?Math.max(((e,t,n)=>{const r=n(),a=r.durationDampening.accelerateAt,o=r.durationDampening.stopDampeningAt,i=t,s=o,l=Date.now()-i;if(l>=o)return e;if(l{const i=((e,t,n=()=>fn)=>{const r=n();return{startScrollingFrom:e[t.size]*r.startFromPercentage,maxScrollValueAt:e[t.size]*r.maxScrollAtPercentage}})(e,r,o);return t[r.end]0===e?0:e));var bn=({dragStartTime:e,container:t,subject:n,center:r,shouldUseTimeDampening:a,getAutoScrollerOptions:o})=>{const i={top:r.y-t.top,right:t.right-r.x,bottom:t.bottom-r.y,left:r.x-t.left},s=mn({container:t,distanceToEdges:i,dragStartTime:e,axis:ve,shouldUseTimeDampening:a,getAutoScrollerOptions:o}),l=mn({container:t,distanceToEdges:i,dragStartTime:e,axis:be,shouldUseTimeDampening:a,getAutoScrollerOptions:o}),c=vn({x:l,y:s});if(H(c,z))return null;const u=(({container:e,subject:t,proposedScroll:n})=>{const r=t.height>e.height,a=t.width>e.width;return a||r?a&&r?null:{x:a?0:n.x,y:r?0:n.y}:n})({container:t,subject:n,proposedScroll:c});return u?H(u,z)?null:u:null};const yn=X((e=>0===e?0:e>0?1:-1)),wn=(()=>{const e=(e,t)=>e<0?e:e>t?e-t:0;return({current:t,max:n,change:r})=>{const a=U(t,r),o={x:e(a.x,n.x),y:e(a.y,n.y)};return H(o,z)?null:o}})(),Sn=({max:e,current:t,change:n})=>{const r={x:Math.max(t.x,e.x),y:Math.max(t.y,e.y)},a=yn(n),o=wn({max:r,current:t,change:a});return!o||(0!==a.x&&0===o.x||0!==a.y&&0===o.y)},xn=(e,t)=>Sn({current:e.scroll.current,max:e.scroll.max,change:t}),En=(e,t)=>{const n=e.frame;return!!n&&Sn({current:n.scroll.current,max:n.scroll.max,change:t})};var Cn=({state:e,dragStartTime:t,shouldUseTimeDampening:n,scrollWindow:r,scrollDroppable:a,getAutoScrollerOptions:o})=>{const i=e.current.page.borderBoxCenter,s=e.dimensions.draggables[e.critical.draggable.id].page.marginBox;if(e.isWindowScrollAllowed){const a=(({viewport:e,subject:t,center:n,dragStartTime:r,shouldUseTimeDampening:a,getAutoScrollerOptions:o})=>{const i=bn({dragStartTime:r,container:e.frame,subject:t,center:n,shouldUseTimeDampening:a,getAutoScrollerOptions:o});return i&&xn(e,i)?i:null})({dragStartTime:t,viewport:e.viewport,subject:s,center:i,shouldUseTimeDampening:n,getAutoScrollerOptions:o});if(a)return void r(a)}const l=pn({center:i,destination:Ge(e.impact),droppables:e.dimensions.droppables});if(!l)return;const c=(({droppable:e,subject:t,center:n,dragStartTime:r,shouldUseTimeDampening:a,getAutoScrollerOptions:o})=>{const i=e.frame;if(!i)return null;const s=bn({dragStartTime:r,container:i.pageMarginBox,subject:t,center:n,shouldUseTimeDampening:a,getAutoScrollerOptions:o});return s&&En(e,s)?s:null})({dragStartTime:t,droppable:l,subject:s,center:i,shouldUseTimeDampening:n,getAutoScrollerOptions:o});c&&a(l.descriptor.id,c)},Rn=({move:e,scrollDroppable:t,scrollWindow:n})=>{const r=(e,n)=>{if(!En(e,n))return n;const r=((e,t)=>{const n=e.frame;return n&&En(e,t)?wn({current:n.scroll.current,max:n.scroll.max,change:t}):null})(e,n);if(!r)return t(e.descriptor.id,n),null;const a=W(n,r);t(e.descriptor.id,a);return W(n,a)},a=(e,t,r)=>{if(!e)return r;if(!xn(t,r))return r;const a=((e,t)=>{if(!xn(e,t))return null;const n=e.scroll.max,r=e.scroll.current;return wn({current:r,max:n,change:t})})(t,r);if(!a)return n(r),null;const o=W(r,a);n(o);return W(r,o)};return t=>{const n=t.scrollJumpRequest;if(!n)return;const o=Ge(t.impact);o||L(!1);const i=r(t.dimensions.droppables[o],n);if(!i)return;const s=t.viewport,l=a(t.isWindowScrollAllowed,s,i);l&&((t,n)=>{const r=U(t.current.client.selection,n);e({client:r})})(t,l)}},Dn=({scrollDroppable:e,scrollWindow:t,move:n,getAutoScrollerOptions:r})=>{const a=(({scrollWindow:e,scrollDroppable:t,getAutoScrollerOptions:n=()=>fn})=>{const r=D(e),a=D(t);let o=null;const i=e=>{o||L(!1);const{shouldUseTimeDampening:t,dragStartTime:i}=o;Cn({state:e,scrollWindow:r,scrollDroppable:a,dragStartTime:i,shouldUseTimeDampening:t,getAutoScrollerOptions:n})};return{start:e=>{st(),o&&L(!1);const t=Date.now();let r=!1;const a=()=>{r=!0};Cn({state:e,dragStartTime:0,shouldUseTimeDampening:!1,scrollWindow:a,scrollDroppable:a,getAutoScrollerOptions:n}),o={dragStartTime:t,shouldUseTimeDampening:r},lt(),r&&i(e)},stop:()=>{o&&(r.cancel(),a.cancel(),o=null)},scroll:i}})({scrollWindow:t,scrollDroppable:e,getAutoScrollerOptions:r}),o=Rn({move:n,scrollWindow:t,scrollDroppable:e});return{scroll:e=>{r().disabled||"DRAGGING"!==e.phase||("FLUID"!==e.movementMode?e.scrollJumpRequest&&o(e):a.scroll(e))},start:a.start,stop:a.stop}};const _n="data-rfd",On=(()=>{const e=`${_n}-drag-handle`;return{base:e,draggableId:`${e}-draggable-id`,contextId:`${e}-context-id`}})(),In=(()=>{const e=`${_n}-draggable`;return{base:e,contextId:`${e}-context-id`,id:`${e}-id`}})(),Tn=(()=>{const e=`${_n}-droppable`;return{base:e,contextId:`${e}-context-id`,id:`${e}-id`}})(),An={contextId:`${_n}-scroll-container-context-id`},kn=(e,t)=>e.map((e=>{const n=e.styles[t];return n?`${e.selector} { ${n} }`:""})).join(" ");var Pn=e=>{const t=(n=e,e=>`[${e}="${n}"]`);var n;const r=(()=>{const e="\n cursor: -webkit-grab;\n cursor: grab;\n ";return{selector:t(On.contextId),styles:{always:"\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n touch-action: manipulation;\n ",resting:e,dragging:"pointer-events: none;",dropAnimating:e}}})(),a=[(()=>{const e=`\n transition: ${Nt.outOfTheWay};\n `;return{selector:t(In.contextId),styles:{dragging:e,dropAnimating:e,userCancel:e}}})(),r,{selector:t(Tn.contextId),styles:{always:"overflow-anchor: none;"}},{selector:"body",styles:{dragging:"\n cursor: grabbing;\n cursor: -webkit-grabbing;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n overflow-anchor: none;\n "}}];return{always:kn(a,"always"),resting:kn(a,"resting"),dragging:kn(a,"dragging"),dropAnimating:kn(a,"dropAnimating"),userCancel:kn(a,"userCancel")}};var Ln="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?r.useLayoutEffect:r.useEffect;const Nn=()=>{const e=document.querySelector("head");return e||L(!1),e},Mn=e=>{const t=document.createElement("style");return e&&t.setAttribute("nonce",e),t.type="text/css",t};function Bn(e,t){return Array.from(e.querySelectorAll(t))}var Vn=e=>e&&e.ownerDocument&&e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;function jn(e){return e instanceof Vn(e).HTMLElement}function Fn(e,t){const n=`[${On.contextId}="${e}"]`,r=Bn(document,n);if(!r.length)return null;const a=r.find((e=>e.getAttribute(On.draggableId)===t));return a&&jn(a)?a:null}function $n(){const e={draggables:{},droppables:{}},t=[];function n(e){t.length&&t.forEach((t=>t(e)))}function r(t){return e.draggables[t]||null}function a(t){return e.droppables[t]||null}return{draggable:{register:t=>{e.draggables[t.descriptor.id]=t,n({type:"ADDITION",value:t})},update:(t,n)=>{const r=e.draggables[n.descriptor.id];r&&r.uniqueId===t.uniqueId&&(delete e.draggables[n.descriptor.id],e.draggables[t.descriptor.id]=t)},unregister:t=>{const a=t.descriptor.id,o=r(a);o&&t.uniqueId===o.uniqueId&&(delete e.draggables[a],e.droppables[t.descriptor.droppableId]&&n({type:"REMOVAL",value:t}))},getById:function(e){const t=r(e);return t||L(!1),t},findById:r,exists:e=>Boolean(r(e)),getAllByType:t=>Object.values(e.draggables).filter((e=>e.descriptor.type===t))},droppable:{register:t=>{e.droppables[t.descriptor.id]=t},unregister:t=>{const n=a(t.descriptor.id);n&&t.uniqueId===n.uniqueId&&delete e.droppables[t.descriptor.id]},getById:function(e){const t=a(e);return t||L(!1),t},findById:a,exists:e=>Boolean(a(e)),getAllByType:t=>Object.values(e.droppables).filter((e=>e.descriptor.type===t))},subscribe:function(e){return t.push(e),function(){const n=t.indexOf(e);-1!==n&&t.splice(n,1)}},clean:function(){e.draggables={},e.droppables={},t.length=0}}}var zn=a().createContext(null),Un=()=>{const e=document.body;return e||L(!1),e};var Wn={position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0 0 0 0)","clip-path":"inset(100%)"};const Hn=e=>`rfd-announcement-${e}`;let Gn=0;const qn={separator:"::"};var Qn="useId"in a()?function(e,t=qn){const n=a().useId();return u((()=>`${e}${t.separator}${n}`),[t.separator,e,n])}:function(e,t=qn){return u((()=>`${e}${t.separator}${Gn++}`),[t.separator,e])};var Yn=a().createContext(null);function Xn(e){0}function Kn(e,t){Xn()}function Zn(e){const t=(0,r.useRef)(e);return(0,r.useEffect)((()=>{t.current=e})),t}function Jn(e){return"IDLE"!==e.phase&&"DROP_ANIMATING"!==e.phase&&e.isDragging}const er=9,tr=13,nr=33,rr=34,ar=35,or=36,ir={[tr]:!0,[er]:!0};var sr=e=>{ir[e.keyCode]&&e.preventDefault()};var lr=(()=>{const e="visibilitychange";if("undefined"==typeof document)return e;return[e,`ms${e}`,`webkit${e}`,`moz${e}`,`o${e}`].find((e=>`on${e}`in document))||e})();const cr={type:"IDLE"};function ur({cancel:e,completed:t,getPhase:n,setPhase:r}){return[{eventName:"mousemove",fn:e=>{const{button:t,clientX:a,clientY:o}=e;if(0!==t)return;const i={x:a,y:o},s=n();if("DRAGGING"===s.type)return e.preventDefault(),void s.actions.move(i);"PENDING"!==s.type&&L(!1);const l=s.point;if(c=l,u=i,!(Math.abs(u.x-c.x)>=5||Math.abs(u.y-c.y)>=5))return;var c,u;e.preventDefault();const d=s.actions.fluidLift(i);r({type:"DRAGGING",actions:d})}},{eventName:"mouseup",fn:r=>{const a=n();"DRAGGING"===a.type?(r.preventDefault(),a.actions.drop({shouldBlockNextClick:!0}),t()):e()}},{eventName:"mousedown",fn:t=>{"DRAGGING"===n().type&&t.preventDefault(),e()}},{eventName:"keydown",fn:t=>{if("PENDING"!==n().type)return 27===t.keyCode?(t.preventDefault(),void e()):void sr(t);e()}},{eventName:"resize",fn:e},{eventName:"scroll",options:{passive:!0,capture:!1},fn:()=>{"PENDING"===n().type&&e()}},{eventName:"webkitmouseforcedown",fn:t=>{const r=n();"IDLE"===r.type&&L(!1),r.actions.shouldRespectForcePress()?e():t.preventDefault()}},{eventName:lr,fn:e}]}function dr(){}const pr={[rr]:!0,[nr]:!0,[or]:!0,[ar]:!0};function fr(e,t){function n(){t(),e.cancel()}return[{eventName:"keydown",fn:r=>27===r.keyCode?(r.preventDefault(),void n()):32===r.keyCode?(r.preventDefault(),t(),void e.drop()):40===r.keyCode?(r.preventDefault(),void e.moveDown()):38===r.keyCode?(r.preventDefault(),void e.moveUp()):39===r.keyCode?(r.preventDefault(),void e.moveRight()):37===r.keyCode?(r.preventDefault(),void e.moveLeft()):void(pr[r.keyCode]?r.preventDefault():sr(r))},{eventName:"mousedown",fn:n},{eventName:"mouseup",fn:n},{eventName:"click",fn:n},{eventName:"touchstart",fn:n},{eventName:"resize",fn:n},{eventName:"wheel",fn:n,options:{passive:!0}},{eventName:lr,fn:n}]}const hr={type:"IDLE"};const gr=["input","button","textarea","select","option","optgroup","video","audio"];function mr(e,t){if(null==t)return!1;if(gr.includes(t.tagName.toLowerCase()))return!0;const n=t.getAttribute("contenteditable");return"true"===n||""===n||t!==e&&mr(e,t.parentElement)}function vr(e,t){const n=t.target;return!!jn(n)&&mr(e,n)}var br=e=>f(e.getBoundingClientRect()).center;const yr=(()=>{const e="matches";if("undefined"==typeof document)return e;return[e,"msMatchesSelector","webkitMatchesSelector"].find((e=>e in Element.prototype))||e})();function wr(e,t){return null==e?null:e[yr](t)?e:wr(e.parentElement,t)}function Sr(e,t){return e.closest?e.closest(t):wr(e,t)}function xr(e,t){const n=t.target;if(!((r=n)instanceof Vn(r).Element))return null;var r;const a=function(e){return`[${On.contextId}="${e}"]`}(e),o=Sr(n,a);return o&&jn(o)?o:null}function Er(e){e.preventDefault()}function Cr({expected:e,phase:t,isLockActive:n,shouldWarn:r}){return!!n()&&e===t}function Rr({lockAPI:e,store:t,registry:n,draggableId:r}){if(e.isClaimed())return!1;const a=n.draggable.findById(r);return!!a&&(!!a.options.isEnabled&&!!cn(t.getState(),r))}function Dr({lockAPI:e,contextId:t,store:n,registry:r,draggableId:a,forceSensorStop:o,sourceEvent:i}){if(!Rr({lockAPI:e,store:n,registry:r,draggableId:a}))return null;const s=r.draggable.getById(a),l=function(e,t){const n=`[${In.contextId}="${e}"]`,r=Bn(document,n).find((e=>e.getAttribute(In.id)===t));return r&&jn(r)?r:null}(t,s.descriptor.id);if(!l)return null;if(i&&!s.options.canDragInteractiveElements&&vr(l,i))return null;const c=e.claim(o||I);let u="PRE_DRAG";function d(){return s.options.shouldRespectForcePress}function p(){return e.isActive(c)}const f=function(e,t){Cr({expected:e,phase:u,isLockActive:p,shouldWarn:!0})&&n.dispatch(t())}.bind(null,"DRAGGING");function h(t){function r(){e.release(),u="COMPLETED"}function a(e,a={shouldBlockNextClick:!1}){if(t.cleanup(),a.shouldBlockNextClick){const e=T(window,[{eventName:"click",fn:Er,options:{once:!0,passive:!1,capture:!0}}]);setTimeout(e)}r(),n.dispatch(Ot({reason:e}))}return"PRE_DRAG"!==u&&(r(),L(!1)),n.dispatch(gt(t.liftActionArgs)),u="DRAGGING",{isActive:()=>Cr({expected:"DRAGGING",phase:u,isLockActive:p,shouldWarn:!1}),shouldRespectForcePress:d,drop:e=>a("DROP",e),cancel:e=>a("CANCEL",e),...t.actions}}return{isActive:()=>Cr({expected:"PRE_DRAG",phase:u,isLockActive:p,shouldWarn:!1}),shouldRespectForcePress:d,fluidLift:function(e){const t=D((e=>{f((()=>St({client:e})))}));return{...h({liftActionArgs:{id:a,clientSelection:e,movementMode:"FLUID"},cleanup:()=>t.cancel(),actions:{move:t}}),move:t}},snapLift:function(){const e={moveUp:()=>f(xt),moveRight:()=>f(Ct),moveDown:()=>f(Et),moveLeft:()=>f(Rt)};return h({liftActionArgs:{id:a,clientSelection:br(l),movementMode:"SNAP"},cleanup:I,actions:e})},abort:function(){Cr({expected:"PRE_DRAG",phase:u,isLockActive:p,shouldWarn:!0})&&e.release()}}}const _r=[function(e){const t=(0,r.useRef)(cr),n=(0,r.useRef)(I),a=u((()=>({eventName:"mousedown",fn:function(t){if(t.defaultPrevented)return;if(0!==t.button)return;if(t.ctrlKey||t.metaKey||t.shiftKey||t.altKey)return;const r=e.findClosestDraggableId(t);if(!r)return;const a=e.tryGetLock(r,s,{sourceEvent:t});if(!a)return;t.preventDefault();const o={x:t.clientX,y:t.clientY};n.current(),p(a,o)}})),[e]),o=u((()=>({eventName:"webkitmouseforcewillbegin",fn:t=>{if(t.defaultPrevented)return;const n=e.findClosestDraggableId(t);if(!n)return;const r=e.findOptionsForDraggable(n);r&&(r.shouldRespectForcePress||e.canGetLock(n)&&t.preventDefault())}})),[e]),i=d((function(){n.current=T(window,[o,a],{passive:!1,capture:!0})}),[o,a]),s=d((()=>{"IDLE"!==t.current.type&&(t.current=cr,n.current(),i())}),[i]),l=d((()=>{const e=t.current;s(),"DRAGGING"===e.type&&e.actions.cancel({shouldBlockNextClick:!0}),"PENDING"===e.type&&e.actions.abort()}),[s]),c=d((function(){const e=ur({cancel:l,completed:s,getPhase:()=>t.current,setPhase:e=>{t.current=e}});n.current=T(window,e,{capture:!0,passive:!1})}),[l,s]),p=d((function(e,n){"IDLE"!==t.current.type&&L(!1),t.current={type:"PENDING",point:n,actions:e},c()}),[c]);Ln((function(){return i(),function(){n.current()}}),[i])},function(e){const t=(0,r.useRef)(dr),n=u((()=>({eventName:"keydown",fn:function(n){if(n.defaultPrevented)return;if(32!==n.keyCode)return;const r=e.findClosestDraggableId(n);if(!r)return;const o=e.tryGetLock(r,l,{sourceEvent:n});if(!o)return;n.preventDefault();let i=!0;const s=o.snapLift();function l(){i||L(!1),i=!1,t.current(),a()}t.current(),t.current=T(window,fr(s,l),{capture:!0,passive:!1})}})),[e]),a=d((function(){t.current=T(window,[n],{passive:!1,capture:!0})}),[n]);Ln((function(){return a(),function(){t.current()}}),[a])},function(e){const t=(0,r.useRef)(hr),n=(0,r.useRef)(I),a=d((function(){return t.current}),[]),o=d((function(e){t.current=e}),[]),i=u((()=>({eventName:"touchstart",fn:function(t){if(t.defaultPrevented)return;const r=e.findClosestDraggableId(t);if(!r)return;const a=e.tryGetLock(r,l,{sourceEvent:t});if(!a)return;const o=t.touches[0],{clientX:i,clientY:s}=o,c={x:i,y:s};n.current(),h(a,c)}})),[e]),s=d((function(){n.current=T(window,[i],{capture:!0,passive:!1})}),[i]),l=d((()=>{const e=t.current;"IDLE"!==e.type&&("PENDING"===e.type&&clearTimeout(e.longPressTimerId),o(hr),n.current(),s())}),[s,o]),c=d((()=>{const e=t.current;l(),"DRAGGING"===e.type&&e.actions.cancel({shouldBlockNextClick:!0}),"PENDING"===e.type&&e.actions.abort()}),[l]),p=d((function(){const e={capture:!0,passive:!1},t={cancel:c,completed:l,getPhase:a},r=T(window,function({cancel:e,completed:t,getPhase:n}){return[{eventName:"touchmove",options:{capture:!1},fn:t=>{const r=n();if("DRAGGING"!==r.type)return void e();r.hasMoved=!0;const{clientX:a,clientY:o}=t.touches[0],i={x:a,y:o};t.preventDefault(),r.actions.move(i)}},{eventName:"touchend",fn:r=>{const a=n();"DRAGGING"===a.type?(r.preventDefault(),a.actions.drop({shouldBlockNextClick:!0}),t()):e()}},{eventName:"touchcancel",fn:t=>{"DRAGGING"===n().type?(t.preventDefault(),e()):e()}},{eventName:"touchforcechange",fn:t=>{const r=n();"IDLE"===r.type&&L(!1);const a=t.touches[0];if(!a)return;if(!(a.force>=.15))return;const o=r.actions.shouldRespectForcePress();if("PENDING"!==r.type)return o?r.hasMoved?void t.preventDefault():void e():void t.preventDefault();o&&e()}},{eventName:lr,fn:e}]}(t),e),o=T(window,function({cancel:e,getPhase:t}){return[{eventName:"orientationchange",fn:e},{eventName:"resize",fn:e},{eventName:"contextmenu",fn:e=>{e.preventDefault()}},{eventName:"keydown",fn:n=>{"DRAGGING"===t().type?(27===n.keyCode&&n.preventDefault(),e()):e()}},{eventName:lr,fn:e}]}(t),e);n.current=function(){r(),o()}}),[c,a,l]),f=d((function(){const e=a();"PENDING"!==e.type&&L(!1);const t=e.actions.fluidLift(e.point);o({type:"DRAGGING",actions:t,hasMoved:!1})}),[a,o]),h=d((function(e,t){"IDLE"!==a().type&&L(!1);const n=setTimeout(f,120);o({type:"PENDING",point:t,actions:e,longPressTimerId:n}),p()}),[p,a,o,f]);Ln((function(){return s(),function(){n.current();const e=a();"PENDING"===e.type&&(clearTimeout(e.longPressTimerId),o(hr))}}),[a,s,o]),Ln((function(){return T(window,[{eventName:"touchmove",fn:()=>{},options:{capture:!1,passive:!1}}])}),[])}];function Or({contextId:e,store:t,registry:n,customSensors:a,enableDefaultSensors:o}){const i=[...o?_r:[],...a||[]],s=(0,r.useState)((()=>function(){let e=null;function t(){e||L(!1),e=null}return{isClaimed:function(){return Boolean(e)},isActive:function(t){return t===e},claim:function(t){e&&L(!1);const n={abandon:t};return e=n,n},release:t,tryAbandon:function(){e&&(e.abandon(),t())}}}()))[0],l=d((function(e,t){Jn(e)&&!Jn(t)&&s.tryAbandon()}),[s]);Ln((function(){let e=t.getState();return t.subscribe((()=>{const n=t.getState();l(e,n),e=n}))}),[s,t,l]),Ln((()=>s.tryAbandon),[s.tryAbandon]);const c=d((e=>Rr({lockAPI:s,registry:n,store:t,draggableId:e})),[s,n,t]),p=d(((r,a,o)=>Dr({lockAPI:s,registry:n,contextId:e,store:t,draggableId:r,forceSensorStop:a||null,sourceEvent:o&&o.sourceEvent?o.sourceEvent:null})),[e,s,n,t]),f=d((t=>function(e,t){const n=xr(e,t);return n?n.getAttribute(On.draggableId):null}(e,t)),[e]),h=d((e=>{const t=n.draggable.findById(e);return t?t.options:null}),[n.draggable]),g=d((function(){s.isClaimed()&&(s.tryAbandon(),"IDLE"!==t.getState().phase&&t.dispatch(Dt()))}),[s,t]),m=d((()=>s.isClaimed()),[s]),v=u((()=>({canGetLock:c,tryGetLock:p,findClosestDraggableId:f,findOptionsForDraggable:h,tryReleaseLock:g,isLockClaimed:m})),[c,p,f,h,g,m]);Xn();for(let e=0;e({onBeforeCapture:t=>{const n=()=>{e.onBeforeCapture&&e.onBeforeCapture(t)};a().version.startsWith("16")||a().version.startsWith("17")?n():(0,o.flushSync)(n)},onBeforeDragStart:e.onBeforeDragStart,onDragStart:e.onDragStart,onDragEnd:e.onDragEnd,onDragUpdate:e.onDragUpdate}),Tr=e=>({...fn,...e.autoScrollerOptions,durationDampening:{...fn.durationDampening,...e.autoScrollerOptions}});function Ar(e){return e.current||L(!1),e.current}function kr(e){const{contextId:t,setCallbacks:n,sensors:o,nonce:i,dragHandleUsageInstructions:c}=e,p=(0,r.useRef)(null);Kn();const f=Zn(e),h=d((()=>Ir(f.current)),[f]),g=d((()=>Tr(f.current)),[f]),m=function(e){const t=u((()=>Hn(e)),[e]),n=(0,r.useRef)(null);return(0,r.useEffect)((function(){const e=document.createElement("div");return n.current=e,e.id=t,e.setAttribute("aria-live","assertive"),e.setAttribute("aria-atomic","true"),_(e.style,Wn),Un().appendChild(e),function(){setTimeout((function(){const t=Un();t.contains(e)&&t.removeChild(e),e===n.current&&(n.current=null)}))}}),[t]),d((e=>{const t=n.current;t&&(t.textContent=e)}),[])}(t),v=function({contextId:e,text:t}){const n=Qn("hidden-text",{separator:"-"}),a=u((()=>function({contextId:e,uniqueId:t}){return`rfd-hidden-text-${e}-${t}`}({contextId:e,uniqueId:n})),[n,e]);return(0,r.useEffect)((function(){const e=document.createElement("div");return e.id=a,e.textContent=t,e.style.display="none",Un().appendChild(e),function(){const t=Un();t.contains(e)&&t.removeChild(e)}}),[a,t]),a}({contextId:t,text:c}),b=function(e,t){const n=u((()=>Pn(e)),[e]),a=(0,r.useRef)(null),o=(0,r.useRef)(null),i=d(R((e=>{const t=o.current;t||L(!1),t.textContent=e})),[]),s=d((e=>{const t=a.current;t||L(!1),t.textContent=e}),[]);Ln((()=>{(a.current||o.current)&&L(!1);const r=Mn(t),l=Mn(t);return a.current=r,o.current=l,r.setAttribute(`${_n}-always`,e),l.setAttribute(`${_n}-dynamic`,e),Nn().appendChild(r),Nn().appendChild(l),s(n.always),i(n.resting),()=>{const e=e=>{const t=e.current;t||L(!1),Nn().removeChild(t),e.current=null};e(a),e(o)}}),[t,s,i,n.always,n.resting,e]);const l=d((()=>i(n.dragging)),[i,n.dragging]),c=d((e=>{i("DROP"!==e?n.userCancel:n.dropAnimating)}),[i,n.dropAnimating,n.userCancel]),p=d((()=>{o.current&&i(n.resting)}),[i,n.resting]);return u((()=>({dragging:l,dropping:c,resting:p})),[l,c,p])}(t,i),y=d((e=>{Ar(p).dispatch(e)}),[]),w=u((()=>(0,s.bindActionCreators)({publishWhileDragging:mt,updateDroppableScroll:bt,updateDroppableIsEnabled:yt,updateDroppableIsCombineEnabled:wt,collectionStarting:vt},y)),[y]),S=function(){const e=u($n,[]);return(0,r.useEffect)((()=>function(){a().version.startsWith("16")||a().version.startsWith("17")?requestAnimationFrame(e.clean):e.clean()}),[e]),e}(),x=u((()=>ln(S,w)),[S,w]),E=u((()=>Dn({scrollWindow:un,scrollDroppable:x.scrollDroppable,getAutoScrollerOptions:g,...(0,s.bindActionCreators)({move:St},y)})),[x.scrollDroppable,y,g]),C=function(e){const t=(0,r.useRef)({}),n=(0,r.useRef)(null),a=(0,r.useRef)(null),o=(0,r.useRef)(!1),i=d((function(e,n){const r={id:e,focus:n};return t.current[e]=r,function(){const n=t.current;n[e]!==r&&delete n[e]}}),[]),s=d((function(t){const n=Fn(e,t);n&&n!==document.activeElement&&n.focus()}),[e]),l=d((function(e,t){n.current===e&&(n.current=t)}),[]),c=d((function(){a.current||o.current&&(a.current=requestAnimationFrame((()=>{a.current=null;const e=n.current;e&&s(e)})))}),[s]),p=d((function(e){n.current=null;const t=document.activeElement;t&&t.getAttribute(On.draggableId)===e&&(n.current=e)}),[]);return Ln((()=>(o.current=!0,function(){o.current=!1;const e=a.current;e&&cancelAnimationFrame(e)})),[]),u((()=>({register:i,tryRecordFocus:p,tryRestoreFocusRecorded:c,tryShiftRecord:l})),[i,p,c,l])}(t),D=u((()=>tn({announce:m,autoScroller:E,dimensionMarshal:x,focusMarshal:C,getResponders:h,styleMarshal:b})),[m,E,x,C,h,b]);p.current=D;const O=d((()=>{const e=Ar(p);"IDLE"!==e.getState().phase&&e.dispatch(Dt())}),[]),I=d((()=>{const e=Ar(p).getState();return"DROP_ANIMATING"===e.phase||"IDLE"!==e.phase&&e.isDragging}),[]);n(u((()=>({isDragging:I,tryAbort:O})),[I,O]));const T=d((e=>cn(Ar(p).getState(),e)),[]),A=d((()=>Qe(Ar(p).getState())),[]),k=u((()=>({marshal:x,focus:C,contextId:t,canLift:T,isMovementAllowed:A,dragHandleUsageInstructionsId:v,registry:S})),[t,x,v,C,T,A,S]);return Or({contextId:t,store:D,registry:S,customSensors:o||null,enableDefaultSensors:!1!==e.enableDefaultSensors}),(0,r.useEffect)((()=>O),[O]),a().createElement(Yn.Provider,{value:k},a().createElement(l.Provider,{context:zn,store:D},e.children))}let Pr=0;var Lr="useId"in a()?function(){return a().useId()}:function(){return u((()=>""+Pr++),[])};function Nr(e){const t=Lr(),n=e.dragHandleUsageInstructions||$.dragHandleUsageInstructions;return a().createElement(N,null,(r=>a().createElement(kr,{nonce:e.nonce,contextId:t,setCallbacks:r,dragHandleUsageInstructions:n,enableDefaultSensors:e.enableDefaultSensors,sensors:e.sensors,onBeforeCapture:e.onBeforeCapture,onBeforeDragStart:e.onBeforeDragStart,onDragStart:e.onDragStart,onDragUpdate:e.onDragUpdate,onDragEnd:e.onDragEnd,autoScrollerOptions:e.autoScrollerOptions},e.children)))}const Mr=5e3,Br=4500,Vr=(e,t)=>t?Nt.drop(t.duration):e?Nt.snap:Nt.fluid,jr=(e,t)=>{if(e)return t?At.drop:At.combining};function Fr(e){return"DRAGGING"===e.type?function(e){const t=e.dimension.client,{offset:n,combineWith:r,dropping:a}=e,o=Boolean(r),i=(e=>null!=e.forceShouldAnimate?e.forceShouldAnimate:"SNAP"===e.mode)(e),s=Boolean(a),l=s?Vt(n,o):Bt(n);return{position:"fixed",top:t.marginBox.top,left:t.marginBox.left,boxSizing:"border-box",width:t.borderBox.width,height:t.borderBox.height,transition:Vr(i,a),transform:l,opacity:jr(o,s),zIndex:s?Br:Mr,pointerEvents:"none"}}(e):{transform:Bt((t=e).offset),transition:t.shouldAnimateDisplacement?void 0:"none"};var t}function $r(e){const t=Qn("draggable"),{descriptor:n,registry:a,getDraggableRef:o,canDragInteractiveElements:i,shouldRespectForcePress:s,isEnabled:l}=e,c=u((()=>({canDragInteractiveElements:i,shouldRespectForcePress:s,isEnabled:l})),[i,l,s]),p=d((e=>{const t=o();return t||L(!1),function(e,t,n=z){const r=window.getComputedStyle(t),a=t.getBoundingClientRect(),o=S(a,r),i=w(o,n);return{descriptor:e,placeholder:{client:o,tagName:t.tagName.toLowerCase(),display:r.display},displaceBy:{x:o.marginBox.width,y:o.marginBox.height},client:o,page:i}}(n,t,e)}),[n,o]),f=u((()=>({uniqueId:t,descriptor:n,options:c,getDimension:p})),[n,p,c,t]),h=(0,r.useRef)(f),g=(0,r.useRef)(!0);Ln((()=>(a.draggable.register(h.current),()=>a.draggable.unregister(h.current))),[a.draggable]),Ln((()=>{if(g.current)return void(g.current=!1);const e=h.current;h.current=f,a.draggable.update(f,e)}),[f,a.draggable])}var zr=a().createContext(null);function Ur(e){const t=(0,r.useContext)(e);return t||L(!1),t}function Wr(e){e.preventDefault()}var Hr=e=>{const t=(0,r.useRef)(null),n=d(((e=null)=>{t.current=e}),[]),i=d((()=>t.current),[]),{contextId:s,dragHandleUsageInstructionsId:l,registry:c}=Ur(Yn),{type:p,droppableId:f}=Ur(zr),h=u((()=>({id:e.draggableId,index:e.index,type:p,droppableId:f})),[e.draggableId,e.index,p,f]),{children:g,draggableId:m,isEnabled:v,shouldRespectForcePress:b,canDragInteractiveElements:y,isClone:w,mapped:S,dropAnimationFinished:x}=e;if(Kn(),Xn(),!w){$r(u((()=>({descriptor:h,registry:c,getDraggableRef:i,canDragInteractiveElements:y,shouldRespectForcePress:b,isEnabled:v})),[h,c,i,y,b,v]))}const E=u((()=>v?{tabIndex:0,role:"button","aria-describedby":l,"data-rfd-drag-handle-draggable-id":m,"data-rfd-drag-handle-context-id":s,draggable:!1,onDragStart:Wr}:null),[s,l,m,v]),C=d((e=>{"DRAGGING"===S.type&&S.dropping&&"transform"===e.propertyName&&(a().version.startsWith("16")||a().version.startsWith("17")?x():(0,o.flushSync)(x))}),[x,S]),R=u((()=>{const e=Fr(S),t="DRAGGING"===S.type&&S.dropping?C:void 0;return{innerRef:n,draggableProps:{"data-rfd-draggable-context-id":s,"data-rfd-draggable-id":m,style:e,onTransitionEnd:t},dragHandleProps:E}}),[s,E,m,S,C,n]),D=u((()=>({draggableId:h.id,type:h.type,source:{index:h.index,droppableId:h.droppableId}})),[h.droppableId,h.id,h.index,h.type]);return a().createElement(a().Fragment,null,g(R,S.snapshot,D))},Gr=(e,t)=>e===t,qr=e=>{const{combine:t,destination:n}=e;return n?n.droppableId:t?t.droppableId:null};function Qr(e=null){return{isDragging:!1,isDropAnimating:!1,isClone:!1,dropAnimation:null,mode:null,draggingOver:null,combineTargetFor:e,combineWith:null}}const Yr={mapped:{type:"SECONDARY",offset:z,combineTargetFor:null,shouldAnimateDisplacement:!0,snapshot:Qr(null)}};const Xr={dropAnimationFinished:It},Kr=(0,l.connect)((()=>{const e=function(){const e=R(((e,t)=>({x:e,y:t}))),t=R(((e,t,n=null,r=null,a=null)=>({isDragging:!0,isClone:t,isDropAnimating:Boolean(a),dropAnimation:a,mode:e,draggingOver:n,combineWith:r,combineTargetFor:null}))),n=R(((e,n,r,a,o=null,i=null,s=null)=>({mapped:{type:"DRAGGING",dropping:null,draggingOver:o,combineWith:i,mode:n,offset:e,dimension:r,forceShouldAnimate:s,snapshot:t(n,a,o,i,null)}})));return(r,a)=>{if(Jn(r)){if(r.critical.draggable.id!==a.draggableId)return null;const t=r.current.client.offset,i=r.dimensions.draggables[a.draggableId],s=Ge(r.impact),l=(o=r.impact).at&&"COMBINE"===o.at.type?o.at.combine.draggableId:null,c=r.forceShouldAnimate;return n(e(t.x,t.y),r.movementMode,i,a.isClone,s,l,c)}var o;if("DROP_ANIMATING"===r.phase){const e=r.completed;if(e.result.draggableId!==a.draggableId)return null;const n=a.isClone,o=r.dimensions.draggables[a.draggableId],i=e.result,s=i.mode,l=qr(i),c=(e=>e.combine?e.combine.draggableId:null)(i),u={duration:r.dropDuration,curve:Tt,moveTo:r.newHomeClientOffset,opacity:c?At.drop:null,scale:c?kt.drop:null};return{mapped:{type:"DRAGGING",offset:r.newHomeClientOffset,dimension:o,dropping:u,draggingOver:l,combineWith:c,mode:s,forceShouldAnimate:null,snapshot:t(s,n,l,c,u)}}}return null}}(),t=function(){const e=R(((e,t)=>({x:e,y:t}))),t=R(Qr),n=R(((e,n=null,r)=>({mapped:{type:"SECONDARY",offset:e,combineTargetFor:n,shouldAnimateDisplacement:r,snapshot:t(n)}}))),r=e=>e?n(z,e,!0):null,a=(t,a,o,i)=>{const s=o.displaced.visible[t],l=Boolean(i.inVirtualList&&i.effected[t]),c=le(o),u=c&&c.draggableId===t?a:null;if(!s){if(!l)return r(u);if(o.displaced.invisible[t])return null;const a=G(i.displacedBy.point),s=e(a.x,a.y);return n(s,u,!0)}if(l)return r(u);const d=o.displacedBy.point,p=e(d.x,d.y);return n(p,u,s.shouldAnimate)};return(e,t)=>{if(Jn(e))return e.critical.draggable.id===t.draggableId?null:a(t.draggableId,e.critical.draggable.id,e.impact,e.afterCritical);if("DROP_ANIMATING"===e.phase){const n=e.completed;return n.result.draggableId===t.draggableId?null:a(t.draggableId,n.result.draggableId,n.impact,n.afterCritical)}return null}}();return(n,r)=>e(n,r)||t(n,r)||Yr}),Xr,null,{context:zn,areStatePropsEqual:Gr})(Hr);var Zr=Kr;function Jr(e){return Ur(zr).isUsingCloneFor!==e.draggableId||e.isClone?a().createElement(Zr,e):null}function ea(e){const t="boolean"!=typeof e.isDragDisabled||!e.isDragDisabled,n=Boolean(e.disableInteractiveElementBlocking),r=Boolean(e.shouldRespectForcePress);return a().createElement(Jr,_({},e,{isClone:!1,isEnabled:t,canDragInteractiveElements:n,shouldRespectForcePress:r}))}const ta=e=>t=>e===t,na=ta("scroll"),ra=ta("auto"),aa=(ta("visible"),(e,t)=>t(e.overflowX)||t(e.overflowY)),oa=e=>{const t=window.getComputedStyle(e),n={overflowX:t.overflowX,overflowY:t.overflowY};return aa(n,na)||aa(n,ra)},ia=e=>null==e||e===document.body||e===document.documentElement?null:oa(e)?e:ia(e.parentElement);var sa=e=>({x:e.scrollLeft,y:e.scrollTop});const la=e=>{if(!e)return!1;return"fixed"===window.getComputedStyle(e).position||la(e.parentElement)};var ca=({ref:e,descriptor:t,env:n,windowScroll:r,direction:a,isDropDisabled:o,isCombineEnabled:i,shouldClipSubject:s})=>{const l=n.closestScrollable,c=((e,t)=>{const n=x(e);if(!t)return n;if(e!==t)return n;const r=n.paddingBox.top-t.scrollTop,a=n.paddingBox.left-t.scrollLeft,o=r+t.scrollHeight,i=a+t.scrollWidth,s=h({top:r,right:i,bottom:o,left:a},n.border);return v({borderBox:s,margin:n.margin,border:n.border,padding:n.padding})})(e,l),u=w(c,r),d=(()=>{if(!l)return null;const e=x(l),t={scrollHeight:l.scrollHeight,scrollWidth:l.scrollWidth};return{client:e,page:w(e,r),scroll:sa(l),scrollSize:t,shouldClipSubject:s}})(),p=(({descriptor:e,isEnabled:t,isCombineEnabled:n,isFixedOnPage:r,direction:a,client:o,page:i,closest:s})=>{const l=(()=>{if(!s)return null;const{scrollSize:e,client:t}=s,n=nn({scrollHeight:e.scrollHeight,scrollWidth:e.scrollWidth,height:t.paddingBox.height,width:t.paddingBox.width});return{pageMarginBox:s.page.marginBox,frameClient:t,scrollSize:e,shouldClipSubject:s.shouldClipSubject,scroll:{initial:s.scroll,current:s.scroll,max:n,diff:{value:z,displacement:z}}}})(),c="vertical"===a?ve:be;return{descriptor:e,isCombineEnabled:n,isFixedOnPage:r,axis:c,isEnabled:t,client:o,page:i,frame:l,subject:ee({page:i,withPlaceholder:null,axis:c,frame:l})}})({descriptor:t,isEnabled:!o,isCombineEnabled:i,isFixedOnPage:n.isFixedOnPage,direction:a,client:c,page:u,closest:d});return p};const ua={passive:!1},da={passive:!0};var pa=e=>e.shouldPublishImmediately?ua:da;const fa=e=>e&&e.env.closestScrollable||null;function ha(e){const t=(0,r.useRef)(null),n=Ur(Yn),a=Qn("droppable"),{registry:o,marshal:i}=n,s=Zn(e),l=u((()=>({id:e.droppableId,type:e.type,mode:e.mode})),[e.droppableId,e.mode,e.type]),c=(0,r.useRef)(l),p=u((()=>R(((e,n)=>{t.current||L(!1);const r={x:e,y:n};i.updateDroppableScroll(l.id,r)}))),[l.id,i]),f=d((()=>{const e=t.current;return e&&e.env.closestScrollable?sa(e.env.closestScrollable):z}),[]),h=d((()=>{const e=f();p(e.x,e.y)}),[f,p]),g=u((()=>D(h)),[h]),m=d((()=>{const e=t.current,n=fa(e);e&&n||L(!1);e.scrollOptions.shouldPublishImmediately?h():g()}),[g,h]),v=d(((e,r)=>{t.current&&L(!1);const a=s.current,o=a.getDroppableRef();o||L(!1);const i=(e=>({closestScrollable:ia(e),isFixedOnPage:la(e)}))(o),c={ref:o,descriptor:l,env:i,scrollOptions:r};t.current=c;const u=ca({ref:o,descriptor:l,env:i,windowScroll:e,direction:a.direction,isDropDisabled:a.isDropDisabled,isCombineEnabled:a.isCombineEnabled,shouldClipSubject:!a.ignoreContainerClipping}),d=i.closestScrollable;return d&&(d.setAttribute(An.contextId,n.contextId),d.addEventListener("scroll",m,pa(c.scrollOptions))),u}),[n.contextId,l,m,s]),b=d((()=>{const e=t.current,n=fa(e);return e&&n||L(!1),sa(n)}),[]),y=d((()=>{const e=t.current;e||L(!1);const n=fa(e);t.current=null,n&&(g.cancel(),n.removeAttribute(An.contextId),n.removeEventListener("scroll",m,pa(e.scrollOptions)))}),[m,g]),w=d((e=>{const n=t.current;n||L(!1);const r=fa(n);r||L(!1),r.scrollTop+=e.y,r.scrollLeft+=e.x}),[]),S=u((()=>({getDimensionAndWatchScroll:v,getScrollWhileDragging:b,dragStopped:y,scroll:w})),[y,v,b,w]),x=u((()=>({uniqueId:a,descriptor:l,callbacks:S})),[S,l,a]);Ln((()=>(c.current=x.descriptor,o.droppable.register(x),()=>{t.current&&y(),o.droppable.unregister(x)})),[S,l,y,x,i,o.droppable]),Ln((()=>{t.current&&i.updateDroppableIsEnabled(c.current.id,!e.isDropDisabled)}),[e.isDropDisabled,i]),Ln((()=>{t.current&&i.updateDroppableIsCombineEnabled(c.current.id,e.isCombineEnabled)}),[e.isCombineEnabled,i])}function ga(){}const ma={width:0,height:0,margin:{top:0,right:0,bottom:0,left:0}},va=({isAnimatingOpenOnMount:e,placeholder:t,animate:n})=>{const r=(({isAnimatingOpenOnMount:e,placeholder:t,animate:n})=>e||"close"===n?ma:{height:t.client.borderBox.height,width:t.client.borderBox.width,margin:t.client.margin})({isAnimatingOpenOnMount:e,placeholder:t,animate:n});return{display:t.display,boxSizing:"border-box",width:r.width,height:r.height,marginTop:r.margin.top,marginRight:r.margin.right,marginBottom:r.margin.bottom,marginLeft:r.margin.left,flexShrink:"0",flexGrow:"0",pointerEvents:"none",transition:"none"!==n?Nt.placeholder:null}};var ba=a().memo((e=>{const t=(0,r.useRef)(null),n=d((()=>{t.current&&(clearTimeout(t.current),t.current=null)}),[]),{animate:o,onTransitionEnd:i,onClose:s,contextId:l}=e,[c,u]=(0,r.useState)("open"===e.animate);(0,r.useEffect)((()=>c?"open"!==o?(n(),u(!1),ga):t.current?ga:(t.current=setTimeout((()=>{t.current=null,u(!1)})),n):ga),[o,c,n]);const p=d((e=>{"height"===e.propertyName&&(i(),"close"===o&&s())}),[o,s,i]),f=va({isAnimatingOpenOnMount:c,animate:e.animate,placeholder:e.placeholder});return a().createElement(e.placeholder.tagName,{style:f,"data-rfd-placeholder-context-id":l,onTransitionEnd:p,ref:e.innerRef})}));class ya extends a().PureComponent{constructor(...e){super(...e),this.state={isVisible:Boolean(this.props.on),data:this.props.on,animate:this.props.shouldAnimate&&this.props.on?"open":"none"},this.onClose=()=>{"close"===this.state.animate&&this.setState({isVisible:!1})}}static getDerivedStateFromProps(e,t){return e.shouldAnimate?e.on?{isVisible:!0,data:e.on,animate:"open"}:t.isVisible?{isVisible:!0,data:t.data,animate:"close"}:{isVisible:!1,animate:"close",data:null}:{isVisible:Boolean(e.on),data:e.on,animate:"none"}}render(){if(!this.state.isVisible)return null;const e={onClose:this.onClose,data:this.state.data,animate:this.state.animate};return this.props.children(e)}}var wa=e=>{const t=(0,r.useContext)(Yn);t||L(!1);const{contextId:n,isMovementAllowed:o}=t,s=(0,r.useRef)(null),l=(0,r.useRef)(null),{children:c,droppableId:p,type:f,mode:h,direction:g,ignoreContainerClipping:m,isDropDisabled:v,isCombineEnabled:b,snapshot:y,useClone:w,updateViewportMaxScroll:S,getContainerForClone:x}=e,E=d((()=>s.current),[]),C=d(((e=null)=>{s.current=e}),[]),R=(d((()=>l.current),[]),d(((e=null)=>{l.current=e}),[]));Kn();const D=d((()=>{o()&&S({maxScroll:an()})}),[o,S]);ha({droppableId:p,type:f,mode:h,direction:g,isDropDisabled:v,isCombineEnabled:b,ignoreContainerClipping:m,getDroppableRef:E});const _=u((()=>a().createElement(ya,{on:e.placeholder,shouldAnimate:e.shouldAnimatePlaceholder},(({onClose:e,data:t,animate:r})=>a().createElement(ba,{placeholder:t,onClose:e,innerRef:R,animate:r,contextId:n,onTransitionEnd:D})))),[n,D,e.placeholder,e.shouldAnimatePlaceholder,R]),O=u((()=>({innerRef:C,placeholder:_,droppableProps:{"data-rfd-droppable-id":p,"data-rfd-droppable-context-id":n}})),[n,p,_,C]),I=w?w.dragging.draggableId:null,T=u((()=>({droppableId:p,type:f,isUsingCloneFor:I})),[p,I,f]);return a().createElement(zr.Provider,{value:T},c(O,y),function(){if(!w)return null;const{dragging:e,render:t}=w,n=a().createElement(Jr,{draggableId:e.draggableId,index:e.source.index,isClone:!0,isEnabled:!0,shouldRespectForcePress:!1,canDragInteractiveElements:!0},((n,r)=>t(n,r,e)));return i().createPortal(n,x())}())};const Sa={mode:"standard",type:"DEFAULT",direction:"vertical",isDropDisabled:!1,isCombineEnabled:!1,ignoreContainerClipping:!1,renderClone:null,getContainerForClone:function(){return document.body||L(!1),document.body}},xa=e=>{let t,n={...e};for(t in Sa)void 0===e[t]&&(n={...n,[t]:Sa[t]});return n},Ea=(e,t)=>e===t.droppable.type,Ca=(e,t)=>t.draggables[e.draggable.id],Ra={updateViewportMaxScroll:e=>({type:"UPDATE_VIEWPORT_MAX_SCROLL",payload:e})};var Da=(0,l.connect)((()=>{const e={placeholder:null,shouldAnimatePlaceholder:!0,snapshot:{isDraggingOver:!1,draggingOverWith:null,draggingFromThisWith:null,isUsingPlaceholder:!1},useClone:null},t={...e,shouldAnimatePlaceholder:!1},n=R((e=>({draggableId:e.id,type:e.type,source:{index:e.index,droppableId:e.droppableId}}))),r=R(((r,a,o,i,s,l)=>{const c=s.descriptor.id;if(s.descriptor.droppableId===r){const e=l?{render:l,dragging:n(s.descriptor)}:null,t={isDraggingOver:o,draggingOverWith:o?c:null,draggingFromThisWith:c,isUsingPlaceholder:!0};return{placeholder:s.placeholder,shouldAnimatePlaceholder:!1,snapshot:t,useClone:e}}if(!a)return t;if(!i)return e;const u={isDraggingOver:o,draggingOverWith:c,draggingFromThisWith:null,isUsingPlaceholder:!0};return{placeholder:s.placeholder,shouldAnimatePlaceholder:!0,snapshot:u,useClone:null}}));return(n,a)=>{const o=xa(a),i=o.droppableId,s=o.type,l=!o.isDropDisabled,c=o.renderClone;if(Jn(n)){const e=n.critical;if(!Ea(s,e))return t;const a=Ca(e,n.dimensions),o=Ge(n.impact)===i;return r(i,l,o,o,a,c)}if("DROP_ANIMATING"===n.phase){const e=n.completed;if(!Ea(s,e.critical))return t;const a=Ca(e.critical,n.dimensions);return r(i,l,qr(e.result)===i,Ge(e.impact)===i,a,c)}if("IDLE"===n.phase&&n.completed&&!n.shouldFlush){const r=n.completed;if(!Ea(s,r.critical))return t;const a=Ge(r.impact)===i,o=Boolean(r.impact.at&&"COMBINE"===r.impact.at.type),l=r.critical.droppable.id===i;return a?o?e:t:l?e:t}return t}}),Ra,((e,t,n)=>({...xa(n),...e,...t})),{context:zn,areStatePropsEqual:Gr})(wa)},7842:(e,t,n)=>{e=n.nmd(e);var r="__lodash_hash_undefined__",a=9007199254740991,o="[object Arguments]",i="[object Array]",s="[object Boolean]",l="[object Date]",c="[object Error]",u="[object Function]",d="[object Map]",p="[object Number]",f="[object Object]",h="[object Promise]",g="[object RegExp]",m="[object Set]",v="[object String]",b="[object Symbol]",y="[object WeakMap]",w="[object ArrayBuffer]",S="[object DataView]",x=/^\[object .+?Constructor\]$/,E=/^(?:0|[1-9]\d*)$/,C={};C["[object Float32Array]"]=C["[object Float64Array]"]=C["[object Int8Array]"]=C["[object Int16Array]"]=C["[object Int32Array]"]=C["[object Uint8Array]"]=C["[object Uint8ClampedArray]"]=C["[object Uint16Array]"]=C["[object Uint32Array]"]=!0,C[o]=C[i]=C[w]=C[s]=C[S]=C[l]=C[c]=C[u]=C[d]=C[p]=C[f]=C[g]=C[m]=C[v]=C[y]=!1;var R="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,D="object"==typeof self&&self&&self.Object===Object&&self,_=R||D||Function("return this")(),O=t&&!t.nodeType&&t,I=O&&e&&!e.nodeType&&e,T=I&&I.exports===O,A=T&&R.process,k=function(){try{return A&&A.binding&&A.binding("util")}catch(e){}}(),P=k&&k.isTypedArray;function L(e,t){for(var n=-1,r=null==e?0:e.length;++ns))return!1;var c=o.get(e);if(c&&o.get(t))return c==t;var u=-1,d=!0,p=2&n?new we:void 0;for(o.set(e,t),o.set(t,e);++u-1},be.prototype.set=function(e,t){var n=this.__data__,r=Ee(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},ye.prototype.clear=function(){this.size=0,this.__data__={hash:new ve,map:new(oe||be),string:new ve}},ye.prototype.delete=function(e){var t=Ae(this,e).delete(e);return this.size-=t?1:0,t},ye.prototype.get=function(e){return Ae(this,e).get(e)},ye.prototype.has=function(e){return Ae(this,e).has(e)},ye.prototype.set=function(e,t){var n=Ae(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},we.prototype.add=we.prototype.push=function(e){return this.__data__.set(e,r),this},we.prototype.has=function(e){return this.__data__.has(e)},Se.prototype.clear=function(){this.__data__=new be,this.size=0},Se.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Se.prototype.get=function(e){return this.__data__.get(e)},Se.prototype.has=function(e){return this.__data__.has(e)},Se.prototype.set=function(e,t){var n=this.__data__;if(n instanceof be){var r=n.__data__;if(!oe||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new ye(r)}return n.set(e,t),this.size=n.size,this};var Pe=te?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var n=-1,r=null==e?0:e.length,a=0,o=[];++n-1&&e%1==0&&e-1&&e%1==0&&e<=a}function Ue(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function We(e){return null!=e&&"object"==typeof e}var He=P?function(e){return function(t){return e(t)}}(P):function(e){return We(e)&&ze(e.length)&&!!C[Ce(e)]};function Ge(e){return null!=(t=e)&&ze(t.length)&&!$e(t)?xe(e):Oe(e);var t}e.exports=function(e,t){return De(e,t)}},5162:(e,t,n)=>{var r=n(1433).Symbol;e.exports=r},7148:(e,t,n)=>{var r=n(5162),a=n(7903),o=n(1738),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?a(e):o(e)}},8812:(e,t,n)=>{var r=n(2140),a=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(a,""):e}},2999:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},7903:(e,t,n)=>{var r=n(5162),a=Object.prototype,o=a.hasOwnProperty,i=a.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=o.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var a=i.call(e);return r&&(t?e[s]=n:delete e[s]),a}},1738:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},1433:(e,t,n)=>{var r=n(2999),a="object"==typeof self&&self&&self.Object===Object&&self,o=r||a||Function("return this")();e.exports=o},2140:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},6177:(e,t,n)=>{var r=n(8953),a=n(3664),o=n(5378),i=Math.max,s=Math.min;e.exports=function(e,t,n){var l,c,u,d,p,f,h=0,g=!1,m=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function b(t){var n=l,r=c;return l=c=void 0,h=t,d=e.apply(r,n)}function y(e){var n=e-f;return void 0===f||n>=t||n<0||m&&e-h>=u}function w(){var e=a();if(y(e))return S(e);p=setTimeout(w,function(e){var n=t-(e-f);return m?s(n,u-(e-h)):n}(e))}function S(e){return p=void 0,v&&l?b(e):(l=c=void 0,d)}function x(){var e=a(),n=y(e);if(l=arguments,c=this,f=e,n){if(void 0===p)return function(e){return h=e,p=setTimeout(w,t),g?b(e):d}(f);if(m)return clearTimeout(p),p=setTimeout(w,t),b(f)}return void 0===p&&(p=setTimeout(w,t)),d}return t=o(t)||0,r(n)&&(g=!!n.leading,u=(m="maxWait"in n)?i(o(n.maxWait)||0,t):u,v="trailing"in n?!!n.trailing:v),x.cancel=function(){void 0!==p&&clearTimeout(p),h=0,l=f=c=p=void 0},x.flush=function(){return void 0===p?d:S(a())},x}},8953:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},2934:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},5414:(e,t,n)=>{var r=n(7148),a=n(2934);e.exports=function(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==r(e)}},3664:(e,t,n)=>{var r=n(1433);e.exports=function(){return r.Date.now()}},5378:(e,t,n)=>{var r=n(8812),a=n(8953),o=n(5414),i=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(o(e))return NaN;if(a(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=a(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):i.test(e)?NaN:+e}},362:(e,t,n)=>{"use strict";var r=n(6441);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},2688:(e,t,n)=>{e.exports=n(362)()},6441:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},9111:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"DraggableCore",{enumerable:!0,get:function(){return u.default}}),t.default=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=f(t);if(n&&n.has(e))return n.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,n&&n.set(e,r);return r}(n(5959)),a=p(n(2688)),o=p(n(8398)),i=p(n(8262)),s=n(2837),l=n(402),c=n(6732),u=p(n(1060)),d=p(n(7988));function p(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(f=function(e){return e?n:t})(e)}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t{(0,d.default)("Draggable: onDragStart: %j",t);if(!1===this.props.onStart(e,(0,l.createDraggableData)(this,t)))return!1;this.setState({dragging:!0,dragged:!0})})),g(this,"onDrag",((e,t)=>{if(!this.state.dragging)return!1;(0,d.default)("Draggable: onDrag: %j",t);const n=(0,l.createDraggableData)(this,t),r={x:n.x,y:n.y,slackX:0,slackY:0};if(this.props.bounds){const{x:e,y:t}=r;r.x+=this.state.slackX,r.y+=this.state.slackY;const[a,o]=(0,l.getBoundPosition)(this,r.x,r.y);r.x=a,r.y=o,r.slackX=this.state.slackX+(e-r.x),r.slackY=this.state.slackY+(t-r.y),n.x=r.x,n.y=r.y,n.deltaX=r.x-this.state.x,n.deltaY=r.y-this.state.y}if(!1===this.props.onDrag(e,n))return!1;this.setState(r)})),g(this,"onDragStop",((e,t)=>{if(!this.state.dragging)return!1;if(!1===this.props.onStop(e,(0,l.createDraggableData)(this,t)))return!1;(0,d.default)("Draggable: onDragStop: %j",t);const n={dragging:!1,slackX:0,slackY:0};if(Boolean(this.props.position)){const{x:e,y:t}=this.props.position;n.x=e,n.y=t}this.setState(n)})),this.state={dragging:!1,dragged:!1,x:e.position?e.position.x:e.defaultPosition.x,y:e.position?e.position.y:e.defaultPosition.y,prevPropsPosition:{...e.position},slackX:0,slackY:0,isElementSVG:!1},!e.position||e.onDrag||e.onStop||console.warn("A `position` was applied to this , without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}componentDidMount(){void 0!==window.SVGElement&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.setState({dragging:!1})}findDOMNode(){var e,t;return null!==(e=null===(t=this.props)||void 0===t||null===(t=t.nodeRef)||void 0===t?void 0:t.current)&&void 0!==e?e:o.default.findDOMNode(this)}render(){const{axis:e,bounds:t,children:n,defaultPosition:a,defaultClassName:o,defaultClassNameDragging:c,defaultClassNameDragged:d,position:p,positionOffset:f,scale:g,...m}=this.props;let v={},b=null;const y=!Boolean(p)||this.state.dragging,w=p||a,S={x:(0,l.canDragX)(this)&&y?this.state.x:w.x,y:(0,l.canDragY)(this)&&y?this.state.y:w.y};this.state.isElementSVG?b=(0,s.createSVGTransform)(S,f):v=(0,s.createCSSTransform)(S,f);const x=(0,i.default)(n.props.className||"",o,{[c]:this.state.dragging,[d]:this.state.dragged});return r.createElement(u.default,h({},m,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),r.cloneElement(r.Children.only(n),{className:x,style:{...n.props.style,...v},transform:b}))}}t.default=m,g(m,"displayName","Draggable"),g(m,"propTypes",{...u.default.propTypes,axis:a.default.oneOf(["both","x","y","none"]),bounds:a.default.oneOfType([a.default.shape({left:a.default.number,right:a.default.number,top:a.default.number,bottom:a.default.number}),a.default.string,a.default.oneOf([!1])]),defaultClassName:a.default.string,defaultClassNameDragging:a.default.string,defaultClassNameDragged:a.default.string,defaultPosition:a.default.shape({x:a.default.number,y:a.default.number}),positionOffset:a.default.shape({x:a.default.oneOfType([a.default.number,a.default.string]),y:a.default.oneOfType([a.default.number,a.default.string])}),position:a.default.shape({x:a.default.number,y:a.default.number}),className:c.dontSetMe,style:c.dontSetMe,transform:c.dontSetMe}),g(m,"defaultProps",{...u.default.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1})},1060:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=d(t);if(n&&n.has(e))return n.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,n&&n.set(e,r);return r}(n(5959)),a=u(n(2688)),o=u(n(8398)),i=n(2837),s=n(402),l=n(6732),c=u(n(7988));function u(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}function p(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const f={start:"touchstart",move:"touchmove",stop:"touchend"},h={start:"mousedown",move:"mousemove",stop:"mouseup"};let g=h;class m extends r.Component{constructor(){super(...arguments),p(this,"dragging",!1),p(this,"lastX",NaN),p(this,"lastY",NaN),p(this,"touchIdentifier",null),p(this,"mounted",!1),p(this,"handleDragStart",(e=>{if(this.props.onMouseDown(e),!this.props.allowAnyClick&&"number"==typeof e.button&&0!==e.button)return!1;const t=this.findDOMNode();if(!t||!t.ownerDocument||!t.ownerDocument.body)throw new Error(" not mounted on DragStart!");const{ownerDocument:n}=t;if(this.props.disabled||!(e.target instanceof n.defaultView.Node)||this.props.handle&&!(0,i.matchesSelectorAndParentsTo)(e.target,this.props.handle,t)||this.props.cancel&&(0,i.matchesSelectorAndParentsTo)(e.target,this.props.cancel,t))return;"touchstart"===e.type&&e.preventDefault();const r=(0,i.getTouchIdentifier)(e);this.touchIdentifier=r;const a=(0,s.getControlPosition)(e,r,this);if(null==a)return;const{x:o,y:l}=a,u=(0,s.createCoreData)(this,o,l);(0,c.default)("DraggableCore: handleDragStart: %j",u),(0,c.default)("calling",this.props.onStart);!1!==this.props.onStart(e,u)&&!1!==this.mounted&&(this.props.enableUserSelectHack&&(0,i.addUserSelectStyles)(n),this.dragging=!0,this.lastX=o,this.lastY=l,(0,i.addEvent)(n,g.move,this.handleDrag),(0,i.addEvent)(n,g.stop,this.handleDragStop))})),p(this,"handleDrag",(e=>{const t=(0,s.getControlPosition)(e,this.touchIdentifier,this);if(null==t)return;let{x:n,y:r}=t;if(Array.isArray(this.props.grid)){let e=n-this.lastX,t=r-this.lastY;if([e,t]=(0,s.snapToGrid)(this.props.grid,e,t),!e&&!t)return;n=this.lastX+e,r=this.lastY+t}const a=(0,s.createCoreData)(this,n,r);(0,c.default)("DraggableCore: handleDrag: %j",a);if(!1!==this.props.onDrag(e,a)&&!1!==this.mounted)this.lastX=n,this.lastY=r;else try{this.handleDragStop(new MouseEvent("mouseup"))}catch(e){const t=document.createEvent("MouseEvents");t.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(t)}})),p(this,"handleDragStop",(e=>{if(!this.dragging)return;const t=(0,s.getControlPosition)(e,this.touchIdentifier,this);if(null==t)return;let{x:n,y:r}=t;if(Array.isArray(this.props.grid)){let e=n-this.lastX||0,t=r-this.lastY||0;[e,t]=(0,s.snapToGrid)(this.props.grid,e,t),n=this.lastX+e,r=this.lastY+t}const a=(0,s.createCoreData)(this,n,r);if(!1===this.props.onStop(e,a)||!1===this.mounted)return!1;const o=this.findDOMNode();o&&this.props.enableUserSelectHack&&(0,i.removeUserSelectStyles)(o.ownerDocument),(0,c.default)("DraggableCore: handleDragStop: %j",a),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,o&&((0,c.default)("DraggableCore: Removing handlers"),(0,i.removeEvent)(o.ownerDocument,g.move,this.handleDrag),(0,i.removeEvent)(o.ownerDocument,g.stop,this.handleDragStop))})),p(this,"onMouseDown",(e=>(g=h,this.handleDragStart(e)))),p(this,"onMouseUp",(e=>(g=h,this.handleDragStop(e)))),p(this,"onTouchStart",(e=>(g=f,this.handleDragStart(e)))),p(this,"onTouchEnd",(e=>(g=f,this.handleDragStop(e))))}componentDidMount(){this.mounted=!0;const e=this.findDOMNode();e&&(0,i.addEvent)(e,f.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;const e=this.findDOMNode();if(e){const{ownerDocument:t}=e;(0,i.removeEvent)(t,h.move,this.handleDrag),(0,i.removeEvent)(t,f.move,this.handleDrag),(0,i.removeEvent)(t,h.stop,this.handleDragStop),(0,i.removeEvent)(t,f.stop,this.handleDragStop),(0,i.removeEvent)(e,f.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&(0,i.removeUserSelectStyles)(t)}}findDOMNode(){var e,t;return null!==(e=this.props)&&void 0!==e&&e.nodeRef?null===(t=this.props)||void 0===t||null===(t=t.nodeRef)||void 0===t?void 0:t.current:o.default.findDOMNode(this)}render(){return r.cloneElement(r.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}}t.default=m,p(m,"displayName","DraggableCore"),p(m,"propTypes",{allowAnyClick:a.default.bool,children:a.default.node.isRequired,disabled:a.default.bool,enableUserSelectHack:a.default.bool,offsetParent:function(e,t){if(e[t]&&1!==e[t].nodeType)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:a.default.arrayOf(a.default.number),handle:a.default.string,cancel:a.default.string,nodeRef:a.default.object,onStart:a.default.func,onDrag:a.default.func,onStop:a.default.func,onMouseDown:a.default.func,scale:a.default.number,className:l.dontSetMe,style:l.dontSetMe,transform:l.dontSetMe}),p(m,"defaultProps",{allowAnyClick:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1})},8230:(e,t,n)=>{"use strict";const{default:r,DraggableCore:a}=n(9111);e.exports=r,e.exports.default=r,e.exports.DraggableCore=a},2837:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addClassName=c,t.addEvent=function(e,t,n,r){if(!e)return;const a={capture:!0,...r};e.addEventListener?e.addEventListener(t,n,a):e.attachEvent?e.attachEvent("on"+t,n):e["on"+t]=n},t.addUserSelectStyles=function(e){if(!e)return;let t=e.getElementById("react-draggable-style-el");t||(t=e.createElement("style"),t.type="text/css",t.id="react-draggable-style-el",t.innerHTML=".react-draggable-transparent-selection *::-moz-selection {all: inherit;}\n",t.innerHTML+=".react-draggable-transparent-selection *::selection {all: inherit;}\n",e.getElementsByTagName("head")[0].appendChild(t));e.body&&c(e.body,"react-draggable-transparent-selection")},t.createCSSTransform=function(e,t){const n=l(e,t,"px");return{[(0,a.browserPrefixToKey)("transform",a.default)]:n}},t.createSVGTransform=function(e,t){return l(e,t,"")},t.getTouch=function(e,t){return e.targetTouches&&(0,r.findInArray)(e.targetTouches,(e=>t===e.identifier))||e.changedTouches&&(0,r.findInArray)(e.changedTouches,(e=>t===e.identifier))},t.getTouchIdentifier=function(e){if(e.targetTouches&&e.targetTouches[0])return e.targetTouches[0].identifier;if(e.changedTouches&&e.changedTouches[0])return e.changedTouches[0].identifier},t.getTranslation=l,t.innerHeight=function(e){let t=e.clientHeight;const n=e.ownerDocument.defaultView.getComputedStyle(e);return t-=(0,r.int)(n.paddingTop),t-=(0,r.int)(n.paddingBottom),t},t.innerWidth=function(e){let t=e.clientWidth;const n=e.ownerDocument.defaultView.getComputedStyle(e);return t-=(0,r.int)(n.paddingLeft),t-=(0,r.int)(n.paddingRight),t},t.matchesSelector=s,t.matchesSelectorAndParentsTo=function(e,t,n){let r=e;do{if(s(r,t))return!0;if(r===n)return!1;r=r.parentNode}while(r);return!1},t.offsetXYFromParent=function(e,t,n){const r=t===t.ownerDocument.body?{left:0,top:0}:t.getBoundingClientRect(),a=(e.clientX+t.scrollLeft-r.left)/n,o=(e.clientY+t.scrollTop-r.top)/n;return{x:a,y:o}},t.outerHeight=function(e){let t=e.clientHeight;const n=e.ownerDocument.defaultView.getComputedStyle(e);return t+=(0,r.int)(n.borderTopWidth),t+=(0,r.int)(n.borderBottomWidth),t},t.outerWidth=function(e){let t=e.clientWidth;const n=e.ownerDocument.defaultView.getComputedStyle(e);return t+=(0,r.int)(n.borderLeftWidth),t+=(0,r.int)(n.borderRightWidth),t},t.removeClassName=u,t.removeEvent=function(e,t,n,r){if(!e)return;const a={capture:!0,...r};e.removeEventListener?e.removeEventListener(t,n,a):e.detachEvent?e.detachEvent("on"+t,n):e["on"+t]=null},t.removeUserSelectStyles=function(e){if(!e)return;try{if(e.body&&u(e.body,"react-draggable-transparent-selection"),e.selection)e.selection.empty();else{const t=(e.defaultView||window).getSelection();t&&"Caret"!==t.type&&t.removeAllRanges()}}catch(e){}};var r=n(6732),a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=o(t);if(n&&n.has(e))return n.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var s=a?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(r,i,s):r[i]=e[i]}r.default=e,n&&n.set(e,r);return r}(n(7350));function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(o=function(e){return e?n:t})(e)}let i="";function s(e,t){return i||(i=(0,r.findInArray)(["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"],(function(t){return(0,r.isFunction)(e[t])}))),!!(0,r.isFunction)(e[i])&&e[i](t)}function l(e,t,n){let{x:r,y:a}=e,o="translate(".concat(r).concat(n,",").concat(a).concat(n,")");if(t){const e="".concat("string"==typeof t.x?t.x:t.x+n),r="".concat("string"==typeof t.y?t.y:t.y+n);o="translate(".concat(e,", ").concat(r,")")+o}return o}function c(e,t){e.classList?e.classList.add(t):e.className.match(new RegExp("(?:^|\\s)".concat(t,"(?!\\S)")))||(e.className+=" ".concat(t))}function u(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp("(?:^|\\s)".concat(t,"(?!\\S)"),"g"),"")}},7350:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.browserPrefixToKey=a,t.browserPrefixToStyle=function(e,t){return t?"-".concat(t.toLowerCase(),"-").concat(e):e},t.default=void 0,t.getPrefix=r;const n=["Moz","Webkit","O","ms"];function r(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"transform";if("undefined"==typeof window)return"";const r=null===(e=window.document)||void 0===e||null===(e=e.documentElement)||void 0===e?void 0:e.style;if(!r)return"";if(t in r)return"";for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){0}},402:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.canDragX=function(e){return"both"===e.props.axis||"x"===e.props.axis},t.canDragY=function(e){return"both"===e.props.axis||"y"===e.props.axis},t.createCoreData=function(e,t,n){const a=!(0,r.isNum)(e.lastX),i=o(e);return a?{node:i,deltaX:0,deltaY:0,lastX:t,lastY:n,x:t,y:n}:{node:i,deltaX:t-e.lastX,deltaY:n-e.lastY,lastX:e.lastX,lastY:e.lastY,x:t,y:n}},t.createDraggableData=function(e,t){const n=e.props.scale;return{node:t.node,x:e.state.x+t.deltaX/n,y:e.state.y+t.deltaY/n,deltaX:t.deltaX/n,deltaY:t.deltaY/n,lastX:e.state.x,lastY:e.state.y}},t.getBoundPosition=function(e,t,n){if(!e.props.bounds)return[t,n];let{bounds:i}=e.props;i="string"==typeof i?i:function(e){return{left:e.left,top:e.top,right:e.right,bottom:e.bottom}}(i);const s=o(e);if("string"==typeof i){const{ownerDocument:e}=s,t=e.defaultView;let n;if(n="parent"===i?s.parentNode:e.querySelector(i),!(n instanceof t.HTMLElement))throw new Error('Bounds selector "'+i+'" could not find an element.');const o=n,l=t.getComputedStyle(s),c=t.getComputedStyle(o);i={left:-s.offsetLeft+(0,r.int)(c.paddingLeft)+(0,r.int)(l.marginLeft),top:-s.offsetTop+(0,r.int)(c.paddingTop)+(0,r.int)(l.marginTop),right:(0,a.innerWidth)(o)-(0,a.outerWidth)(s)-s.offsetLeft+(0,r.int)(c.paddingRight)-(0,r.int)(l.marginRight),bottom:(0,a.innerHeight)(o)-(0,a.outerHeight)(s)-s.offsetTop+(0,r.int)(c.paddingBottom)-(0,r.int)(l.marginBottom)}}(0,r.isNum)(i.right)&&(t=Math.min(t,i.right));(0,r.isNum)(i.bottom)&&(n=Math.min(n,i.bottom));(0,r.isNum)(i.left)&&(t=Math.max(t,i.left));(0,r.isNum)(i.top)&&(n=Math.max(n,i.top));return[t,n]},t.getControlPosition=function(e,t,n){const r="number"==typeof t?(0,a.getTouch)(e,t):null;if("number"==typeof t&&!r)return null;const i=o(n),s=n.props.offsetParent||i.offsetParent||i.ownerDocument.body;return(0,a.offsetXYFromParent)(r||e,s,n.props.scale)},t.snapToGrid=function(e,t,n){const r=Math.round(t/e[0])*e[0],a=Math.round(n/e[1])*e[1];return[r,a]};var r=n(6732),a=n(2837);function o(e){const t=e.findDOMNode();if(!t)throw new Error(": Unmounted during event!");return t}},6732:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dontSetMe=function(e,t,n){if(e[t])return new Error("Invalid prop ".concat(t," passed to ").concat(n," - do not set this, set it on the child."))},t.findInArray=function(e,t){for(let n=0,r=e.length;n{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta,default:()=>o});const o=a},8100:(e,t,n)=>{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=p(n(5959)),o=p(n(2688)),i=n(8230),s=n(936),l=n(414),c=n(906),u=n(7222),d=p(n(7256));function p(e){return e&&e.__esModule?e:{default:e}}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function h(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:this.props;return{cols:e.cols,containerPadding:e.containerPadding,containerWidth:e.containerWidth,margin:e.margin,maxRows:e.maxRows,rowHeight:e.rowHeight}}},{key:"createStyle",value:function(e){var t,n=this.props,r=n.usePercentages,a=n.containerWidth;return n.useCSSTransforms?t=(0,l.setTransform)(e):(t=(0,l.setTopLeft)(e),r&&(t.left=(0,l.perc)(e.left/a),t.width=(0,l.perc)(e.width/a))),t}},{key:"mixinDraggable",value:function(e,t){return a.default.createElement(i.DraggableCore,{disabled:!t,onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop,handle:this.props.handle,cancel:".react-resizable-handle"+(this.props.cancel?","+this.props.cancel:""),scale:this.props.transformScale,nodeRef:this.elementRef},e)}},{key:"mixinResizable",value:function(e,t,n){var r=this.props,o=r.cols,i=r.x,l=r.minW,u=r.minH,d=r.maxW,p=r.maxH,f=r.transformScale,h=r.resizeHandles,g=r.resizeHandle,m=this.getPositionParams(),v=(0,c.calcGridItemPosition)(m,0,0,o-i,0).width,b=(0,c.calcGridItemPosition)(m,0,0,l,u),y=(0,c.calcGridItemPosition)(m,0,0,d,p),w=[b.width,b.height],S=[Math.min(y.width,v),Math.min(y.height,1/0)];return a.default.createElement(s.Resizable,{draggableOpts:{disabled:!n},className:n?void 0:"react-resizable-hide",width:t.width,height:t.height,minConstraints:w,maxConstraints:S,onResizeStop:this.onResizeStop,onResizeStart:this.onResizeStart,onResize:this.onResize,transformScale:f,resizeHandles:h,handle:g},e)}},{key:"onResizeHandler",value:function(e,t,n){var r=t.node,a=t.size,o=this.props[n];if(o){var i=this.props,s=i.cols,l=i.x,u=i.y,d=i.i,p=i.maxH,f=i.minH,h=this.props,g=h.minW,m=h.maxW,v=(0,c.calcWH)(this.getPositionParams(),a.width,a.height,l,u),b=v.w,y=v.h;g=Math.max(g,1),m=Math.min(m,s-l),b=(0,c.clamp)(b,g,m),y=(0,c.clamp)(y,f,p),this.setState({resizing:"onResizeStop"===n?null:a}),o.call(this,d,b,y,{e,node:r,size:a})}}},{key:"render",value:function(){var e=this.props,t=e.x,n=e.y,r=e.w,o=e.h,i=e.isDraggable,s=e.isResizable,l=e.droppingPosition,u=e.useCSSTransforms,p=(0,c.calcGridItemPosition)(this.getPositionParams(),t,n,r,o,this.state),f=a.default.Children.only(this.props.children),g=a.default.cloneElement(f,{ref:this.elementRef,className:(0,d.default)("react-grid-item",f.props.className,this.props.className,{static:this.props.static,resizing:Boolean(this.state.resizing),"react-draggable":i,"react-draggable-dragging":Boolean(this.state.dragging),dropping:Boolean(l),cssTransforms:u}),style:h(h(h({},this.props.style),f.props.style),this.createStyle(p))});return g=this.mixinResizable(g,p,s),g=this.mixinDraggable(g,i)}}],n&&g(t.prototype,n),r&&g(t,r),Object.defineProperty(t,"prototype",{writable:!1}),u}(a.default.Component);t.default=S,w(S,"propTypes",{children:o.default.element,cols:o.default.number.isRequired,containerWidth:o.default.number.isRequired,rowHeight:o.default.number.isRequired,margin:o.default.array.isRequired,maxRows:o.default.number.isRequired,containerPadding:o.default.array.isRequired,x:o.default.number.isRequired,y:o.default.number.isRequired,w:o.default.number.isRequired,h:o.default.number.isRequired,minW:function(e,t){var n=e[t];return"number"!=typeof n?new Error("minWidth not Number"):n>e.w||n>e.maxW?new Error("minWidth larger than item width/maxWidth"):void 0},maxW:function(e,t){var n=e[t];return"number"!=typeof n?new Error("maxWidth not Number"):ne.h||n>e.maxH?new Error("minHeight larger than item height/maxHeight"):void 0},maxH:function(e,t){var n=e[t];return"number"!=typeof n?new Error("maxHeight not Number"):n{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!==r(e)&&"function"!=typeof e)return{default:e};var n=p(t);if(n&&n.has(e))return n.get(e);var a={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var s=o?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(a,i,s):a[i]=e[i]}a.default=e,n&&n.set(e,a);return a}(n(5959)),o=d(n(7842)),i=d(n(7256)),s=n(414),l=n(906),c=d(n(8100)),u=d(n(7222));function d(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(p=function(e){return e?n:t})(e)}function f(e){return function(e){if(Array.isArray(e))return b(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function g(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0){var o=1/0,i=1/0;a.forEach((function(t){t.x>e.x&&(o=Math.min(o,t.x)),t.y>e.y&&(i=Math.min(i,t.y))})),Number.isFinite(o)&&(e.w=o-e.x),Number.isFinite(i)&&(e.h=i-e.y)}}return t||(e.w=n,e.h=r),e})),b=m(v,2),y=b[0],w=b[1];if(w){var S={w:w.w,h:w.h,x:w.x,y:w.y,static:!0,i:t};e.props.onResize(y,u,w,S,o,i),e.setState({layout:h?y:(0,s.compact)(y,(0,s.compactType)(e.props),p),activeDrag:S})}})),C(x(e),"onResizeStop",(function(t,n,r,a){var o=a.e,i=a.node,l=e.state,c=l.layout,u=l.oldResizeItem,d=e.props,p=d.cols,f=d.allowOverlap,h=(0,s.getLayoutItem)(c,t);e.props.onResizeStop(c,u,h,null,o,i);var g=f?c:(0,s.compact)(c,(0,s.compactType)(e.props),p),m=e.state.oldLayout;e.setState({activeDrag:null,layout:g,oldResizeItem:null,oldLayout:null}),e.onLayoutMaybeChanged(g,m)})),C(x(e),"onDragOver",(function(t){var n;if(t.preventDefault(),t.stopPropagation(),D&&(null===(n=t.nativeEvent.target)||void 0===n||!n.classList.contains(R)))return!1;var r=e.props,o=r.droppingItem,i=r.onDropDragOver,s=r.margin,c=r.cols,u=r.rowHeight,d=r.maxRows,p=r.width,h=r.containerPadding,m=r.transformScale,v=null==i?void 0:i(t);if(!1===v)return e.state.droppingDOMNode&&e.removeDroppingPlaceholder(),!1;var b=g(g({},o),v),y=e.state.layout,w=t.nativeEvent,S=w.layerX,x=w.layerY,E={left:S/m,top:x/m,e:t};if(e.state.droppingDOMNode){if(e.state.droppingPosition){var C=e.state.droppingPosition,_=C.left,O=C.top;(_!=S||O!=x)&&e.setState({droppingPosition:E})}}else{var I={cols:c,margin:s,maxRows:d,rowHeight:u,containerWidth:p,containerPadding:h||s},T=(0,l.calcXY)(I,x,S,b.w,b.h);e.setState({droppingDOMNode:a.createElement("div",{key:b.i}),droppingPosition:E,layout:[].concat(f(y),[g(g({},b),{},{x:T.x,y:T.y,static:!1,isDraggable:!0})])})}})),C(x(e),"removeDroppingPlaceholder",(function(){var t=e.props,n=t.droppingItem,r=t.cols,a=e.state.layout,o=(0,s.compact)(a.filter((function(e){return e.i!==n.i})),(0,s.compactType)(e.props),r);e.setState({layout:o,droppingDOMNode:null,activeDrag:null,droppingPosition:void 0})})),C(x(e),"onDragLeave",(function(t){t.preventDefault(),t.stopPropagation(),e.dragEnterCounter--,0===e.dragEnterCounter&&e.removeDroppingPlaceholder()})),C(x(e),"onDragEnter",(function(t){t.preventDefault(),t.stopPropagation(),e.dragEnterCounter++})),C(x(e),"onDrop",(function(t){t.preventDefault(),t.stopPropagation();var n=e.props.droppingItem,r=e.state.layout,a=r.find((function(e){return e.i===n.i}));e.dragEnterCounter=0,e.removeDroppingPlaceholder(),e.props.onDrop(r,a,t)})),e}return t=d,r=[{key:"getDerivedStateFromProps",value:function(e,t){var n;return t.activeDrag?null:((0,o.default)(e.layout,t.propsLayout)&&e.compactType===t.compactType?(0,s.childrenEqual)(e.children,t.children)||(n=t.layout):n=e.layout,n?{layout:(0,s.synchronizeLayoutWithChildren)(n,e.children,e.cols,(0,s.compactType)(e),e.allowOverlap),compactType:e.compactType,children:e.children,propsLayout:e.layout}:null)}}],(n=[{key:"componentDidMount",value:function(){this.setState({mounted:!0}),this.onLayoutMaybeChanged(this.state.layout,this.props.layout)}},{key:"shouldComponentUpdate",value:function(e,t){return this.props.children!==e.children||!(0,s.fastRGLPropsEqual)(this.props,e,o.default)||this.state.activeDrag!==t.activeDrag||this.state.mounted!==t.mounted||this.state.droppingPosition!==t.droppingPosition}},{key:"componentDidUpdate",value:function(e,t){if(!this.state.activeDrag){var n=this.state.layout,r=t.layout;this.onLayoutMaybeChanged(n,r)}}},{key:"containerHeight",value:function(){if(this.props.autoSize){var e=(0,s.bottom)(this.state.layout),t=this.props.containerPadding?this.props.containerPadding[1]:this.props.margin[1];return e*this.props.rowHeight+(e-1)*this.props.margin[1]+2*t+"px"}}},{key:"onLayoutMaybeChanged",value:function(e,t){t||(t=this.state.layout),(0,o.default)(t,e)||this.props.onLayoutChange(e)}},{key:"placeholder",value:function(){var e=this.state.activeDrag;if(!e)return null;var t=this.props,n=t.width,r=t.cols,o=t.margin,i=t.containerPadding,s=t.rowHeight,l=t.maxRows,u=t.useCSSTransforms,d=t.transformScale;return a.createElement(c.default,{w:e.w,h:e.h,x:e.x,y:e.y,i:e.i,className:"react-grid-placeholder",containerWidth:n,cols:r,margin:o,containerPadding:i||o,maxRows:l,rowHeight:s,isDraggable:!1,isResizable:!1,isBounded:!1,useCSSTransforms:u,transformScale:d},a.createElement("div",null))}},{key:"processGridItem",value:function(e,t){if(e&&e.key){var n=(0,s.getLayoutItem)(this.state.layout,String(e.key));if(!n)return null;var r=this.props,o=r.width,i=r.cols,l=r.margin,u=r.containerPadding,d=r.rowHeight,p=r.maxRows,f=r.isDraggable,h=r.isResizable,g=r.isBounded,m=r.useCSSTransforms,v=r.transformScale,b=r.draggableCancel,y=r.draggableHandle,w=r.resizeHandles,S=r.resizeHandle,x=this.state,E=x.mounted,C=x.droppingPosition,R="boolean"==typeof n.isDraggable?n.isDraggable:!n.static&&f,D="boolean"==typeof n.isResizable?n.isResizable:!n.static&&h,_=n.resizeHandles||w,O=R&&g&&!1!==n.isBounded;return a.createElement(c.default,{containerWidth:o,cols:i,margin:l,containerPadding:u||l,maxRows:p,rowHeight:d,cancel:b,handle:y,onDragStop:this.onDragStop,onDragStart:this.onDragStart,onDrag:this.onDrag,onResizeStart:this.onResizeStart,onResize:this.onResize,onResizeStop:this.onResizeStop,isDraggable:R,isResizable:D,isBounded:O,useCSSTransforms:m&&E,usePercentages:!E,transformScale:v,w:n.w,h:n.h,x:n.x,y:n.y,i:n.i,minH:n.minH,minW:n.minW,maxH:n.maxH,maxW:n.maxW,static:n.static,droppingPosition:t?C:void 0,resizeHandles:_,resizeHandle:S},e)}}},{key:"render",value:function(){var e=this,t=this.props,n=t.className,r=t.style,o=t.isDroppable,l=t.innerRef,c=(0,i.default)(R,n),u=g({height:this.containerHeight()},r);return a.createElement("div",{ref:l,className:c,style:u,onDrop:o?this.onDrop:s.noop,onDragLeave:o?this.onDragLeave:s.noop,onDragEnter:o?this.onDragEnter:s.noop,onDragOver:o?this.onDragOver:s.noop},a.Children.map(this.props.children,(function(t){return e.processGridItem(t)})),o&&this.state.droppingDOMNode&&this.processGridItem(this.state.droppingDOMNode,!0),this.placeholder())}}])&&y(t.prototype,n),r&&y(t,r),Object.defineProperty(t,"prototype",{writable:!1}),d}(a.Component);t.default=_,C(_,"displayName","ReactGridLayout"),C(_,"propTypes",u.default),C(_,"defaultProps",{autoSize:!0,cols:12,className:"",style:{},draggableHandle:"",draggableCancel:"",containerPadding:null,rowHeight:150,maxRows:1/0,layout:[],margin:[10,10],isBounded:!1,isDraggable:!0,isResizable:!0,allowOverlap:!1,isDroppable:!1,useCSSTransforms:!0,transformScale:1,verticalCompact:!0,compactType:"vertical",preventCollision:!1,droppingItem:{i:"__dropping-elem__",h:1,w:1},resizeHandles:["se"],onLayoutChange:s.noop,onDragStart:s.noop,onDrag:s.noop,onDragStop:s.noop,onResizeStart:s.noop,onResize:s.noop,onResizeStop:s.noop,onDrop:s.noop,onDropDragOver:s.noop})},7222:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resizeHandleType=t.resizeHandleAxesType=t.default=void 0;var r=o(n(2688)),a=o(n(5959));function o(e){return e&&e.__esModule?e:{default:e}}var i=r.default.arrayOf(r.default.oneOf(["s","w","e","n","sw","nw","se","ne"]));t.resizeHandleAxesType=i;var s=r.default.oneOfType([r.default.node,r.default.func]);t.resizeHandleType=s;var l={className:r.default.string,style:r.default.object,width:r.default.number,autoSize:r.default.bool,cols:r.default.number,draggableCancel:r.default.string,draggableHandle:r.default.string,verticalCompact:function(e){e.verticalCompact,0},compactType:r.default.oneOf(["vertical","horizontal"]),layout:function(e){var t=e.layout;void 0!==t&&n(414).validateLayout(t,"layout")},margin:r.default.arrayOf(r.default.number),containerPadding:r.default.arrayOf(r.default.number),rowHeight:r.default.number,maxRows:r.default.number,isBounded:r.default.bool,isDraggable:r.default.bool,isResizable:r.default.bool,allowOverlap:r.default.bool,preventCollision:r.default.bool,useCSSTransforms:r.default.bool,transformScale:r.default.number,isDroppable:r.default.bool,resizeHandles:i,resizeHandle:s,onLayoutChange:r.default.func,onDragStart:r.default.func,onDrag:r.default.func,onDragStop:r.default.func,onResizeStart:r.default.func,onResize:r.default.func,onResizeStop:r.default.func,onDrop:r.default.func,droppingItem:r.default.shape({i:r.default.string.isRequired,w:r.default.number.isRequired,h:r.default.number.isRequired}),children:function(e,t){var n=e[t],r={};a.default.Children.forEach(n,(function(e){if(null!=(null==e?void 0:e.key)){if(r[e.key])throw new Error('Duplicate child key "'+e.key+'" found! This will cause problems in ReactGridLayout.');r[e.key]=!0}}))},innerRef:r.default.any};t.default=l},4636:(e,t,n)=>{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}t.default=void 0;var a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!==r(e)&&"function"!=typeof e)return{default:e};var n=p(t);if(n&&n.has(e))return n.get(e);var a={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var s=o?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(a,i,s):a[i]=e[i]}a.default=e,n&&n.set(e,a);return a}(n(5959)),o=d(n(2688)),i=d(n(7842)),s=n(414),l=n(544),c=d(n(9482)),u=["breakpoint","breakpoints","cols","layouts","margin","containerPadding","onBreakpointChange","onLayoutChange","onWidthChange"];function d(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(p=function(e){return e?n:t})(e)}function f(){return f=Object.assign||function(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function m(e){for(var t=1;t{"use strict";function n(e){var t=e.margin,n=e.containerPadding,r=e.containerWidth,a=e.cols;return(r-t[0]*(a-1)-2*n[0])/a}function r(e,t,n){return Number.isFinite(e)?Math.round(t*e+Math.max(0,e-1)*n):e}function a(e,t,n){return Math.max(Math.min(e,n),t)}Object.defineProperty(t,"__esModule",{value:!0}),t.calcGridColWidth=n,t.calcGridItemPosition=function(e,t,a,o,i,s){var l=e.margin,c=e.containerPadding,u=e.rowHeight,d=n(e),p={};s&&s.resizing?(p.width=Math.round(s.resizing.width),p.height=Math.round(s.resizing.height)):(p.width=r(o,d,l[0]),p.height=r(i,u,l[1]));s&&s.dragging?(p.top=Math.round(s.dragging.top),p.left=Math.round(s.dragging.left)):(p.top=Math.round((u+l[1])*a+c[1]),p.left=Math.round((d+l[0])*t+c[0]));return p},t.calcGridItemWHPx=r,t.calcWH=function(e,t,r,o,i){var s=e.margin,l=e.maxRows,c=e.cols,u=e.rowHeight,d=n(e),p=Math.round((t+s[0])/(d+s[0])),f=Math.round((r+s[1])/(u+s[1]));return p=a(p,0,c-o),f=a(f,0,l-i),{w:p,h:f}},t.calcXY=function(e,t,r,o,i){var s=e.margin,l=e.cols,c=e.rowHeight,u=e.maxRows,d=n(e),p=Math.round((r-s[0])/(d+s[0])),f=Math.round((t-s[1])/(c+s[1]));return p=a(p,0,l-o),f=a(f,0,u-i),{x:p,y:f}},t.clamp=a},6805:(e,t,n)=>{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}t.default=function(e){var t;return t=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p(e,t)}(c,t);var n,o,l=(n=c,o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=h(n);if(o){var a=h(this).constructor;e=Reflect.construct(t,arguments,a)}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"===r(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return f(e)}(this,e)});function c(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,c);for(var t=arguments.length,n=new Array(t),r=0;r=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(t,s);return n&&!this.mounted?a.createElement("div",{className:(0,i.default)(this.props.className,m),style:this.props.style,ref:this.elementRef}):a.createElement(e,u({innerRef:this.elementRef},r,this.state))}}]),c}(a.Component),g(t,"defaultProps",{measureBeforeMount:!1}),g(t,"propTypes",{measureBeforeMount:o.default.bool}),t};var a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!==r(e)&&"function"!=typeof e)return{default:e};var n=c(t);if(n&&n.has(e))return n.get(e);var a={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var s=o?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(a,i,s):a[i]=e[i]}a.default=e,n&&n.set(e,a);return a}(n(5959)),o=l(n(2688)),i=l(n(7256)),s=["measureBeforeMount"];function l(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(c=function(e){return e?n:t})(e)}function u(){return u=Object.assign||function(e){for(var t=1;t{e.exports=function(e,t,n){return e===t||e.className===t.className&&n(e.style,t.style)&&e.width===t.width&&e.autoSize===t.autoSize&&e.cols===t.cols&&e.draggableCancel===t.draggableCancel&&e.draggableHandle===t.draggableHandle&&n(e.verticalCompact,t.verticalCompact)&&n(e.compactType,t.compactType)&&n(e.layout,t.layout)&&n(e.margin,t.margin)&&n(e.containerPadding,t.containerPadding)&&e.rowHeight===t.rowHeight&&e.maxRows===t.maxRows&&e.isBounded===t.isBounded&&e.isDraggable===t.isDraggable&&e.isResizable===t.isResizable&&e.allowOverlap===t.allowOverlap&&e.preventCollision===t.preventCollision&&e.useCSSTransforms===t.useCSSTransforms&&e.transformScale===t.transformScale&&e.isDroppable===t.isDroppable&&n(e.resizeHandles,t.resizeHandles)&&n(e.resizeHandle,t.resizeHandle)&&e.onLayoutChange===t.onLayoutChange&&e.onDragStart===t.onDragStart&&e.onDrag===t.onDrag&&e.onDragStop===t.onDragStop&&e.onResizeStart===t.onResizeStart&&e.onResize===t.onResize&&e.onResizeStop===t.onResizeStop&&e.onDrop===t.onDrop&&n(e.droppingItem,t.droppingItem)&&n(e.innerRef,t.innerRef)}},544:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.findOrGenerateResponsiveLayout=function(e,t,n,o,i,s){if(e[n])return(0,r.cloneLayout)(e[n]);for(var l=e[o],c=a(t),u=c.slice(c.indexOf(n)),d=0,p=u.length;de[s]&&(r=s)}return r},t.getColsFromBreakpoint=function(e,t){if(!t[e])throw new Error("ResponsiveReactGridLayout: `cols` entry for breakpoint "+e+" is missing!");return t[e]},t.sortBreakpoints=a;var r=n(414);function a(e){return Object.keys(e).sort((function(t,n){return e[t]-e[n]}))}},414:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.bottom=d,t.childrenEqual=function(e,t){return(0,r.default)(a.default.Children.map(e,(function(e){return null==e?void 0:e.key})),a.default.Children.map(t,(function(e){return null==e?void 0:e.key})))},t.cloneLayout=p,t.cloneLayoutItem=h,t.collides=m,t.compact=v,t.compactItem=w,t.compactType=function(e){var t=e||{},n=t.verticalCompact,r=t.compactType;return!1===n?null:r},t.correctBounds=S,t.fastPositionEqual=function(e,t){return e.left===t.left&&e.top===t.top&&e.width===t.width&&e.height===t.height},t.fastRGLPropsEqual=void 0,t.getAllCollisions=C,t.getFirstCollision=E,t.getLayoutItem=x,t.getStatics=R,t.modifyLayout=f,t.moveElement=D,t.moveElementAwayFromCollision=_,t.noop=void 0,t.perc=function(e){return 100*e+"%"},t.setTopLeft=function(e){var t=e.top,n=e.left,r=e.width,a=e.height;return{top:"".concat(t,"px"),left:"".concat(n,"px"),width:"".concat(r,"px"),height:"".concat(a,"px"),position:"absolute"}},t.setTransform=function(e){var t=e.top,n=e.left,r=e.width,a=e.height,o="translate(".concat(n,"px,").concat(t,"px)");return{transform:o,WebkitTransform:o,MozTransform:o,msTransform:o,OTransform:o,width:"".concat(r,"px"),height:"".concat(a,"px"),position:"absolute"}},t.sortLayoutItems=O,t.sortLayoutItemsByColRow=T,t.sortLayoutItemsByRowCol=I,t.synchronizeLayoutWithChildren=function(e,t,n,r,o){e=e||[];var i=[];a.default.Children.forEach(t,(function(t){if(null!=(null==t?void 0:t.key)){var n=x(e,String(t.key));if(n)i.push(h(n));else{!c&&t.props._grid&&console.warn("`_grid` properties on children have been deprecated as of React 15.2. Please use `data-grid` or add your properties directly to the `layout`.");var r=t.props["data-grid"]||t.props._grid;r?(c||A([r],"ReactGridLayout.children"),i.push(h(s(s({},r),{},{i:t.key})))):i.push(h({w:1,h:1,x:0,y:d(i),i:String(t.key)}))}}}));var l=S(i,{cols:n});return o?l:v(l,r,n)},t.validateLayout=A,t.withLayoutItem=function(e,t,n){var r=x(e,t);return r?(r=n(h(r)),[e=f(e,r),r]):[e,null]};var r=o(n(7842)),a=o(n(5959));function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;tn&&(n=t);return n}function p(e){for(var t=Array(e.length),n=0,r=e.length;n=t.x+t.w)&&(!(e.y+e.h<=t.y)&&!(e.y>=t.y+t.h))))}function v(e,t,n){for(var r=R(e),a=O(e,t),o=Array(e.length),i=0,s=a.length;it.y+t.h)break;m(t,i)&&y(e,i,n+t[a],r)}}t[r]=n}function w(e,t,n,r,a){var o,i="horizontal"===n;if("vertical"===n)for(t.y=Math.min(d(e),t.y);t.y>0&&!E(e,t);)t.y--;else if(i)for(;t.x>0&&!E(e,t);)t.x--;for(;o=E(e,t);)i?y(a,t,o.x+o.w,"x"):y(a,t,o.y+o.h,"y"),i&&t.x+t.w>r&&(t.x=r-t.w,t.y++);return t.y=Math.max(t.y,0),t.x=Math.max(t.x,0),t}function S(e,t){for(var n=R(e),r=0,a=e.length;rt.cols&&(o.x=t.cols-o.w),o.x<0&&(o.x=0,o.w=t.cols),o.static)for(;E(n,o);)o.y++;else n.push(o)}return e}function x(e,t){for(var n=0,r=e.length;n=r:"horizontal"===i&&"number"==typeof n&&c>=n)&&(d=d.reverse());var f=C(d,t),h=f.length>0;if(h&&l)return p(e);if(h&&o)return k("Collision prevented on ".concat(t.i,", reverting.")),t.x=c,t.y=u,t.moved=!1,e;for(var g=0,m=f.length;gt.y||e.y===t.y&&e.x>t.x?1:e.y===t.y&&e.x===t.x?0:-1}))}function T(e){return e.slice(0).sort((function(e,t){return e.x>t.x||e.x===t.x&&e.y>t.y?1:-1}))}function A(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Layout",n=["x","y","w","h"];if(!Array.isArray(e))throw new Error(t+" must be an array!");for(var r=0,a=e.length;r{e.exports=n(9482).default,e.exports.utils=n(414),e.exports.Responsive=n(4636).default,e.exports.Responsive.utils=n(544),e.exports.WidthProvider=n(6805).default},7256:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta,default:()=>o});const o=a},1794:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=l(t);if(n&&n.has(e))return n.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,n&&n.set(e,r);return r}(n(5959)),a=n(8230),o=n(9954),i=n(6333),s=["children","className","draggableOpts","width","height","handle","handleSize","lockAspectRatio","axis","minConstraints","maxConstraints","onResize","onResizeStop","onResizeStart","resizeHandles","transformScale"];function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(l=function(e){return e?n:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;tMath.abs(l*i)?t=e/i:e=t*i}var c=e,u=t,d=this.slack||[0,0],p=d[0],f=d[1];return e+=p,t+=f,r&&(e=Math.max(r[0],e),t=Math.max(r[1],t)),a&&(e=Math.min(a[0],e),t=Math.min(a[1],t)),this.slack=[p+(c-e),f+(u-t)],[e,t]},l.resizeHandler=function(e,t){var n=this;return function(r,a){var o=a.node,i=a.deltaX,s=a.deltaY;"onResizeStart"===e&&n.resetData();var l=("both"===n.props.axis||"x"===n.props.axis)&&"n"!==t&&"s"!==t,c=("both"===n.props.axis||"y"===n.props.axis)&&"e"!==t&&"w"!==t;if(l||c){var u=t[0],d=t[t.length-1],p=o.getBoundingClientRect();if(null!=n.lastHandleRect){if("w"===d)i+=p.left-n.lastHandleRect.left;if("n"===u)s+=p.top-n.lastHandleRect.top}n.lastHandleRect=p,"w"===d&&(i=-i),"n"===u&&(s=-s);var f=n.props.width+(l?i/n.props.transformScale:0),h=n.props.height+(c?s/n.props.transformScale:0),g=n.runConstraints(f,h);f=g[0],h=g[1];var m=f!==n.props.width||h!==n.props.height,v="function"==typeof n.props[e]?n.props[e]:null;v&&!("onResize"===e&&!m)&&(null==r.persist||r.persist(),v(r,{node:o,size:{width:f,height:h},handle:t})),"onResizeStop"===e&&n.resetData()}}},l.renderResizeHandle=function(e,t){var n=this.props.handle;if(!n)return r.createElement("span",{className:"react-resizable-handle react-resizable-handle-"+e,ref:t});if("function"==typeof n)return n(e,t);var a=d({ref:t},"string"==typeof n.type?{}:{handleAxis:e});return r.cloneElement(n,a)},l.render=function(){var e=this,t=this.props,n=t.children,i=t.className,l=t.draggableOpts,u=(t.width,t.height,t.handle,t.handleSize,t.lockAspectRatio,t.axis,t.minConstraints,t.maxConstraints,t.onResize,t.onResizeStop,t.onResizeStart,t.resizeHandles),p=(t.transformScale,function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}(t,s));return(0,o.cloneElement)(n,d(d({},p),{},{className:(i?i+" ":"")+"react-resizable",children:[].concat(n.props.children,u.map((function(t){var n,o=null!=(n=e.handleRefs[t])?n:e.handleRefs[t]=r.createRef();return r.createElement(a.DraggableCore,c({},l,{nodeRef:o,key:"resizableHandle-"+t,onStop:e.resizeHandler("onResizeStop",t),onStart:e.resizeHandler("onResizeStart",t),onDrag:e.resizeHandler("onResize",t)}),e.renderResizeHandle(t,o))})))}))},i}(r.Component);t.default=h,h.propTypes=i.resizableProps,h.defaultProps={axis:"both",handleSize:[20,20],lockAspectRatio:!1,minConstraints:[20,20],maxConstraints:[1/0,1/0],resizeHandles:["se"],transformScale:1}},6609:(e,t,n)=>{"use strict";t.default=void 0;var r=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=c(t);if(n&&n.has(e))return n.get(e);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,n&&n.set(e,r);return r}(n(5959)),a=l(n(2688)),o=l(n(1794)),i=n(6333),s=["handle","handleSize","onResize","onResizeStart","onResizeStop","draggableOpts","minConstraints","maxConstraints","lockAspectRatio","axis","width","height","resizeHandles","style","transformScale"];function l(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(c=function(e){return e?n:t})(e)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,s);return r.createElement(o.default,{axis:h,draggableOpts:l,handle:t,handleSize:n,height:this.state.height,lockAspectRatio:f,maxConstraints:d,minConstraints:c,onResizeStart:a,onResize:this.onResize,onResizeStop:i,resizeHandles:g,transformScale:v,width:this.state.width},r.createElement("div",u({},b,{style:p(p({},m),{},{width:this.state.width+"px",height:this.state.height+"px"})})))},a}(r.Component);t.default=g,g.propTypes=p(p({},i.resizableProps),{},{children:a.default.element})},6333:(e,t,n)=>{"use strict";t.__esModule=!0,t.resizableProps=void 0;var r,a=(r=n(2688))&&r.__esModule?r:{default:r};n(8230);var o={axis:a.default.oneOf(["both","x","y","none"]),className:a.default.string,children:a.default.element.isRequired,draggableOpts:a.default.shape({allowAnyClick:a.default.bool,cancel:a.default.string,children:a.default.node,disabled:a.default.bool,enableUserSelectHack:a.default.bool,offsetParent:a.default.node,grid:a.default.arrayOf(a.default.number),handle:a.default.string,nodeRef:a.default.object,onStart:a.default.func,onDrag:a.default.func,onStop:a.default.func,onMouseDown:a.default.func,scale:a.default.number}),height:function(){for(var e=arguments.length,t=new Array(e),n=0;n{"use strict";t.__esModule=!0,t.cloneElement=function(e,t){t.style&&e.props.style&&(t.style=i(i({},e.props.style),t.style));t.className&&e.props.className&&(t.className=e.props.className+" "+t.className);return a.default.cloneElement(e,t)};var r,a=(r=n(5959))&&r.__esModule?r:{default:r};function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t{"use strict";e.exports=function(){throw new Error("Don't instantiate Resizable directly! Use require('react-resizable').Resizable")},e.exports.Resizable=n(1794).default,e.exports.ResizableBox=n(6609).default},3367:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){var n,r,a=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var l,c=[],u=!1,d=-1;function p(){u&&l&&(u=!1,l.length?c=l.concat(c):d=-1,c.length&&f())}function f(){if(!u){var e=s(p);u=!0;for(var t=c.length;t;){for(l=c,c=[];++d1)for(var n=1;n1?t-1:0),r=1;r2?n-2:0),o=2;o0&&r.syncScrollPosition(r.panes[t][0],e),r.panes[t].push(e))})),r.addEvents(e,t)},r.unregisterPane=function(e,t){t.forEach((function(t){r.findPane(e,t)&&(r.removeEvents(e),r.panes[t].splice(r.panes[t].indexOf(e),1))}))},r.addEvents=function(e,t){e.onscroll=r.handlePaneScroll.bind(r,e,t)},r.removeEvents=function(e){e.onscroll=null},r.findPane=function(e,t){return!!r.panes[t]&&r.panes[t].find((function(t){return t===e}))},r.handlePaneScroll=function(e,t){r.props.enabled&&window.requestAnimationFrame((function(){r.syncScrollPositions(e,t)}))},r.syncScrollPositions=function(e,t){t.forEach((function(n){r.panes[n].forEach((function(a){e!==a&&(r.removeEvents(a,n),r.syncScrollPosition(e,a),window.requestAnimationFrame((function(){r.addEvents(a,t)})))}))})),r.props.onSync&&r.props.onSync(e)},c(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"getContextValue",value:function(){return{registerPane:this.registerPane,unregisterPane:this.unregisterPane}}},{key:"syncScrollPosition",value:function(e,t){var n=e.scrollTop,r=e.scrollHeight,a=e.clientHeight,o=e.scrollLeft,i=e.scrollWidth,s=e.clientWidth,l=r-a,c=i-s,u=this.props,d=u.proportional,p=u.vertical,f=u.horizontal,h=t.scrollHeight-a,g=t.scrollWidth-s;p&&l>0&&(t.scrollTop=d?h*n/l:n),f&&c>0&&(t.scrollLeft=d?g*o/c:o)}},{key:"render",value:function(){return o.default.createElement(s.default.Provider,{value:this.getContextValue()},o.default.Children.only(this.props.children))}}]),t}(a.Component);u.propTypes={onSync:i.default.func,children:i.default.element.isRequired,proportional:i.default.bool,vertical:i.default.bool,horizontal:i.default.bool,enabled:i.default.bool},u.defaultProps={proportional:!0,vertical:!0,horizontal:!0,enabled:!0},t.default=u,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n{const r=Symbol("SemVer ANY");class a{static get ANY(){return r}constructor(e,t){if(t=o(t),e instanceof a){if(e.loose===!!t.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),c("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===r?this.value="":this.value=this.operator+this.semver.version,c("comp",this)}parse(e){const t=this.options.loose?i[s.COMPARATORLOOSE]:i[s.COMPARATOR],n=e.match(t);if(!n)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==n[1]?n[1]:"","="===this.operator&&(this.operator=""),n[2]?this.semver=new u(n[2],this.options.loose):this.semver=r}toString(){return this.value}test(e){if(c("Comparator.test",e,this.options.loose),this.semver===r||e===r)return!0;if("string"==typeof e)try{e=new u(e,this.options)}catch(e){return!1}return l(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof a))throw new TypeError("a Comparator is required");return""===this.operator?""===this.value||new d(e.value,t).test(this.value):""===e.operator?""===e.value||new d(this.value,t).test(e.semver):(!(t=o(t)).includePrerelease||"<0.0.0-0"!==this.value&&"<0.0.0-0"!==e.value)&&(!(!t.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0")))&&(!(!this.operator.startsWith(">")||!e.operator.startsWith(">"))||(!(!this.operator.startsWith("<")||!e.operator.startsWith("<"))||(!(this.semver.version!==e.semver.version||!this.operator.includes("=")||!e.operator.includes("="))||(!!(l(this.semver,"<",e.semver,t)&&this.operator.startsWith(">")&&e.operator.startsWith("<"))||!!(l(this.semver,">",e.semver,t)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))))))}}e.exports=a;const o=n(7095),{safeRe:i,t:s}=n(6850),l=n(3811),c=n(9796),u=n(7944),d=n(8395)},8395:(e,t,n)=>{const r=/\s+/g;class a{constructor(e,t){if(t=i(t),e instanceof a)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new a(e.raw,t);if(e instanceof s)return this.raw=e.value,this.set=[[e]],this.formatted=void 0,this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e.trim().replace(r," "),this.set=this.raw.split("||").map((e=>this.parseRange(e.trim()))).filter((e=>e.length)),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const e=this.set[0];if(this.set=this.set.filter((e=>!v(e[0]))),0===this.set.length)this.set=[e];else if(this.set.length>1)for(const e of this.set)if(1===e.length&&b(e[0])){this.set=[e];break}}this.formatted=void 0}get range(){if(void 0===this.formatted){this.formatted="";for(let e=0;e0&&(this.formatted+="||");const t=this.set[e];for(let e=0;e0&&(this.formatted+=" "),this.formatted+=t[e].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(e){const t=((this.options.includePrerelease&&g)|(this.options.loose&&m))+":"+e,n=o.get(t);if(n)return n;const r=this.options.loose,a=r?u[d.HYPHENRANGELOOSE]:u[d.HYPHENRANGE];e=e.replace(a,T(this.options.includePrerelease)),l("hyphen replace",e),e=e.replace(u[d.COMPARATORTRIM],p),l("comparator trim",e),e=e.replace(u[d.TILDETRIM],f),l("tilde trim",e),e=e.replace(u[d.CARETTRIM],h),l("caret trim",e);let i=e.split(" ").map((e=>w(e,this.options))).join(" ").split(/\s+/).map((e=>I(e,this.options)));r&&(i=i.filter((e=>(l("loose invalid filter",e,this.options),!!e.match(u[d.COMPARATORLOOSE]))))),l("range list",i);const c=new Map,b=i.map((e=>new s(e,this.options)));for(const e of b){if(v(e))return[e];c.set(e.value,e)}c.size>1&&c.has("")&&c.delete("");const y=[...c.values()];return o.set(t,y),y}intersects(e,t){if(!(e instanceof a))throw new TypeError("a Range is required");return this.set.some((n=>y(n,t)&&e.set.some((e=>y(e,t)&&n.every((n=>e.every((e=>n.intersects(e,t)))))))))}test(e){if(!e)return!1;if("string"==typeof e)try{e=new c(e,this.options)}catch(e){return!1}for(let t=0;t"<0.0.0-0"===e.value,b=e=>""===e.value,y=(e,t)=>{let n=!0;const r=e.slice();let a=r.pop();for(;n&&r.length;)n=r.every((e=>a.intersects(e,t))),a=r.pop();return n},w=(e,t)=>(l("comp",e,t),e=C(e,t),l("caret",e),e=x(e,t),l("tildes",e),e=D(e,t),l("xrange",e),e=O(e,t),l("stars",e),e),S=e=>!e||"x"===e.toLowerCase()||"*"===e,x=(e,t)=>e.trim().split(/\s+/).map((e=>E(e,t))).join(" "),E=(e,t)=>{const n=t.loose?u[d.TILDELOOSE]:u[d.TILDE];return e.replace(n,((t,n,r,a,o)=>{let i;return l("tilde",e,t,n,r,a,o),S(n)?i="":S(r)?i=`>=${n}.0.0 <${+n+1}.0.0-0`:S(a)?i=`>=${n}.${r}.0 <${n}.${+r+1}.0-0`:o?(l("replaceTilde pr",o),i=`>=${n}.${r}.${a}-${o} <${n}.${+r+1}.0-0`):i=`>=${n}.${r}.${a} <${n}.${+r+1}.0-0`,l("tilde return",i),i}))},C=(e,t)=>e.trim().split(/\s+/).map((e=>R(e,t))).join(" "),R=(e,t)=>{l("caret",e,t);const n=t.loose?u[d.CARETLOOSE]:u[d.CARET],r=t.includePrerelease?"-0":"";return e.replace(n,((t,n,a,o,i)=>{let s;return l("caret",e,t,n,a,o,i),S(n)?s="":S(a)?s=`>=${n}.0.0${r} <${+n+1}.0.0-0`:S(o)?s="0"===n?`>=${n}.${a}.0${r} <${n}.${+a+1}.0-0`:`>=${n}.${a}.0${r} <${+n+1}.0.0-0`:i?(l("replaceCaret pr",i),s="0"===n?"0"===a?`>=${n}.${a}.${o}-${i} <${n}.${a}.${+o+1}-0`:`>=${n}.${a}.${o}-${i} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${o}-${i} <${+n+1}.0.0-0`):(l("no pr"),s="0"===n?"0"===a?`>=${n}.${a}.${o}${r} <${n}.${a}.${+o+1}-0`:`>=${n}.${a}.${o}${r} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${o} <${+n+1}.0.0-0`),l("caret return",s),s}))},D=(e,t)=>(l("replaceXRanges",e,t),e.split(/\s+/).map((e=>_(e,t))).join(" ")),_=(e,t)=>{e=e.trim();const n=t.loose?u[d.XRANGELOOSE]:u[d.XRANGE];return e.replace(n,((n,r,a,o,i,s)=>{l("xRange",e,n,r,a,o,i,s);const c=S(a),u=c||S(o),d=u||S(i),p=d;return"="===r&&p&&(r=""),s=t.includePrerelease?"-0":"",c?n=">"===r||"<"===r?"<0.0.0-0":"*":r&&p?(u&&(o=0),i=0,">"===r?(r=">=",u?(a=+a+1,o=0,i=0):(o=+o+1,i=0)):"<="===r&&(r="<",u?a=+a+1:o=+o+1),"<"===r&&(s="-0"),n=`${r+a}.${o}.${i}${s}`):u?n=`>=${a}.0.0${s} <${+a+1}.0.0-0`:d&&(n=`>=${a}.${o}.0${s} <${a}.${+o+1}.0-0`),l("xRange return",n),n}))},O=(e,t)=>(l("replaceStars",e,t),e.trim().replace(u[d.STAR],"")),I=(e,t)=>(l("replaceGTE0",e,t),e.trim().replace(u[t.includePrerelease?d.GTE0PRE:d.GTE0],"")),T=e=>(t,n,r,a,o,i,s,l,c,u,d,p)=>`${n=S(r)?"":S(a)?`>=${r}.0.0${e?"-0":""}`:S(o)?`>=${r}.${a}.0${e?"-0":""}`:i?`>=${n}`:`>=${n}${e?"-0":""}`} ${l=S(c)?"":S(u)?`<${+c+1}.0.0-0`:S(d)?`<${c}.${+u+1}.0-0`:p?`<=${c}.${u}.${d}-${p}`:e?`<${c}.${u}.${+d+1}-0`:`<=${l}`}`.trim(),A=(e,t,n)=>{for(let n=0;n0){const r=e[n].semver;if(r.major===t.major&&r.minor===t.minor&&r.patch===t.patch)return!0}return!1}return!0}},7944:(e,t,n)=>{const r=n(9796),{MAX_LENGTH:a,MAX_SAFE_INTEGER:o}=n(9630),{safeRe:i,safeSrc:s,t:l}=n(6850),c=n(7095),{compareIdentifiers:u}=n(4031);class d{constructor(e,t){if(t=c(t),e instanceof d){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if("string"!=typeof e)throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>a)throw new TypeError(`version is longer than ${a} characters`);r("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;const n=e.trim().match(t.loose?i[l.LOOSE]:i[l.FULL]);if(!n)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>o||this.major<0)throw new TypeError("Invalid major version");if(this.minor>o||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>o||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const t=+e;if(t>=0&&t=0;)"number"==typeof this.prerelease[r]&&(this.prerelease[r]++,r=-2);if(-1===r){if(t===this.prerelease.join(".")&&!1===n)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(e)}}if(t){let r=[t,e];!1===n&&(r=[t]),0===u(this.prerelease[0],t)?isNaN(this.prerelease[1])&&(this.prerelease=r):this.prerelease=r}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}e.exports=d},7994:(e,t,n)=>{const r=n(5860);e.exports=(e,t)=>{const n=r(e.trim().replace(/^[=v]+/,""),t);return n?n.version:null}},3811:(e,t,n)=>{const r=n(6909),a=n(7659),o=n(144),i=n(2077),s=n(599),l=n(7092);e.exports=(e,t,n,c)=>{switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),e===n;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),e!==n;case"":case"=":case"==":return r(e,n,c);case"!=":return a(e,n,c);case">":return o(e,n,c);case">=":return i(e,n,c);case"<":return s(e,n,c);case"<=":return l(e,n,c);default:throw new TypeError(`Invalid operator: ${t}`)}}},5334:(e,t,n)=>{const r=n(7944),a=n(5860),{safeRe:o,t:i}=n(6850);e.exports=(e,t)=>{if(e instanceof r)return e;if("number"==typeof e&&(e=String(e)),"string"!=typeof e)return null;let n=null;if((t=t||{}).rtl){const r=t.includePrerelease?o[i.COERCERTLFULL]:o[i.COERCERTL];let a;for(;(a=r.exec(e))&&(!n||n.index+n[0].length!==e.length);)n&&a.index+a[0].length===n.index+n[0].length||(n=a),r.lastIndex=a.index+a[1].length+a[2].length;r.lastIndex=-1}else n=e.match(t.includePrerelease?o[i.COERCEFULL]:o[i.COERCE]);if(null===n)return null;const s=n[2],l=n[3]||"0",c=n[4]||"0",u=t.includePrerelease&&n[5]?`-${n[5]}`:"",d=t.includePrerelease&&n[6]?`+${n[6]}`:"";return a(`${s}.${l}.${c}${u}${d}`,t)}},2801:(e,t,n)=>{const r=n(7944);e.exports=(e,t,n)=>{const a=new r(e,n),o=new r(t,n);return a.compare(o)||a.compareBuild(o)}},7023:(e,t,n)=>{const r=n(5380);e.exports=(e,t)=>r(e,t,!0)},5380:(e,t,n)=>{const r=n(7944);e.exports=(e,t,n)=>new r(e,n).compare(new r(t,n))},660:(e,t,n)=>{const r=n(5860);e.exports=(e,t)=>{const n=r(e,null,!0),a=r(t,null,!0),o=n.compare(a);if(0===o)return null;const i=o>0,s=i?n:a,l=i?a:n,c=!!s.prerelease.length;if(!!l.prerelease.length&&!c){if(!l.patch&&!l.minor)return"major";if(0===l.compareMain(s))return l.minor&&!l.patch?"minor":"patch"}const u=c?"pre":"";return n.major!==a.major?u+"major":n.minor!==a.minor?u+"minor":n.patch!==a.patch?u+"patch":"prerelease"}},6909:(e,t,n)=>{const r=n(5380);e.exports=(e,t,n)=>0===r(e,t,n)},144:(e,t,n)=>{const r=n(5380);e.exports=(e,t,n)=>r(e,t,n)>0},2077:(e,t,n)=>{const r=n(5380);e.exports=(e,t,n)=>r(e,t,n)>=0},5955:(e,t,n)=>{const r=n(7944);e.exports=(e,t,n,a,o)=>{"string"==typeof n&&(o=a,a=n,n=void 0);try{return new r(e instanceof r?e.version:e,n).inc(t,a,o).version}catch(e){return null}}},599:(e,t,n)=>{const r=n(5380);e.exports=(e,t,n)=>r(e,t,n)<0},7092:(e,t,n)=>{const r=n(5380);e.exports=(e,t,n)=>r(e,t,n)<=0},2966:(e,t,n)=>{const r=n(7944);e.exports=(e,t)=>new r(e,t).major},5986:(e,t,n)=>{const r=n(7944);e.exports=(e,t)=>new r(e,t).minor},7659:(e,t,n)=>{const r=n(5380);e.exports=(e,t,n)=>0!==r(e,t,n)},5860:(e,t,n)=>{const r=n(7944);e.exports=(e,t,n=!1)=>{if(e instanceof r)return e;try{return new r(e,t)}catch(e){if(!n)return null;throw e}}},1617:(e,t,n)=>{const r=n(7944);e.exports=(e,t)=>new r(e,t).patch},9613:(e,t,n)=>{const r=n(5860);e.exports=(e,t)=>{const n=r(e,t);return n&&n.prerelease.length?n.prerelease:null}},2862:(e,t,n)=>{const r=n(5380);e.exports=(e,t,n)=>r(t,e,n)},6033:(e,t,n)=>{const r=n(2801);e.exports=(e,t)=>e.sort(((e,n)=>r(n,e,t)))},1722:(e,t,n)=>{const r=n(8395);e.exports=(e,t,n)=>{try{t=new r(t,n)}catch(e){return!1}return t.test(e)}},603:(e,t,n)=>{const r=n(2801);e.exports=(e,t)=>e.sort(((e,n)=>r(e,n,t)))},7645:(e,t,n)=>{const r=n(5860);e.exports=(e,t)=>{const n=r(e,t);return n?n.version:null}},8449:(e,t,n)=>{const r=n(6850),a=n(9630),o=n(7944),i=n(4031),s=n(5860),l=n(7645),c=n(7994),u=n(5955),d=n(660),p=n(2966),f=n(5986),h=n(1617),g=n(9613),m=n(5380),v=n(2862),b=n(7023),y=n(2801),w=n(603),S=n(6033),x=n(144),E=n(599),C=n(6909),R=n(7659),D=n(2077),_=n(7092),O=n(3811),I=n(5334),T=n(9524),A=n(8395),k=n(1722),P=n(651),L=n(7840),N=n(7930),M=n(3489),B=n(7494),V=n(5463),j=n(7871),F=n(4266),$=n(1112),z=n(1465),U=n(9252);e.exports={parse:s,valid:l,clean:c,inc:u,diff:d,major:p,minor:f,patch:h,prerelease:g,compare:m,rcompare:v,compareLoose:b,compareBuild:y,sort:w,rsort:S,gt:x,lt:E,eq:C,neq:R,gte:D,lte:_,cmp:O,coerce:I,Comparator:T,Range:A,satisfies:k,toComparators:P,maxSatisfying:L,minSatisfying:N,minVersion:M,validRange:B,outside:V,gtr:j,ltr:F,intersects:$,simplifyRange:z,subset:U,SemVer:o,re:r.re,src:r.src,tokens:r.t,SEMVER_SPEC_VERSION:a.SEMVER_SPEC_VERSION,RELEASE_TYPES:a.RELEASE_TYPES,compareIdentifiers:i.compareIdentifiers,rcompareIdentifiers:i.rcompareIdentifiers}},9630:e=>{const t=Number.MAX_SAFE_INTEGER||9007199254740991;e.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:t,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}},9796:e=>{const t="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};e.exports=t},4031:e=>{const t=/^[0-9]+$/,n=(e,n)=>{const r=t.test(e),a=t.test(n);return r&&a&&(e=+e,n=+n),e===n?0:r&&!a?-1:a&&!r?1:en(t,e)}},1158:e=>{e.exports=class{constructor(){this.max=1e3,this.map=new Map}get(e){const t=this.map.get(e);return void 0===t?void 0:(this.map.delete(e),this.map.set(e,t),t)}delete(e){return this.map.delete(e)}set(e,t){if(!this.delete(e)&&void 0!==t){if(this.map.size>=this.max){const e=this.map.keys().next().value;this.delete(e)}this.map.set(e,t)}return this}}},7095:e=>{const t=Object.freeze({loose:!0}),n=Object.freeze({});e.exports=e=>e?"object"!=typeof e?t:e:n},6850:(e,t,n)=>{const{MAX_SAFE_COMPONENT_LENGTH:r,MAX_SAFE_BUILD_LENGTH:a,MAX_LENGTH:o}=n(9630),i=n(9796),s=(t=e.exports={}).re=[],l=t.safeRe=[],c=t.src=[],u=t.safeSrc=[],d=t.t={};let p=0;const f="[a-zA-Z0-9-]",h=[["\\s",1],["\\d",o],[f,a]],g=(e,t,n)=>{const r=(e=>{for(const[t,n]of h)e=e.split(`${t}*`).join(`${t}{0,${n}}`).split(`${t}+`).join(`${t}{1,${n}}`);return e})(t),a=p++;i(e,a,t),d[e]=a,c[a]=t,u[a]=r,s[a]=new RegExp(t,n?"g":void 0),l[a]=new RegExp(r,n?"g":void 0)};g("NUMERICIDENTIFIER","0|[1-9]\\d*"),g("NUMERICIDENTIFIERLOOSE","\\d+"),g("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${f}*`),g("MAINVERSION",`(${c[d.NUMERICIDENTIFIER]})\\.(${c[d.NUMERICIDENTIFIER]})\\.(${c[d.NUMERICIDENTIFIER]})`),g("MAINVERSIONLOOSE",`(${c[d.NUMERICIDENTIFIERLOOSE]})\\.(${c[d.NUMERICIDENTIFIERLOOSE]})\\.(${c[d.NUMERICIDENTIFIERLOOSE]})`),g("PRERELEASEIDENTIFIER",`(?:${c[d.NUMERICIDENTIFIER]}|${c[d.NONNUMERICIDENTIFIER]})`),g("PRERELEASEIDENTIFIERLOOSE",`(?:${c[d.NUMERICIDENTIFIERLOOSE]}|${c[d.NONNUMERICIDENTIFIER]})`),g("PRERELEASE",`(?:-(${c[d.PRERELEASEIDENTIFIER]}(?:\\.${c[d.PRERELEASEIDENTIFIER]})*))`),g("PRERELEASELOOSE",`(?:-?(${c[d.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${c[d.PRERELEASEIDENTIFIERLOOSE]})*))`),g("BUILDIDENTIFIER",`${f}+`),g("BUILD",`(?:\\+(${c[d.BUILDIDENTIFIER]}(?:\\.${c[d.BUILDIDENTIFIER]})*))`),g("FULLPLAIN",`v?${c[d.MAINVERSION]}${c[d.PRERELEASE]}?${c[d.BUILD]}?`),g("FULL",`^${c[d.FULLPLAIN]}$`),g("LOOSEPLAIN",`[v=\\s]*${c[d.MAINVERSIONLOOSE]}${c[d.PRERELEASELOOSE]}?${c[d.BUILD]}?`),g("LOOSE",`^${c[d.LOOSEPLAIN]}$`),g("GTLT","((?:<|>)?=?)"),g("XRANGEIDENTIFIERLOOSE",`${c[d.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),g("XRANGEIDENTIFIER",`${c[d.NUMERICIDENTIFIER]}|x|X|\\*`),g("XRANGEPLAIN",`[v=\\s]*(${c[d.XRANGEIDENTIFIER]})(?:\\.(${c[d.XRANGEIDENTIFIER]})(?:\\.(${c[d.XRANGEIDENTIFIER]})(?:${c[d.PRERELEASE]})?${c[d.BUILD]}?)?)?`),g("XRANGEPLAINLOOSE",`[v=\\s]*(${c[d.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[d.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[d.XRANGEIDENTIFIERLOOSE]})(?:${c[d.PRERELEASELOOSE]})?${c[d.BUILD]}?)?)?`),g("XRANGE",`^${c[d.GTLT]}\\s*${c[d.XRANGEPLAIN]}$`),g("XRANGELOOSE",`^${c[d.GTLT]}\\s*${c[d.XRANGEPLAINLOOSE]}$`),g("COERCEPLAIN",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?`),g("COERCE",`${c[d.COERCEPLAIN]}(?:$|[^\\d])`),g("COERCEFULL",c[d.COERCEPLAIN]+`(?:${c[d.PRERELEASE]})?`+`(?:${c[d.BUILD]})?(?:$|[^\\d])`),g("COERCERTL",c[d.COERCE],!0),g("COERCERTLFULL",c[d.COERCEFULL],!0),g("LONETILDE","(?:~>?)"),g("TILDETRIM",`(\\s*)${c[d.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",g("TILDE",`^${c[d.LONETILDE]}${c[d.XRANGEPLAIN]}$`),g("TILDELOOSE",`^${c[d.LONETILDE]}${c[d.XRANGEPLAINLOOSE]}$`),g("LONECARET","(?:\\^)"),g("CARETTRIM",`(\\s*)${c[d.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",g("CARET",`^${c[d.LONECARET]}${c[d.XRANGEPLAIN]}$`),g("CARETLOOSE",`^${c[d.LONECARET]}${c[d.XRANGEPLAINLOOSE]}$`),g("COMPARATORLOOSE",`^${c[d.GTLT]}\\s*(${c[d.LOOSEPLAIN]})$|^$`),g("COMPARATOR",`^${c[d.GTLT]}\\s*(${c[d.FULLPLAIN]})$|^$`),g("COMPARATORTRIM",`(\\s*)${c[d.GTLT]}\\s*(${c[d.LOOSEPLAIN]}|${c[d.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",g("HYPHENRANGE",`^\\s*(${c[d.XRANGEPLAIN]})\\s+-\\s+(${c[d.XRANGEPLAIN]})\\s*$`),g("HYPHENRANGELOOSE",`^\\s*(${c[d.XRANGEPLAINLOOSE]})\\s+-\\s+(${c[d.XRANGEPLAINLOOSE]})\\s*$`),g("STAR","(<|>)?=?\\s*\\*"),g("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),g("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")},7871:(e,t,n)=>{const r=n(5463);e.exports=(e,t,n)=>r(e,t,">",n)},1112:(e,t,n)=>{const r=n(8395);e.exports=(e,t,n)=>(e=new r(e,n),t=new r(t,n),e.intersects(t,n))},4266:(e,t,n)=>{const r=n(5463);e.exports=(e,t,n)=>r(e,t,"<",n)},7840:(e,t,n)=>{const r=n(7944),a=n(8395);e.exports=(e,t,n)=>{let o=null,i=null,s=null;try{s=new a(t,n)}catch(e){return null}return e.forEach((e=>{s.test(e)&&(o&&-1!==i.compare(e)||(o=e,i=new r(o,n)))})),o}},7930:(e,t,n)=>{const r=n(7944),a=n(8395);e.exports=(e,t,n)=>{let o=null,i=null,s=null;try{s=new a(t,n)}catch(e){return null}return e.forEach((e=>{s.test(e)&&(o&&1!==i.compare(e)||(o=e,i=new r(o,n)))})),o}},3489:(e,t,n)=>{const r=n(7944),a=n(8395),o=n(144);e.exports=(e,t)=>{e=new a(e,t);let n=new r("0.0.0");if(e.test(n))return n;if(n=new r("0.0.0-0"),e.test(n))return n;n=null;for(let t=0;t{const t=new r(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":i&&!o(t,i)||(i=t);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${e.operator}`)}})),!i||n&&!o(n,i)||(n=i)}return n&&e.test(n)?n:null}},5463:(e,t,n)=>{const r=n(7944),a=n(9524),{ANY:o}=a,i=n(8395),s=n(1722),l=n(144),c=n(599),u=n(7092),d=n(2077);e.exports=(e,t,n,p)=>{let f,h,g,m,v;switch(e=new r(e,p),t=new i(t,p),n){case">":f=l,h=u,g=c,m=">",v=">=";break;case"<":f=c,h=d,g=l,m="<",v="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(s(e,t,p))return!1;for(let n=0;n{e.semver===o&&(e=new a(">=0.0.0")),i=i||e,s=s||e,f(e.semver,i.semver,p)?i=e:g(e.semver,s.semver,p)&&(s=e)})),i.operator===m||i.operator===v)return!1;if((!s.operator||s.operator===m)&&h(e,s.semver))return!1;if(s.operator===v&&g(e,s.semver))return!1}return!0}},1465:(e,t,n)=>{const r=n(1722),a=n(5380);e.exports=(e,t,n)=>{const o=[];let i=null,s=null;const l=e.sort(((e,t)=>a(e,t,n)));for(const e of l){r(e,t,n)?(s=e,i||(i=e)):(s&&o.push([i,s]),s=null,i=null)}i&&o.push([i,null]);const c=[];for(const[e,t]of o)e===t?c.push(e):t||e!==l[0]?t?e===l[0]?c.push(`<=${t}`):c.push(`${e} - ${t}`):c.push(`>=${e}`):c.push("*");const u=c.join(" || "),d="string"==typeof t.raw?t.raw:String(t);return u.length{const r=n(8395),a=n(9524),{ANY:o}=a,i=n(1722),s=n(5380),l=[new a(">=0.0.0-0")],c=[new a(">=0.0.0")],u=(e,t,n)=>{if(e===t)return!0;if(1===e.length&&e[0].semver===o){if(1===t.length&&t[0].semver===o)return!0;e=n.includePrerelease?l:c}if(1===t.length&&t[0].semver===o){if(n.includePrerelease)return!0;t=c}const r=new Set;let a,u,f,h,g,m,v;for(const t of e)">"===t.operator||">="===t.operator?a=d(a,t,n):"<"===t.operator||"<="===t.operator?u=p(u,t,n):r.add(t.semver);if(r.size>1)return null;if(a&&u){if(f=s(a.semver,u.semver,n),f>0)return null;if(0===f&&(">="!==a.operator||"<="!==u.operator))return null}for(const e of r){if(a&&!i(e,String(a),n))return null;if(u&&!i(e,String(u),n))return null;for(const r of t)if(!i(e,String(r),n))return!1;return!0}let b=!(!u||n.includePrerelease||!u.semver.prerelease.length)&&u.semver,y=!(!a||n.includePrerelease||!a.semver.prerelease.length)&&a.semver;b&&1===b.prerelease.length&&"<"===u.operator&&0===b.prerelease[0]&&(b=!1);for(const e of t){if(v=v||">"===e.operator||">="===e.operator,m=m||"<"===e.operator||"<="===e.operator,a)if(y&&e.semver.prerelease&&e.semver.prerelease.length&&e.semver.major===y.major&&e.semver.minor===y.minor&&e.semver.patch===y.patch&&(y=!1),">"===e.operator||">="===e.operator){if(h=d(a,e,n),h===e&&h!==a)return!1}else if(">="===a.operator&&!i(a.semver,String(e),n))return!1;if(u)if(b&&e.semver.prerelease&&e.semver.prerelease.length&&e.semver.major===b.major&&e.semver.minor===b.minor&&e.semver.patch===b.patch&&(b=!1),"<"===e.operator||"<="===e.operator){if(g=p(u,e,n),g===e&&g!==u)return!1}else if("<="===u.operator&&!i(u.semver,String(e),n))return!1;if(!e.operator&&(u||a)&&0!==f)return!1}return!(a&&m&&!u&&0!==f)&&(!(u&&v&&!a&&0!==f)&&(!y&&!b))},d=(e,t,n)=>{if(!e)return t;const r=s(e.semver,t.semver,n);return r>0?e:r<0||">"===t.operator&&">="===e.operator?t:e},p=(e,t,n)=>{if(!e)return t;const r=s(e.semver,t.semver,n);return r<0?e:r>0||"<"===t.operator&&"<="===e.operator?t:e};e.exports=(e,t,n={})=>{if(e===t)return!0;e=new r(e,n),t=new r(t,n);let a=!1;e:for(const r of e.set){for(const e of t.set){const t=u(r,e,n);if(a=a||null!==t,t)continue e}if(a)return!1}return!0}},651:(e,t,n)=>{const r=n(8395);e.exports=(e,t)=>new r(e,t).set.map((e=>e.map((e=>e.value)).join(" ").trim().split(" ")))},7494:(e,t,n)=>{const r=n(8395);e.exports=(e,t)=>{try{return new r(e,t).range||"*"}catch(e){return null}}},5745:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});const r={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};var a,o=new Uint8Array(16);function i(){if(!a&&!(a="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return a(o)}for(var s=[],l=0;l<256;++l)s.push((l+256).toString(16).slice(1));function c(e,t=0){return(s[e[t+0]]+s[e[t+1]]+s[e[t+2]]+s[e[t+3]]+"-"+s[e[t+4]]+s[e[t+5]]+"-"+s[e[t+6]]+s[e[t+7]]+"-"+s[e[t+8]]+s[e[t+9]]+"-"+s[e[t+10]]+s[e[t+11]]+s[e[t+12]]+s[e[t+13]]+s[e[t+14]]+s[e[t+15]]).toLowerCase()}const u=function(e,t,n){if(r.randomUUID&&!t&&!e)return r.randomUUID();var a=(e=e||{}).random||(e.rng||i)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t){n=n||0;for(var o=0;o<16;++o)t[n+o]=a[o];return t}return c(a)}},1625:(e,t,n)=>{"use strict";n.d(t,{$m:()=>i,ob:()=>a,qM:()=>o,uH:()=>r});var r=(e=>(e.Ascending="Ascending",e.Descending="Descending",e))(r||{});var a=(e=>(e.Actions="actions",e.Auto="auto",e.BasicGauge="basic",e.ColorBackground="color-background",e.ColorBackgroundSolid="color-background-solid",e.ColorText="color-text",e.Custom="custom",e.DataLinks="data-links",e.Gauge="gauge",e.GradientGauge="gradient-gauge",e.Image="image",e.JSONView="json-view",e.LcdGauge="lcd-gauge",e.Sparkline="sparkline",e))(a||{});var o=(e=>(e.Auto="auto",e.Lg="lg",e.Md="md",e.Sm="sm",e))(o||{}),i=(e=>(e.CSV="csv",e.Date="date",e.Distributed="distributed",e.DoubleQuote="doublequote",e.Glob="glob",e.HTML="html",e.JSON="json",e.Lucene="lucene",e.PercentEncode="percentencode",e.Pipe="pipe",e.QueryParam="queryparam",e.Raw="raw",e.Regex="regex",e.SQLString="sqlstring",e.SingleQuote="singlequote",e.Text="text",e.UriEncode="uriencode",e))(i||{})},6145:(e,t,n)=>{"use strict";n.d(t,{CO:()=>a,rw:()=>r,yV:()=>o});const r={allowCustomValue:!0,includeAll:!1,multi:!1,options:[],skipUrlSync:!1};var a=(e=>(e[e.never=0]="never",e[e.onDashboardLoad=1]="onDashboardLoad",e[e.onTimeRangeChanged=2]="onTimeRangeChanged",e))(a||{});var o=(e=>(e[e.Crosshair=1]="Crosshair",e[e.Off=0]="Off",e[e.Tooltip=2]="Tooltip",e))(o||{})},2245:(e,t,n)=>{"use strict";n.d(t,{zL:()=>a});var r=n(6145),a=(e=>(e[e.dontHide=0]="dontHide",e[e.hideLabel=1]="hideLabel",e[e.hideVariable=2]="hideVariable",e))(a||{});r.rw},7993:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});const r=(e,t)=>e>t?1:ee.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i="eexxaacctt",s=/\p{P}/gu,l=["en",{numeric:!0,sensitivity:"base"}],c=(e,t,n)=>e.replace("A-Z",t).replace("a-z",n),u={unicode:!1,alpha:null,interSplit:"[^A-Za-z\\d']+",intraSplit:"[a-z][A-Z]",interBound:"[^A-Za-z\\d]",intraBound:"[A-Za-z]\\d|\\d[A-Za-z]|[a-z][A-Z]",interLft:0,interRgt:0,interChars:".",interIns:a,intraChars:"[a-z\\d']",intraIns:null,intraContr:"'[a-z]{1,2}\\b",intraMode:0,intraSlice:[1,a],intraSub:null,intraTrn:null,intraDel:null,intraFilt:(e,t,n)=>!0,toUpper:e=>e.toLocaleUpperCase(),toLower:e=>e.toLocaleLowerCase(),compare:null,sort:(e,t,n,a=r)=>{let{idx:o,chars:i,terms:s,interLft2:l,interLft1:c,start:u,intraIns:d,interIns:p,cases:f}=e;return o.map(((e,t)=>t)).sort(((e,n)=>i[n]-i[e]||d[e]-d[n]||s[n]+l[n]+.5*c[n]-(s[e]+l[e]+.5*c[e])||p[e]-p[n]||u[e]-u[n]||f[n]-f[e]||a(t[o[e]],t[o[n]])))}},d=(e,t)=>0==t?"":1==t?e+"??":t==a?e+"*?":e+`{0,${t}}?`,p="(?:\\b|_)";function f(e){e=Object.assign({},u,e);let{unicode:t,interLft:n,interRgt:a,intraMode:f,intraSlice:h,intraIns:m,intraSub:v,intraTrn:b,intraDel:y,intraContr:w,intraSplit:S,interSplit:x,intraBound:E,interBound:C,intraChars:R,toUpper:D,toLower:_,compare:O}=e;m??=f,v??=f,b??=f,y??=f,O??="undefined"==typeof Intl?r:new Intl.Collator(...l).compare;let I=e.letters??e.alpha;if(null!=I){let e=D(I),t=_(I);x=c(x,e,t),S=c(S,e,t),C=c(C,e,t),E=c(E,e,t),R=c(R,e,t),w=c(w,e,t)}let T=t?"u":"";const A='".+?"',k=new RegExp(A,"gi"+T),P=new RegExp(`(?:\\s+|^)-(?:${R}+|${A})`,"gi"+T);let{intraRules:L}=e;null==L&&(L=e=>{let t=u.intraSlice,n=0,r=0,a=0,o=0;if(/[^\d]/.test(e)){let i=e.length;i<=4?i>=3&&(a=Math.min(b,1),4==i&&(n=Math.min(m,1))):(t=h,n=m,r=v,a=b,o=y)}return{intraSlice:t,intraIns:n,intraSub:r,intraTrn:a,intraDel:o}});let N=!!S,M=new RegExp(S,"g"+T),B=new RegExp(x,"g"+T),V=new RegExp("^"+x+"|"+x+"$","g"+T),j=new RegExp(w,"gi"+T);const F=(e,t=!1)=>{let n=[];e=(e=e.replace(k,(e=>(n.push(e),i)))).replace(V,""),t||(e=_(e)),N&&(e=e.replace(M,(e=>e[0]+" "+e[1])));let r=0;return e.split(B).filter((e=>""!=e)).map((e=>e===i?n[r++]:e))},$=/[^\d]+|\d+/g,z=(t,r=0,i=!1)=>{let s=F(t);if(0==s.length)return[];let l,c=Array(s.length).fill("");if(s=s.map(((e,t)=>e.replace(j,(e=>(c[t]=e,""))))),1==f)l=s.map(((e,t)=>{if('"'===e[0])return o(e.slice(1,-1));let n="";for(let r of e.matchAll($)){let e=r[0],{intraSlice:a,intraIns:o,intraSub:i,intraTrn:s,intraDel:l}=L(e);if(o+i+s+l==0)n+=e+c[t];else{let[r,u]=a,p=e.slice(0,r),f=e.slice(u),h=e.slice(r,u);1==o&&1==p.length&&p!=h[0]&&(p+="(?!"+p+")");let g=h.length,m=[e];if(i)for(let e=0;e0&&(e=")("+e+")("),l=s.map(((t,n)=>'"'===t[0]?o(t.slice(1,-1)):t.split("").map(((e,t,n)=>(1==m&&0==t&&n.length>1&&e!=n[t+1]&&(e+="(?!"+e+")"),e))).join(e)+c[n]))}let u=2==n?p:"",h=2==a?p:"",g=h+d(e.interChars,e.interIns)+u;return r>0?i?l=u+"("+l.join(")"+h+"|"+u+"(")+")"+h:(l="("+l.join(")("+g+")(")+")",l="(.??"+u+")"+l+"("+h+".*)"):(l=l.join(g),l=u+l+h),[new RegExp(l,"i"+T),s,c]},U=(e,t,n)=>{let[r]=z(t);if(null==r)return null;let a=[];if(null!=n)for(let t=0;t{let[i,s,l]=z(o,1),c=F(o,!0),[u]=z(o,2),d=s.length,p=Array(d),f=Array(d);for(let e=0;e=m){let e=_(l[r+1]).indexOf(i);e>-1&&(I.push(h,b,e,m),h+=Q(l,r,e,m),o=i,b=m,A=!0,0==t&&(c=h))}if(v||A){let e=h-1,u=h+b,d=!1,p=!1;if(-1==e||H.test(s[e]))A&&y++,d=!0;else{if(2==n){g=!0;break}if(W&&G.test(s[e]+s[e+1]))A&&w++,d=!0;else if(1==n){let e=l[r+1],n=h+b;if(e.length>=m){let a,u=0,p=!1,f=new RegExp(i,"ig"+T);for(;a=f.exec(e);){u=a.index;let e=n+u,t=e-1;if(-1==t||H.test(s[t])){y++,p=!0;break}if(G.test(s[t]+s[e])){w++,p=!0;break}}p&&(d=!0,I.push(h,b,u,m),h+=Q(l,r,u,m),o=i,b=m,A=!0,0==t&&(c=h))}if(!d){g=!0;break}}}if(u==s.length||H.test(s[u]))A&&S++,p=!0;else{if(2==a){g=!0;break}if(W&&G.test(s[u-1]+s[u]))A&&x++,p=!0;else if(1==a){g=!0;break}}A&&(E+=m,d&&p&&C++)}if(b>m&&(O+=b-m),t>0&&(D+=l[r-1].length),!e.intraFilt(i,o,h)){g=!0;break}t0?0:1/0,i=r-4;for(let t=2;t0&&(l.push(d,p),d=p=n)}p>d&&l.push(d,p),b++}}if(b{let a=e[t]+e[t+1].slice(0,n);return e[t-1]+=a,e[t]=e[t+1].slice(n,n+r),e[t+1]=e[t+1].slice(n+r),a.length};return{search:(...t)=>((t,n,r,a=1e3,i)=>{r=r?!0===r?5:r:0;let l=null,c=null,u=[];n=n.replace(P,(e=>{let t=e.trim().slice(1);return t='"'===t[0]?o(t.slice(1,-1)):t.replace(s,""),""!=t&&u.push(t),""}));let d,p=F(n);if(u.length>0){if(d=new RegExp(u.join("|"),"i"+T),0==p.length){let e=[];for(let n=0;n0){let e=F(n);if(e.length>1){let n=e.slice().sort(((e,t)=>t.length-e.length));for(let e=0;er)return[i,null,null];l=g(e).map((e=>e.join(" "))),c=[];let a=new Set;for(let e=0;e!a.has(e))),r=U(t,l[e],n);for(let e=0;e0?i:U(t,n)]);let f=null,h=null;if(u.length>0&&(c=c.map((e=>e.filter((e=>!d.test(t[e])))))),c.reduce(((e,t)=>e+t.length),0)<=a){f={},h=[];for(let n=0;n0)for(let e=0;e{let e={A:"ÁÀÃÂÄĄ",a:"áàãâäą",E:"ÉÈÊËĖ",e:"éèêëę",I:"ÍÌÎÏĮ",i:"íìîïį",O:"ÓÒÔÕÖ",o:"óòôõö",U:"ÚÙÛÜŪŲ",u:"úùûüūų",C:"ÇČĆ",c:"çčć",L:"Ł",l:"ł",N:"ÑŃ",n:"ñń",S:"ŠŚ",s:"šś",Z:"ŻŹ",z:"żź"},t=new Map,n="";for(let r in e)e[r].split("").forEach((e=>{n+=e,t.set(e,r)}));let r=new RegExp(`[${n}]`,"g"),a=e=>t.get(e);return e=>{if("string"==typeof e)return e.replace(r,a);let t=Array(e.length);for(let n=0;nt?`${e}`:e,v=(e,t)=>e+t;f.latinize=h,f.permute=e=>g([...Array(e.length).keys()]).sort(((e,t)=>{for(let n=0;nt.map((t=>e[t])))),f.highlight=function(e,t,n=m,r="",a=v){r=a(r,n(e.substring(0,t[0]),!1))??r;for(let o=0;o{"use strict";n.d(t,{w:()=>a});var r=n(5959);function a(e){const{ref:t,box:n,onResize:a}=e;(0,r.useEffect)((()=>{let e=null==t?void 0:t.current;if(e){if(void 0===window.ResizeObserver)return window.addEventListener("resize",a,!1),()=>{window.removeEventListener("resize",a,!1)};{const t=new window.ResizeObserver((e=>{e.length&&a()}));return t.observe(e,{box:n}),()=>{e&&t.unobserve(e)}}}}),[a,t,n])}},1792:(e,t,n)=>{"use strict";n.d(t,{A:()=>R});var r=n(5959),a=e=>"string"!=typeof e?{}:e.split(/ ?; ?/).reduce(((e,t)=>{const[n,r]=t.split(/ ?: ?/).map(((e,t)=>0===t?e.replace(/\s+/g,""):e.trim()));if(n&&r){const t=n.replace(/(\w)-(\w)/g,((e,t,n)=>`${t}${n.toUpperCase()}`));let a=r.trim();Number.isNaN(Number(r))||(a=Number(r)),e[n.startsWith("-")?n:t]=a}return e}),{});var o=["br","col","colgroup","dl","hr","iframe","img","input","link","menuitem","meta","ol","param","select","table","tbody","tfoot","thead","tr","ul","wbr"],i={"accept-charset":"acceptCharset",acceptcharset:"acceptCharset",accesskey:"accessKey",allowfullscreen:"allowFullScreen",autocapitalize:"autoCapitalize",autocomplete:"autoComplete",autocorrect:"autoCorrect",autofocus:"autoFocus",autoplay:"autoPlay",autosave:"autoSave",cellpadding:"cellPadding",cellspacing:"cellSpacing",charset:"charSet",class:"className",classid:"classID",classname:"className",colspan:"colSpan",contenteditable:"contentEditable",contextmenu:"contextMenu",controlslist:"controlsList",crossorigin:"crossOrigin",dangerouslysetinnerhtml:"dangerouslySetInnerHTML",datetime:"dateTime",defaultchecked:"defaultChecked",defaultvalue:"defaultValue",enctype:"encType",for:"htmlFor",formmethod:"formMethod",formaction:"formAction",formenctype:"formEncType",formnovalidate:"formNoValidate",formtarget:"formTarget",frameborder:"frameBorder",hreflang:"hrefLang",htmlfor:"htmlFor",httpequiv:"httpEquiv","http-equiv":"httpEquiv",icon:"icon",innerhtml:"innerHTML",inputmode:"inputMode",itemid:"itemID",itemprop:"itemProp",itemref:"itemRef",itemscope:"itemScope",itemtype:"itemType",keyparams:"keyParams",keytype:"keyType",marginwidth:"marginWidth",marginheight:"marginHeight",maxlength:"maxLength",mediagroup:"mediaGroup",minlength:"minLength",nomodule:"noModule",novalidate:"noValidate",playsinline:"playsInline",radiogroup:"radioGroup",readonly:"readOnly",referrerpolicy:"referrerPolicy",rowspan:"rowSpan",spellcheck:"spellCheck",srcdoc:"srcDoc",srclang:"srcLang",srcset:"srcSet",tabindex:"tabIndex",typemustmatch:"typeMustMatch",usemap:"useMap",accentheight:"accentHeight","accent-height":"accentHeight",alignmentbaseline:"alignmentBaseline","alignment-baseline":"alignmentBaseline",allowreorder:"allowReorder",arabicform:"arabicForm","arabic-form":"arabicForm",attributename:"attributeName",attributetype:"attributeType",autoreverse:"autoReverse",basefrequency:"baseFrequency",baselineshift:"baselineShift","baseline-shift":"baselineShift",baseprofile:"baseProfile",calcmode:"calcMode",capheight:"capHeight","cap-height":"capHeight",clippath:"clipPath","clip-path":"clipPath",clippathunits:"clipPathUnits",cliprule:"clipRule","clip-rule":"clipRule",colorinterpolation:"colorInterpolation","color-interpolation":"colorInterpolation",colorinterpolationfilters:"colorInterpolationFilters","color-interpolation-filters":"colorInterpolationFilters",colorprofile:"colorProfile","color-profile":"colorProfile",colorrendering:"colorRendering","color-rendering":"colorRendering",contentscripttype:"contentScriptType",contentstyletype:"contentStyleType",diffuseconstant:"diffuseConstant",dominantbaseline:"dominantBaseline","dominant-baseline":"dominantBaseline",edgemode:"edgeMode",enablebackground:"enableBackground","enable-background":"enableBackground",externalresourcesrequired:"externalResourcesRequired",fillopacity:"fillOpacity","fill-opacity":"fillOpacity",fillrule:"fillRule","fill-rule":"fillRule",filterres:"filterRes",filterunits:"filterUnits",floodopacity:"floodOpacity","flood-opacity":"floodOpacity",floodcolor:"floodColor","flood-color":"floodColor",fontfamily:"fontFamily","font-family":"fontFamily",fontsize:"fontSize","font-size":"fontSize",fontsizeadjust:"fontSizeAdjust","font-size-adjust":"fontSizeAdjust",fontstretch:"fontStretch","font-stretch":"fontStretch",fontstyle:"fontStyle","font-style":"fontStyle",fontvariant:"fontVariant","font-variant":"fontVariant",fontweight:"fontWeight","font-weight":"fontWeight",glyphname:"glyphName","glyph-name":"glyphName",glyphorientationhorizontal:"glyphOrientationHorizontal","glyph-orientation-horizontal":"glyphOrientationHorizontal",glyphorientationvertical:"glyphOrientationVertical","glyph-orientation-vertical":"glyphOrientationVertical",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",horizadvx:"horizAdvX","horiz-adv-x":"horizAdvX",horizoriginx:"horizOriginX","horiz-origin-x":"horizOriginX",imagerendering:"imageRendering","image-rendering":"imageRendering",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",letterspacing:"letterSpacing","letter-spacing":"letterSpacing",lightingcolor:"lightingColor","lighting-color":"lightingColor",limitingconeangle:"limitingConeAngle",markerend:"markerEnd","marker-end":"markerEnd",markerheight:"markerHeight",markermid:"markerMid","marker-mid":"markerMid",markerstart:"markerStart","marker-start":"markerStart",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",numoctaves:"numOctaves",overlineposition:"overlinePosition","overline-position":"overlinePosition",overlinethickness:"overlineThickness","overline-thickness":"overlineThickness",paintorder:"paintOrder","paint-order":"paintOrder","panose-1":"panose1",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointerevents:"pointerEvents","pointer-events":"pointerEvents",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",refx:"refX",refy:"refY",renderingintent:"renderingIntent","rendering-intent":"renderingIntent",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",shaperendering:"shapeRendering","shape-rendering":"shapeRendering",specularconstant:"specularConstant",specularexponent:"specularExponent",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles",stopcolor:"stopColor","stop-color":"stopColor",stopopacity:"stopOpacity","stop-opacity":"stopOpacity",strikethroughposition:"strikethroughPosition","strikethrough-position":"strikethroughPosition",strikethroughthickness:"strikethroughThickness","strikethrough-thickness":"strikethroughThickness",strokedasharray:"strokeDasharray","stroke-dasharray":"strokeDasharray",strokedashoffset:"strokeDashoffset","stroke-dashoffset":"strokeDashoffset",strokelinecap:"strokeLinecap","stroke-linecap":"strokeLinecap",strokelinejoin:"strokeLinejoin","stroke-linejoin":"strokeLinejoin",strokemiterlimit:"strokeMiterlimit","stroke-miterlimit":"strokeMiterlimit",strokewidth:"strokeWidth","stroke-width":"strokeWidth",strokeopacity:"strokeOpacity","stroke-opacity":"strokeOpacity",suppresscontenteditablewarning:"suppressContentEditableWarning",suppresshydrationwarning:"suppressHydrationWarning",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textanchor:"textAnchor","text-anchor":"textAnchor",textdecoration:"textDecoration","text-decoration":"textDecoration",textlength:"textLength",textrendering:"textRendering","text-rendering":"textRendering",underlineposition:"underlinePosition","underline-position":"underlinePosition",underlinethickness:"underlineThickness","underline-thickness":"underlineThickness",unicodebidi:"unicodeBidi","unicode-bidi":"unicodeBidi",unicoderange:"unicodeRange","unicode-range":"unicodeRange",unitsperem:"unitsPerEm","units-per-em":"unitsPerEm",unselectable:"unselectable",valphabetic:"vAlphabetic","v-alphabetic":"vAlphabetic",vectoreffect:"vectorEffect","vector-effect":"vectorEffect",vertadvy:"vertAdvY","vert-adv-y":"vertAdvY",vertoriginx:"vertOriginX","vert-origin-x":"vertOriginX",vertoriginy:"vertOriginY","vert-origin-y":"vertOriginY",vhanging:"vHanging","v-hanging":"vHanging",videographic:"vIdeographic","v-ideographic":"vIdeographic",viewbox:"viewBox",viewtarget:"viewTarget",vmathematical:"vMathematical","v-mathematical":"vMathematical",wordspacing:"wordSpacing","word-spacing":"wordSpacing",writingmode:"writingMode","writing-mode":"writingMode",xchannelselector:"xChannelSelector",xheight:"xHeight","x-height":"xHeight",xlinkactuate:"xlinkActuate","xlink:actuate":"xlinkActuate",xlinkarcrole:"xlinkArcrole","xlink:arcrole":"xlinkArcrole",xlinkhref:"xlinkHref","xlink:href":"xlinkHref",xlinkrole:"xlinkRole","xlink:role":"xlinkRole",xlinkshow:"xlinkShow","xlink:show":"xlinkShow",xlinktitle:"xlinkTitle","xlink:title":"xlinkTitle",xlinktype:"xlinkType","xlink:type":"xlinkType",xmlbase:"xmlBase","xml:base":"xmlBase",xmllang:"xmlLang","xml:lang":"xmlLang","xml:space":"xmlSpace",xmlnsxlink:"xmlnsXlink","xmlns:xlink":"xmlnsXlink",xmlspace:"xmlSpace",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan",onblur:"onBlur",onchange:"onChange",onclick:"onClick",oncontextmenu:"onContextMenu",ondoubleclick:"onDoubleClick",ondrag:"onDrag",ondragend:"onDragEnd",ondragenter:"onDragEnter",ondragexit:"onDragExit",ondragleave:"onDragLeave",ondragover:"onDragOver",ondragstart:"onDragStart",ondrop:"onDrop",onerror:"onError",onfocus:"onFocus",oninput:"onInput",oninvalid:"onInvalid",onkeydown:"onKeyDown",onkeypress:"onKeyPress",onkeyup:"onKeyUp",onload:"onLoad",onmousedown:"onMouseDown",onmouseenter:"onMouseEnter",onmouseleave:"onMouseLeave",onmousemove:"onMouseMove",onmouseout:"onMouseOut",onmouseover:"onMouseOver",onmouseup:"onMouseUp",onscroll:"onScroll",onsubmit:"onSubmit",ontouchcancel:"onTouchCancel",ontouchend:"onTouchEnd",ontouchmove:"onTouchMove",ontouchstart:"onTouchStart",onwheel:"onWheel"};function s(e,t){const{key:n,level:s,...c}=t;switch(e.nodeType){case 1:return r.createElement(function(e){if(/[a-z]+[A-Z]+[a-z]+/.test(e))return e;return e.toLowerCase()}(e.nodeName),function(e,t){const n={key:t};if(e instanceof Element){const t=e.getAttribute("class");t&&(n.className=t),[...e.attributes].forEach((e=>{switch(e.name){case"class":break;case"style":n[e.name]=a(e.value);break;case"allowfullscreen":case"allowpaymentrequest":case"async":case"autofocus":case"autoplay":case"checked":case"controls":case"default":case"defer":case"disabled":case"formnovalidate":case"hidden":case"ismap":case"itemscope":case"loop":case"multiple":case"muted":case"nomodule":case"novalidate":case"open":case"readonly":case"required":case"reversed":case"selected":case"typemustmatch":n[i[e.name]||e.name]=!0;break;default:n[i[e.name]||e.name]=e.value}}))}return n}(e,n),l(e.childNodes,s,c));case 3:{const t=e.nodeValue?.toString()??"";if(!c.allowWhiteSpaces&&/^\s+$/.test(t)&&!/[\u00A0\u202F]/.test(t))return null;if(!e.parentNode)return t;const n=e.parentNode.nodeName.toLowerCase();return o.includes(n)?(/\S/.test(t)&&console.warn(`A textNode is not allowed inside '${n}'. Your text "${t}" will be ignored`),null):t}case 8:default:return null;case 11:return l(e.childNodes,s,t)}}function l(e,t,n){const r=[...e].map(((e,r)=>u(e,{...n,index:r,level:t+1}))).filter(Boolean);return r.length?r:null}function c(e,t={}){return"string"==typeof e?function(e,t={}){if(!e||"string"!=typeof e)return null;const{includeAllNodes:n=!1,nodeOnly:r=!1,selector:a="body > *",type:o="text/html"}=t;try{const i=(new DOMParser).parseFromString(e,o);if(n){const{childNodes:e}=i.body;return r?e:[...e].map((e=>u(e,t)))}const s=i.querySelector(a)||i.body.childNodes[0];if(!(s instanceof Node))throw new TypeError("Error parsing input");return r?s:u(s,t)}catch(e){0}return null}(e,t):e instanceof Node?u(e,t):null}function u(e,t={}){if(!(e&&e instanceof Node))return null;const{actions:n=[],index:r=0,level:a=0,randomKey:o}=t;let i=e,l=`${a}-${r}`;const c=[];return o&&0===a&&(l=`${function(e=6){const t="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let n="";for(let r=e;r>0;--r)n+=t[Math.round(61*Math.random())];return n}()}-${l}`),Array.isArray(n)&&n.forEach((t=>{t.condition(i,l,a)&&("function"==typeof t.pre&&(i=t.pre(i,l,a),i instanceof Node||(i=e)),"function"==typeof t.post&&c.push(t.post(i,l,a)))})),c.length?c:s(i,{key:l,level:a,...t})}var d=Object.defineProperty,p=(e,t,n)=>((e,t,n)=>t in e?d(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n)(e,"symbol"!=typeof t?t+"":t,n),f="react-inlinesvg",h={IDLE:"idle",LOADING:"loading",LOADED:"loaded",FAILED:"failed",READY:"ready",UNSUPPORTED:"unsupported"};function g(){return!("undefined"==typeof window||!window.document?.createElement)}function m(){return function(){if(!document)return!1;const e=document.createElement("div");e.innerHTML="";const t=e.firstChild;return!!t&&"http://www.w3.org/2000/svg"===t.namespaceURI}()&&"undefined"!=typeof window&&null!==window}async function v(e,t){const n=await fetch(e,t),r=n.headers.get("content-type"),[a]=(r??"").split(/ ?; ?/);if(n.status>299)throw new Error("Not found");if(!["image/svg+xml","text/plain"].some((e=>a.includes(e))))throw new Error(`Content type isn't valid: ${a}`);return n.text()}function b(e=1){return new Promise((t=>{setTimeout(t,1e3*e)}))}var y,w=class{constructor(){p(this,"cacheApi"),p(this,"cacheStore"),p(this,"subscribers",[]),p(this,"isReady",!1),this.cacheStore=new Map;let e=f,t=!1;g()&&(e=window.REACT_INLINESVG_CACHE_NAME??f,t=!!window.REACT_INLINESVG_PERSISTENT_CACHE&&"caches"in window),t?caches.open(e).then((e=>{this.cacheApi=e})).catch((e=>{console.error(`Failed to open cache: ${e.message}`),this.cacheApi=void 0})).finally((()=>{this.isReady=!0;const e=[...this.subscribers];this.subscribers.length=0,e.forEach((e=>{try{e()}catch(e){console.error(`Error in CacheStore subscriber callback: ${e.message}`)}}))})):this.isReady=!0}onReady(e){this.isReady?e():this.subscribers.push(e)}async get(e,t){return await(this.cacheApi?this.fetchAndAddToPersistentCache(e,t):this.fetchAndAddToInternalCache(e,t)),this.cacheStore.get(e)?.content??""}set(e,t){this.cacheStore.set(e,t)}isCached(e){return this.cacheStore.get(e)?.status===h.LOADED}async fetchAndAddToInternalCache(e,t){const n=this.cacheStore.get(e);if(n?.status!==h.LOADING){if(!n?.content){this.cacheStore.set(e,{content:"",status:h.LOADING});try{const n=await v(e,t);this.cacheStore.set(e,{content:n,status:h.LOADED})}catch(t){throw this.cacheStore.set(e,{content:"",status:h.FAILED}),t}}}else await this.handleLoading(e,(async()=>{this.cacheStore.set(e,{content:"",status:h.IDLE}),await this.fetchAndAddToInternalCache(e,t)}))}async fetchAndAddToPersistentCache(e,t){const n=this.cacheStore.get(e);if(n?.status===h.LOADED)return;if(n?.status===h.LOADING)return void await this.handleLoading(e,(async()=>{this.cacheStore.set(e,{content:"",status:h.IDLE}),await this.fetchAndAddToPersistentCache(e,t)}));this.cacheStore.set(e,{content:"",status:h.LOADING});const r=await(this.cacheApi?.match(e));if(r){const t=await r.text();this.cacheStore.set(e,{content:t,status:h.LOADED})}else try{await(this.cacheApi?.add(new Request(e,t)));const n=await(this.cacheApi?.match(e)),r=await(n?.text())??"";this.cacheStore.set(e,{content:r,status:h.LOADED})}catch(t){throw this.cacheStore.set(e,{content:"",status:h.FAILED}),t}}async handleLoading(e,t){for(let t=0;t<10;t++){if(this.cacheStore.get(e)?.status!==h.LOADING)return;await b(.1)}await t()}keys(){return[...this.cacheStore.keys()]}data(){return[...this.cacheStore.entries()].map((([e,t])=>({[e]:t})))}async delete(e){this.cacheApi&&await this.cacheApi.delete(e),this.cacheStore.delete(e)}async clear(){if(this.cacheApi){const e=await this.cacheApi.keys();await Promise.allSettled(e.map((e=>this.cacheApi.delete(e))))}this.cacheStore.clear()}};function S(e){const t=(0,r.useRef)(void 0);return(0,r.useEffect)((()=>{t.current=e})),t.current}function x(e){const{baseURL:t,content:n,description:r,handleError:a,hash:o,preProcessor:i,title:s,uniquifyIDs:l=!1}=e;try{const e=function(e,t){if(t)return t(e);return e}(n,i),a=c(e,{nodeOnly:!0});if(!(a&&a instanceof SVGSVGElement))throw new Error("Could not convert the src to a DOM Node");const u=E(a,{baseURL:t,hash:o,uniquifyIDs:l});if(r){const e=u.querySelector("desc");e?.parentNode&&e.parentNode.removeChild(e);const t=document.createElementNS("http://www.w3.org/2000/svg","desc");t.innerHTML=r,u.prepend(t)}if(void 0!==s){const e=u.querySelector("title");if(e?.parentNode&&e.parentNode.removeChild(e),s){const e=document.createElementNS("http://www.w3.org/2000/svg","title");e.innerHTML=s,u.prepend(e)}}return u}catch(e){return a(e)}}function E(e,t){const{baseURL:n="",hash:r,uniquifyIDs:a}=t,o=["id","href","xlink:href","xlink:role","xlink:arcrole"],i=["href","xlink:href"];return a?([...e.children].forEach((e=>{if(e.attributes?.length){const t=Object.values(e.attributes).map((e=>{const t=e,a=/url\((.*?)\)/.exec(e.value);return a?.[1]&&(t.value=e.value.replace(a[0],`url(${n}${a[1]}__${r})`)),t}));o.forEach((e=>{const n=t.find((t=>t.name===e));var a,o;n&&(a=e,o=n.value,!i.includes(a)||!o||o.includes("#"))&&(n.value=`${n.value}__${r}`)}))}return e.children.length?E(e,t):e})),e):e}function C(e){const{cacheRequests:t=!0,children:n=null,description:a,fetchOptions:o,innerRef:i,loader:s=null,onError:l,onLoad:u,src:d,title:p,uniqueHash:f}=e,[b,w]=(0,r.useReducer)(((e,t)=>({...e,...t})),{content:"",element:null,isCached:t&&y.isCached(e.src),status:h.IDLE}),{content:E,element:C,isCached:R,status:D}=b,_=S(e),O=S(b),I=(0,r.useRef)(f??function(e){const t="abcdefghijklmnopqrstuvwxyz",n=`${t}${t.toUpperCase()}1234567890`;let r="";for(let t=0;t{T.current&&(w({status:"Browser does not support SVG"===e.message?h.UNSUPPORTED:h.FAILED}),l?.(e))}),[l]),P=(0,r.useCallback)(((e,t=!1)=>{T.current&&w({content:e,isCached:t,status:h.LOADED})}),[]),L=(0,r.useCallback)((async()=>{const e=await v(d,o);P(e)}),[o,P,d]),N=(0,r.useCallback)((()=>{try{const t=c(x({...e,handleError:k,hash:I.current,content:E}));if(!t||!(0,r.isValidElement)(t))throw new Error("Could not convert the src to a React element");w({element:t,status:h.READY})}catch(e){k(e)}}),[E,k,e]),M=(0,r.useCallback)((async()=>{const e=/^data:image\/svg[^,]*?(;base64)?,(.*)/u.exec(d);let n;if(e?n=e[1]?window.atob(e[2]):decodeURIComponent(e[2]):d.includes("{T.current&&w({content:"",element:null,isCached:!1,status:h.LOADING})}),[]);(0,r.useEffect)((()=>{if(T.current=!0,g()&&!A.current){try{if(D===h.IDLE){if(!m())throw new Error("Browser does not support SVG");if(!d)throw new Error("Missing src");B()}}catch(e){k(e)}return A.current=!0,()=>{T.current=!1}}}),[]),(0,r.useEffect)((()=>{if(g()&&_&&_.src!==d){if(!d)return void k(new Error("Missing src"));B()}}),[k,B,_,d]),(0,r.useEffect)((()=>{D===h.LOADED&&N()}),[D,N]),(0,r.useEffect)((()=>{g()&&_&&_.src===d&&(_.title===p&&_.description===a||N())}),[a,N,_,d,p]),(0,r.useEffect)((()=>{if(O)switch(D){case h.LOADING:O.status!==h.LOADING&&M();break;case h.LOADED:O.status!==h.LOADED&&N();break;case h.READY:O.status!==h.READY&&u?.(d,R)}}),[M,N,R,u,O,d,D]);const V=function(e,...t){const n={};for(const r in e)({}).hasOwnProperty.call(e,r)&&(t.includes(r)||(n[r]=e[r]));return n}(e,"baseURL","cacheRequests","children","description","fetchOptions","innerRef","loader","onError","onLoad","preProcessor","src","title","uniqueHash","uniquifyIDs");return g()?C?(0,r.cloneElement)(C,{ref:i,...V}):[h.UNSUPPORTED,h.FAILED].includes(D)?n:s:s}function R(e){y||(y=new w);const{loader:t}=e,[n,a]=(0,r.useState)(y.isReady);return(0,r.useEffect)((()=>{n||y.onReady((()=>{a(!0)}))}),[n]),n?r.createElement(C,{...e}):t}}}]); +//# sourceMappingURL=677.js.map?_cache=e8f5f3a77f3d85f1a5c3 \ No newline at end of file diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/677.js.LICENSE.txt b/compose/grafana/plugins/grafana-lokiexplore-app/677.js.LICENSE.txt new file mode 100644 index 0000000..6d75ab4 --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/677.js.LICENSE.txt @@ -0,0 +1,4 @@ +/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/ diff --git a/compose/grafana/plugins/grafana-lokiexplore-app/677.js.map b/compose/grafana/plugins/grafana-lokiexplore-app/677.js.map new file mode 100644 index 0000000..c37869f --- /dev/null +++ b/compose/grafana/plugins/grafana-lokiexplore-app/677.js.map @@ -0,0 +1 @@ +{"version":3,"file":"677.js?_cache=e8f5f3a77f3d85f1a5c3","mappings":"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","sources":["webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneApp/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/uuid/dist/esm-browser/native.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/uuid/dist/esm-browser/rng.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/uuid/dist/esm-browser/stringify.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/uuid/dist/esm-browser/v4.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/SceneComponentWrapper.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/events.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/SceneObjectRef.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/SceneObjectBase.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/sceneGraph/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/RuntimeDataSource.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/lookupVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/writeSceneLog.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/behaviors/SceneRenderProfiler.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/sceneGraph/getQueryController.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/behaviors/SceneQueryController.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/veneer/common.types.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/SceneDataNode.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/services/SceneObjectUrlSyncConfig.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/parseUrlParam.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/evaluateTimeRange.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/date.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/SceneTimeRange.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/interpolation/defaults.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/sceneGraph/getTimeRange.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/types.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/interpolation/fieldAccessorCache.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/interpolation/ScopedVarsVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/interpolation/formatRegistry.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/constants.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/macros/types.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/macros/timeMacros.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/MultiValueVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/macros/AllVariablesMacro.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/macros/dataMacros.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/macros/urlMacros.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/macros/index.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/macros/templateProxies.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/macros/contextMacros.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/interpolation/sceneInterpolator.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/types.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/registerQueryWithController.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/getDataSource.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/VariableValueRecorder.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/ExtraQueryProvider.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/extraQueryProcessingOperator.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/layers/annotations/filterAnnotations.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/getEnrichedDataRequest.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/patchGetAdhocFilters.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/e2e-selectors/dist/esm/resolver.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/e2e-selectors/dist/esm/selectors/constants.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/e2e-selectors/dist/esm/selectors/components.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/e2e-selectors/dist/esm/selectors/index.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/e2e-selectors/dist/esm/selectors/pages.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/filter.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/components/getOptionSearcher.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/components/VariableValueSelect.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/getEnrichedFiltersRequest.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/SafeSerializableSceneObject.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/wrapInSafeSerializableSceneObject.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/groupby/GroupByVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/LoadingIndicator.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/ControlsLabel.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/getAdhocOptionSearcher.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFilterRenderer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFilterBuilder.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js","webpack://grafana-lokiexplore-app/../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs","webpack://grafana-lokiexplore-app/../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","webpack://grafana-lokiexplore-app/../node_modules/tabbable/dist/index.esm.js","webpack://grafana-lokiexplore-app/../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","webpack://grafana-lokiexplore-app/../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","webpack://grafana-lokiexplore-app/../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/@floating-ui/react/dist/floating-ui.react.mjs","webpack://grafana-lokiexplore-app/../node_modules/@tanstack/virtual-core/dist/esm/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@tanstack/virtual-core/dist/esm/index.js","webpack://grafana-lokiexplore-app/../node_modules/@tanstack/react-virtual/dist/esm/index.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/adhoc/AdHocFiltersVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/DataLayersMerger.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/SceneQueryRunner.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/ConstantVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/VariableDependencyConfig.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/query/guards.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/query/createQueryVariableRunner.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/query/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/query/toMetricFindValues.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/query/QueryVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/SceneScopesBridge.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/sceneGraph/sceneGraph.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/sceneGraph/index.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/services/UniqueUrlKeyMapper.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/services/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/behaviors/CursorSync.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/react-use/esm/misc/util.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/react-use/esm/useIsomorphicLayoutEffect.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/react-use/esm/useMeasure.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/VizPanel/VizPanelSeriesLimit.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/VizPanel/VizPanelRenderer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/VizPanel/colorSeriesConfigFactory.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/VizPanel/VizPanel.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/behaviors/LiveNowTimer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/getMessageFromError.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/layers/SceneDataLayerBase.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/layers/SceneDataLayerControls.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/lift.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/node_modules/tslib/tslib.es6.mjs","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/Subscription.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/config.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/noop.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/NotificationFactories.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/Subscriber.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/operators/map.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/identity.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/pipe.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/Observable.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/isPromise.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/isIterable.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","webpack://grafana-lokiexplore-app/../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/layers/annotations/standardAnnotationQuery.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/layers/annotations/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/SceneDataLayerSet.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/querying/SceneDataTransformer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/components/VariableValueSelectors.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/components/VariableValueControl.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/sets/SceneVariableSet.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/CustomVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/DataSourceVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/metricTree.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/components/VariableValueInput.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/TestVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/TextBoxVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/IntervalVariable.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/services/UrlSyncManager.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/services/useUrlSync.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/EmbeddedScene.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/VizPanel/VizPanelMenu.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/tslib/tslib.es6.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/react-use/esm/useAsyncFn.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/react-use/esm/useMountedState.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/VizPanel/VizPanelExploreButton.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/react-use/esm/useAsync.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/explore.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/grid/SceneGridItem.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/react-use/esm/useEffectOnce.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/LazyLoader.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/grid/types.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/grid/SceneGridLayout.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/grid/constants.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/grid/utils.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/grid/SceneGridRow.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/NestedScene.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneCanvasText.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneToolbarButton.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/node_modules/react-use/esm/useLocalStorage.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneTimePicker.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneRefreshPicker.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/utils/getCompareSeriesRefId.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneTimeRangeCompare.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneByFrameRepeater.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneByVariableRepeater.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneControlsSpacer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/SceneFlexLayout.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/split/Splitter.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/split/SplitLayout.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/layout/split/SplitLayoutRenderer.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneApp/SceneApp.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneReactObject.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneDebugger/DebugDetails.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneDebugger/DebugTreeNode.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneDebugger/SceneDebugger.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneApp/SceneAppPageView.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/components/SceneApp/SceneAppPage.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/common.gen-CZ1M9G8L.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/barchart/panelcfg/x/BarChartPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/bargauge/panelcfg/x/BarGaugePanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/datagrid/panelcfg/x/DatagridPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/gauge/panelcfg/x/GaugePanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/geomap/panelcfg/x/GeomapPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/heatmap/panelcfg/x/HeatmapPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/histogram/panelcfg/x/HistogramPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/news/panelcfg/x/NewsPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/piechart/panelcfg/x/PieChartPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/stat/panelcfg/x/StatPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/statetimeline/panelcfg/x/StateTimelinePanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/statushistory/panelcfg/x/StatusHistoryPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/table/panelcfg/x/TablePanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/text/panelcfg/x/TextPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/composable/xychart/panelcfg/x/XYChartPanelCfg_types.gen.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/PanelBuilders/StandardFieldConfigBuilders.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/PanelBuilders/FieldConfigOverridesBuilder.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/PanelBuilders/FieldConfigBuilder.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/PanelBuilders/PanelOptionsBuilder.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/PanelBuilders/VizPanelBuilder.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/PanelBuilders/index.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/PanelBuilders/VizConfigBuilders.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/core/PanelBuilders/FieldConfigBuilders.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/index.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/scenes/dist/esm/variables/variants/guards.js","webpack://grafana-lokiexplore-app/../node_modules/use-memo-one/dist/use-memo-one.esm.js","webpack://grafana-lokiexplore-app/../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","webpack://grafana-lokiexplore-app/../node_modules/css-box-model/dist/css-box-model.esm.js","webpack://grafana-lokiexplore-app/../node_modules/memoize-one/dist/memoize-one.esm.js","webpack://grafana-lokiexplore-app/../node_modules/raf-schd/dist/raf-schd.esm.js","webpack://grafana-lokiexplore-app/../node_modules/@babel/runtime/helpers/esm/extends.js","webpack://grafana-lokiexplore-app/../node_modules/@hello-pangea/dnd/dist/dnd.esm.js","webpack://grafana-lokiexplore-app/../node_modules/lodash.isequal/index.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/_Symbol.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/_baseGetTag.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/_baseTrim.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/_freeGlobal.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/_getRawTag.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/_objectToString.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/_root.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/_trimmedEndIndex.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/debounce.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/isObject.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/isObjectLike.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/isSymbol.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/now.js","webpack://grafana-lokiexplore-app/../node_modules/lodash/toNumber.js","webpack://grafana-lokiexplore-app/../node_modules/prop-types/factoryWithThrowingShims.js","webpack://grafana-lokiexplore-app/../node_modules/prop-types/index.js","webpack://grafana-lokiexplore-app/../node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/build/cjs/Draggable.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/build/cjs/DraggableCore.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/build/cjs/cjs.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/build/cjs/utils/domFns.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/build/cjs/utils/getPrefix.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/build/cjs/utils/log.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/build/cjs/utils/positionFns.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/build/cjs/utils/shims.js","webpack://grafana-lokiexplore-app/../node_modules/react-draggable/node_modules/clsx/dist/clsx.m.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/GridItem.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/ReactGridLayout.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/ReactGridLayoutPropTypes.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/ResponsiveReactGridLayout.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/calculateUtils.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/components/WidthProvider.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/fastRGLPropsEqual.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/responsiveUtils.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/build/utils.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/index.js","webpack://grafana-lokiexplore-app/../node_modules/react-grid-layout/node_modules/clsx/dist/clsx.m.js","webpack://grafana-lokiexplore-app/../node_modules/react-resizable/build/Resizable.js","webpack://grafana-lokiexplore-app/../node_modules/react-resizable/build/ResizableBox.js","webpack://grafana-lokiexplore-app/../node_modules/react-resizable/build/propTypes.js","webpack://grafana-lokiexplore-app/../node_modules/react-resizable/build/utils.js","webpack://grafana-lokiexplore-app/../node_modules/react-resizable/index.js","webpack://grafana-lokiexplore-app/../node_modules/react-scroll-sync/dist/index.js","webpack://grafana-lokiexplore-app/../node_modules/semver/classes/comparator.js","webpack://grafana-lokiexplore-app/../node_modules/semver/classes/range.js","webpack://grafana-lokiexplore-app/../node_modules/semver/classes/semver.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/clean.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/cmp.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/coerce.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/compare-build.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/compare-loose.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/compare.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/diff.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/eq.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/gt.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/gte.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/inc.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/lt.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/lte.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/major.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/minor.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/neq.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/parse.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/patch.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/prerelease.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/rcompare.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/rsort.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/satisfies.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/sort.js","webpack://grafana-lokiexplore-app/../node_modules/semver/functions/valid.js","webpack://grafana-lokiexplore-app/../node_modules/semver/index.js","webpack://grafana-lokiexplore-app/../node_modules/semver/internal/constants.js","webpack://grafana-lokiexplore-app/../node_modules/semver/internal/debug.js","webpack://grafana-lokiexplore-app/../node_modules/semver/internal/identifiers.js","webpack://grafana-lokiexplore-app/../node_modules/semver/internal/lrucache.js","webpack://grafana-lokiexplore-app/../node_modules/semver/internal/parse-options.js","webpack://grafana-lokiexplore-app/../node_modules/semver/internal/re.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/gtr.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/intersects.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/ltr.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/max-satisfying.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/min-satisfying.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/min-version.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/outside.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/simplify.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/subset.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/to-comparators.js","webpack://grafana-lokiexplore-app/../node_modules/semver/ranges/valid.js","webpack://grafana-lokiexplore-app/../node_modules/uuid/dist/esm-browser/native.js","webpack://grafana-lokiexplore-app/../node_modules/uuid/dist/esm-browser/rng.js","webpack://grafana-lokiexplore-app/../node_modules/uuid/dist/esm-browser/stringify.js","webpack://grafana-lokiexplore-app/../node_modules/uuid/dist/esm-browser/v4.js","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/common/common.gen.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/raw/dashboard/x/dashboard_types.gen.mjs","webpack://grafana-lokiexplore-app/../node_modules/@grafana/schema/dist/esm/veneer/dashboard.types.mjs","webpack://grafana-lokiexplore-app/../node_modules/@leeoniya/ufuzzy/dist/uFuzzy.mjs","webpack://grafana-lokiexplore-app/../node_modules/@react-aria/utils/dist/useResizeObserver.mjs","webpack://grafana-lokiexplore-app/../node_modules/react-from-dom/dist/index.mjs","webpack://grafana-lokiexplore-app/../node_modules/react-inlinesvg/dist/index.mjs"],"sourcesContent":["import { useParams, useLocation, matchPath } from 'react-router-dom';\nimport { urlUtil, locationUtil } from '@grafana/data';\nimport { locationSearchToObject } from '@grafana/runtime';\n\nfunction useAppQueryParams() {\n const location = useLocation();\n return locationSearchToObject(location.search || \"\");\n}\nfunction getUrlWithAppState(path, searchObject, preserveParams) {\n const paramsCopy = { ...searchObject };\n if (preserveParams) {\n for (const key of Object.keys(paramsCopy)) {\n if (!preserveParams.includes(key)) {\n delete paramsCopy[key];\n }\n }\n }\n return urlUtil.renderUrl(locationUtil.assureBaseUrl(path), paramsCopy);\n}\nfunction useSceneRouteMatch(path) {\n const params = useParams();\n const location = useLocation();\n const isExact = matchPath(\n {\n path,\n caseSensitive: false,\n end: true\n },\n location.pathname\n );\n const match = {\n params,\n isExact: isExact !== null,\n path: location.pathname,\n url: location.pathname\n };\n return match;\n}\n\nexport { getUrlWithAppState, useAppQueryParams, useSceneRouteMatch };\n//# sourceMappingURL=utils.js.map\n","import { getPluginImportUtils } from '@grafana/runtime';\n\nconst runtimePanelPlugins = /* @__PURE__ */ new Map();\nfunction registerRuntimePanelPlugin({ pluginId, plugin }) {\n if (runtimePanelPlugins.has(pluginId)) {\n throw new Error(`A runtime panel plugin with id ${pluginId} has already been registered`);\n }\n plugin.meta = {\n ...plugin.meta,\n id: pluginId,\n name: pluginId,\n module: \"runtime plugin\",\n baseUrl: \"runtime plugin\",\n info: {\n author: {\n name: \"Runtime plugin \" + pluginId\n },\n description: \"\",\n links: [],\n logos: {\n large: \"\",\n small: \"\"\n },\n screenshots: [],\n updated: \"\",\n version: \"\"\n }\n };\n runtimePanelPlugins.set(pluginId, plugin);\n}\nfunction loadPanelPluginSync(pluginId) {\n var _a;\n const { getPanelPluginFromCache } = getPluginImportUtils();\n return (_a = getPanelPluginFromCache(pluginId)) != null ? _a : runtimePanelPlugins.get(pluginId);\n}\n\nexport { loadPanelPluginSync, registerRuntimePanelPlugin, runtimePanelPlugins };\n//# sourceMappingURL=registerRuntimePanelPlugin.js.map\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import React, { useState, useEffect } from 'react';\n\nfunction SceneComponentWrapperWithoutMemo({ model, ...otherProps }) {\n var _a;\n const Component = (_a = model.constructor[\"Component\"]) != null ? _a : EmptyRenderer;\n const [_, setValue] = useState(0);\n useEffect(() => {\n const unsub = model.activate();\n setValue((prevState) => prevState + 1);\n return unsub;\n }, [model]);\n if (!model.isActive && !model.renderBeforeActivation) {\n return null;\n }\n return /* @__PURE__ */ React.createElement(Component, { ...otherProps, model });\n}\nconst SceneComponentWrapper = React.memo(SceneComponentWrapperWithoutMemo);\nfunction EmptyRenderer(_) {\n return null;\n}\n\nexport { SceneComponentWrapper };\n//# sourceMappingURL=SceneComponentWrapper.js.map\n","import { BusEventWithPayload } from '@grafana/data';\n\nclass SceneObjectStateChangedEvent extends BusEventWithPayload {\n}\nSceneObjectStateChangedEvent.type = \"scene-object-state-change\";\nclass UserActionEvent extends BusEventWithPayload {\n}\nUserActionEvent.type = \"scene-object-user-action\";\n\nexport { SceneObjectStateChangedEvent, UserActionEvent };\n//# sourceMappingURL=events.js.map\n","var __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _ref;\nclass SceneObjectRef {\n constructor(ref) {\n __privateAdd(this, _ref);\n __privateSet(this, _ref, ref);\n }\n resolve() {\n return __privateGet(this, _ref);\n }\n}\n_ref = new WeakMap();\n\nexport { SceneObjectRef };\n//# sourceMappingURL=SceneObjectRef.js.map\n","import { useState, useEffect } from 'react';\nimport { Subscription } from 'rxjs';\nimport { v4 } from 'uuid';\nimport { EventBusSrv } from '@grafana/data';\nimport { SceneComponentWrapper } from './SceneComponentWrapper.js';\nimport { SceneObjectStateChangedEvent } from './events.js';\nimport { cloneSceneObject } from './sceneGraph/utils.js';\nimport { SceneObjectRef } from './SceneObjectRef.js';\n\nclass SceneObjectBase {\n constructor(state) {\n this._isActive = false;\n this._activationHandlers = [];\n this._deactivationHandlers = /* @__PURE__ */ new Map();\n this._subs = new Subscription();\n this._refCount = 0;\n this._renderBeforeActivation = false;\n if (!state.key) {\n state.key = v4();\n }\n this._events = new EventBusSrv();\n this._state = Object.freeze(state);\n this._setParent(this._state);\n }\n /** Current state */\n get state() {\n return this._state;\n }\n /** True if currently being active (ie displayed for visual objects) */\n get isActive() {\n return this._isActive;\n }\n get renderBeforeActivation() {\n return this._renderBeforeActivation;\n }\n /** Returns the parent, undefined for root object */\n get parent() {\n return this._parent;\n }\n /** Returns variable dependency config */\n get variableDependency() {\n return this._variableDependency;\n }\n /** Returns url sync config */\n get urlSync() {\n return this._urlSync;\n }\n /**\n * Used in render functions when rendering a SceneObject.\n * Wraps the component in an EditWrapper that handles edit mode\n */\n get Component() {\n return SceneComponentWrapper;\n }\n _setParent(state) {\n forEachChild(state, (child) => {\n if (child._parent && child._parent !== this) {\n console.warn(\n \"SceneObject already has a parent set that is different from the new parent. You cannot share the same SceneObject instance in multiple scenes or in multiple different places of the same scene graph. Use SceneObject.clone() to duplicate a SceneObject or store a state key reference and use sceneGraph.findObject to locate it.\",\n child,\n this\n );\n }\n child._parent = this;\n });\n }\n /**\n * Sometimes you want to move one instance to another parent.\n * This is a way to do that without getting the console warning.\n */\n clearParent() {\n this._parent = void 0;\n }\n /**\n * Subscribe to the scene state subject\n **/\n subscribeToState(handler) {\n return this._events.subscribe(SceneObjectStateChangedEvent, (event) => {\n if (event.payload.changedObject === this) {\n handler(event.payload.newState, event.payload.prevState);\n }\n });\n }\n /**\n * Subscribe to the scene event\n **/\n subscribeToEvent(eventType, handler) {\n return this._events.subscribe(eventType, handler);\n }\n setState(update) {\n const prevState = this._state;\n const newState = {\n ...this._state,\n ...update\n };\n this._state = Object.freeze(newState);\n this._setParent(update);\n this._handleActivationOfChangedStateProps(prevState, newState);\n this.publishEvent(\n new SceneObjectStateChangedEvent({\n prevState,\n newState,\n partialUpdate: update,\n changedObject: this\n }),\n true\n );\n }\n /**\n * This handles activation and deactivation of $data, $timeRange and $variables when they change\n * during the active phase of the scene object.\n */\n _handleActivationOfChangedStateProps(prevState, newState) {\n if (!this.isActive) {\n return;\n }\n if (prevState.$behaviors !== newState.$behaviors) {\n this._handleChangedBehaviors(prevState.$behaviors, newState.$behaviors);\n }\n if (prevState.$data !== newState.$data) {\n this._handleChangedStateActivation(prevState.$data, newState.$data);\n }\n if (prevState.$variables !== newState.$variables) {\n this._handleChangedStateActivation(prevState.$variables, newState.$variables);\n }\n if (prevState.$timeRange !== newState.$timeRange) {\n this._handleChangedStateActivation(prevState.$timeRange, newState.$timeRange);\n }\n }\n _handleChangedStateActivation(oldValue, newValue) {\n if (oldValue) {\n const deactivationHandler = this._deactivationHandlers.get(oldValue);\n if (deactivationHandler) {\n deactivationHandler();\n this._deactivationHandlers.delete(oldValue);\n }\n }\n if (newValue) {\n this._deactivationHandlers.set(newValue, newValue.activate());\n }\n }\n _handleChangedBehaviors(oldValue, newValue) {\n if (oldValue) {\n for (const oldBehavior of oldValue) {\n if (!newValue || !newValue.includes(oldBehavior)) {\n const deactivationHandler = this._deactivationHandlers.get(oldBehavior);\n if (deactivationHandler) {\n deactivationHandler();\n this._deactivationHandlers.delete(oldBehavior);\n }\n }\n }\n }\n if (newValue) {\n for (const newBehavior of newValue) {\n if (!oldValue || !oldValue.includes(newBehavior)) {\n this._activateBehavior(newBehavior);\n }\n }\n }\n }\n /*\n * Publish an event and optionally bubble it up the scene\n **/\n publishEvent(event, bubble) {\n this._events.publish(event);\n if (bubble && this.parent) {\n this.parent.publishEvent(event, bubble);\n }\n }\n getRoot() {\n return !this._parent ? this : this._parent.getRoot();\n }\n _internalActivate() {\n this._isActive = true;\n const { $data, $variables, $timeRange, $behaviors } = this.state;\n this._activationHandlers.forEach((handler) => {\n const result = handler();\n if (result) {\n this._deactivationHandlers.set(result, result);\n }\n });\n if ($timeRange && !$timeRange.isActive) {\n this._deactivationHandlers.set($timeRange, $timeRange.activate());\n }\n if ($variables && !$variables.isActive) {\n this._deactivationHandlers.set($variables, $variables.activate());\n }\n if ($data && !$data.isActive) {\n this._deactivationHandlers.set($data, $data.activate());\n }\n if ($behaviors) {\n for (const behavior of $behaviors) {\n this._activateBehavior(behavior);\n }\n }\n }\n _activateBehavior(behavior) {\n if (behavior instanceof SceneObjectBase) {\n this._deactivationHandlers.set(behavior, behavior.activate());\n } else if (typeof behavior === \"function\") {\n const deactivate = behavior(this);\n if (deactivate) {\n this._deactivationHandlers.set(behavior, deactivate);\n }\n }\n }\n /**\n * This is primarily called from SceneComponentWrapper when the SceneObject's Component is mounted.\n * But in some scenarios this can also be called directly from another scene object. When called manually from another scene object\n * make sure to call the returned function when the source scene object is deactivated.\n */\n activate() {\n if (!this.isActive) {\n this._internalActivate();\n }\n this._refCount++;\n let called = false;\n return () => {\n this._refCount--;\n if (called) {\n const msg = `SceneObject cancelation handler returned by activate() called a second time`;\n throw new Error(msg);\n }\n called = true;\n if (this._refCount === 0) {\n this._internalDeactivate();\n }\n };\n }\n /**\n * Called by the SceneComponentWrapper when the react component is unmounted.\n * Don't override this, instead use addActivationHandler. The activation handler can return a deactivation handler.\n */\n _internalDeactivate() {\n this._isActive = false;\n for (let handler of this._deactivationHandlers.values()) {\n handler();\n }\n this._deactivationHandlers.clear();\n this._events.removeAllListeners();\n this._subs.unsubscribe();\n this._subs = new Subscription();\n }\n /**\n * Utility hook to get and subscribe to state\n */\n useState() {\n return useSceneObjectState(this);\n }\n /** Force a re-render, should only be needed when variable values change */\n forceRender() {\n this.setState({});\n }\n /**\n * Will create new SceneObject with shallow-cloned state, but all state items of type SceneObject are deep cloned\n */\n clone(withState) {\n return cloneSceneObject(this, withState);\n }\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n addActivationHandler(handler) {\n this._activationHandlers.push(handler);\n }\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n */\n forEachChild(callback) {\n forEachChild(this.state, callback);\n }\n /** Returns a SceneObjectRef that will resolve to this object */\n getRef() {\n if (!this._ref) {\n this._ref = new SceneObjectRef(this);\n }\n return this._ref;\n }\n toJSON() {\n return {\n type: Object.getPrototypeOf(this).constructor.name,\n isActive: this.isActive,\n state: this.state\n };\n }\n}\nfunction useSceneObjectState(model, options) {\n var _a;\n const [_, setState] = useState(model.state);\n const stateAtFirstRender = model.state;\n const shouldActivateOrKeepAlive = (_a = options == null ? void 0 : options.shouldActivateOrKeepAlive) != null ? _a : false;\n useEffect(() => {\n let unactivate;\n if (shouldActivateOrKeepAlive) {\n unactivate = model.activate();\n }\n const s = model.subscribeToState((state) => {\n setState(state);\n });\n if (model.state !== stateAtFirstRender) {\n setState(model.state);\n }\n return () => {\n s.unsubscribe();\n if (unactivate) {\n unactivate();\n }\n };\n }, [model, shouldActivateOrKeepAlive]);\n return model.state;\n}\nfunction forEachChild(state, callback) {\n for (const propValue of Object.values(state)) {\n if (propValue instanceof SceneObjectBase) {\n callback(propValue);\n }\n if (Array.isArray(propValue)) {\n for (const child of propValue) {\n if (child instanceof SceneObjectBase) {\n callback(child);\n }\n }\n }\n }\n}\n\nexport { SceneObjectBase, useSceneObjectState };\n//# sourceMappingURL=SceneObjectBase.js.map\n","import { SceneObjectBase } from '../SceneObjectBase.js';\nimport { SceneObjectRef } from '../SceneObjectRef.js';\nimport { cloneDeep } from 'lodash';\n\nfunction cloneSceneObject(sceneObject, withState) {\n const clonedState = cloneSceneObjectState(sceneObject.state, withState);\n return new sceneObject.constructor(clonedState);\n}\nfunction cloneSceneObjectState(sceneState, withState) {\n const clonedState = { ...sceneState };\n Object.assign(clonedState, withState);\n for (const key in clonedState) {\n if (withState && withState[key] !== void 0) {\n continue;\n }\n const propValue = clonedState[key];\n if (propValue instanceof SceneObjectRef) {\n console.warn(\"Cloning object with SceneObjectRef\");\n continue;\n }\n if (propValue instanceof SceneObjectBase) {\n clonedState[key] = propValue.clone();\n } else if (Array.isArray(propValue)) {\n const newArray = [];\n for (const child of propValue) {\n if (child instanceof SceneObjectBase) {\n newArray.push(child.clone());\n } else if (typeof child === \"object\") {\n newArray.push(cloneDeep(child));\n } else {\n newArray.push(child);\n }\n }\n clonedState[key] = newArray;\n } else if (typeof propValue === \"object\") {\n clonedState[key] = cloneDeep(propValue);\n } else {\n clonedState[key] = propValue;\n }\n }\n return clonedState;\n}\nfunction getClosest(sceneObject, extract) {\n let curSceneObject = sceneObject;\n let extracted = void 0;\n while (curSceneObject && !extracted) {\n extracted = extract(curSceneObject);\n curSceneObject = curSceneObject.parent;\n }\n return extracted;\n}\n\nexport { cloneSceneObject, cloneSceneObjectState, getClosest };\n//# sourceMappingURL=utils.js.map\n","import { DataSourceApi, PluginType } from '@grafana/data';\n\nclass RuntimeDataSource extends DataSourceApi {\n constructor(pluginId, uid) {\n super({\n name: \"RuntimeDataSource-\" + pluginId,\n uid,\n type: pluginId,\n id: 1,\n readOnly: true,\n jsonData: {},\n access: \"direct\",\n meta: {\n id: pluginId,\n name: \"RuntimeDataSource-\" + pluginId,\n type: PluginType.datasource,\n info: {\n author: {\n name: \"\"\n },\n description: \"\",\n links: [],\n logos: {\n large: \"\",\n small: \"\"\n },\n screenshots: [],\n updated: \"\",\n version: \"\"\n },\n module: \"\",\n baseUrl: \"\"\n }\n });\n }\n testDatasource() {\n return Promise.resolve({});\n }\n}\nconst runtimeDataSources = /* @__PURE__ */ new Map();\nfunction registerRuntimeDataSource({ dataSource }) {\n if (runtimeDataSources.has(dataSource.uid)) {\n throw new Error(`A runtime data source with uid ${dataSource.uid} has already been registered`);\n }\n runtimeDataSources.set(dataSource.uid, dataSource);\n}\n\nexport { RuntimeDataSource, registerRuntimeDataSource, runtimeDataSources };\n//# sourceMappingURL=RuntimeDataSource.js.map\n","function lookupVariable(name, sceneObject) {\n const variables = sceneObject.state.$variables;\n if (!variables) {\n if (sceneObject.parent) {\n return lookupVariable(name, sceneObject.parent);\n } else {\n return null;\n }\n }\n const found = variables.getByName(name);\n if (found) {\n return found;\n } else if (sceneObject.parent) {\n return lookupVariable(name, sceneObject.parent);\n }\n return null;\n}\n\nexport { lookupVariable };\n//# sourceMappingURL=lookupVariable.js.map\n","function writeSceneLog(logger, message, ...rest) {\n let loggingEnabled = false;\n if (typeof window !== \"undefined\") {\n loggingEnabled = localStorage.getItem(\"grafana.debug.scenes\") === \"true\";\n }\n if (loggingEnabled) {\n console.log(`${logger}: `, message, ...rest);\n }\n}\n\nexport { writeSceneLog };\n//# sourceMappingURL=writeSceneLog.js.map\n","import { writeSceneLog } from '../utils/writeSceneLog.js';\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _profileInProgress, _profileStartTs, _trailAnimationFrameId, _recordedTrailingSpans;\nconst POST_STORM_WINDOW = 2e3;\nconst SPAN_THRESHOLD = 30;\nclass SceneRenderProfiler {\n constructor(queryController) {\n this.queryController = queryController;\n __privateAdd(this, _profileInProgress, null);\n __privateAdd(this, _profileStartTs, null);\n __privateAdd(this, _trailAnimationFrameId, null);\n // Will keep measured lengths trailing frames\n __privateAdd(this, _recordedTrailingSpans, []);\n this.lastFrameTime = 0;\n this.measureTrailingFrames = (measurementStartTs, lastFrameTime, profileStartTs) => {\n const currentFrameTime = performance.now();\n const frameLength = currentFrameTime - lastFrameTime;\n __privateGet(this, _recordedTrailingSpans).push(frameLength);\n if (currentFrameTime - measurementStartTs < POST_STORM_WINDOW) {\n __privateSet(this, _trailAnimationFrameId, requestAnimationFrame(\n () => this.measureTrailingFrames(measurementStartTs, currentFrameTime, profileStartTs)\n ));\n } else {\n const slowFrames = processRecordedSpans(__privateGet(this, _recordedTrailingSpans));\n const slowFramesTime = slowFrames.reduce((acc, val) => acc + val, 0);\n writeSceneLog(\n this.constructor.name,\n \"Profile tail recorded, slow frames duration:\",\n slowFramesTime,\n slowFrames,\n __privateGet(this, _profileInProgress)\n );\n __privateSet(this, _recordedTrailingSpans, []);\n const profileDuration = measurementStartTs - profileStartTs;\n writeSceneLog(\n this.constructor.name,\n \"Stoped recording, total measured time (network included):\",\n profileDuration + slowFramesTime\n );\n __privateSet(this, _trailAnimationFrameId, null);\n const profileEndTs = profileStartTs + profileDuration + slowFramesTime;\n performance.measure(\"DashboardInteraction\", {\n start: profileStartTs,\n end: profileEndTs\n });\n const networkDuration = captureNetwork(profileStartTs, profileEndTs);\n if (this.queryController.state.onProfileComplete) {\n this.queryController.state.onProfileComplete({\n origin: __privateGet(this, _profileInProgress).origin,\n crumbs: __privateGet(this, _profileInProgress).crumbs,\n duration: profileDuration + slowFramesTime,\n networkDuration,\n // @ts-ignore\n jsHeapSizeLimit: performance.memory ? performance.memory.jsHeapSizeLimit : 0,\n // @ts-ignore\n usedJSHeapSize: performance.memory ? performance.memory.usedJSHeapSize : 0,\n // @ts-ignore\n totalJSHeapSize: performance.memory ? performance.memory.totalJSHeapSize : 0\n });\n }\n if (window.__runs) {\n window.__runs += `${Date.now()}, ${profileDuration + slowFramesTime}\n`;\n } else {\n window.__runs = `${Date.now()}, ${profileDuration + slowFramesTime}\n`;\n }\n }\n };\n }\n startProfile(name) {\n if (__privateGet(this, _trailAnimationFrameId)) {\n cancelAnimationFrame(__privateGet(this, _trailAnimationFrameId));\n __privateSet(this, _trailAnimationFrameId, null);\n writeSceneLog(this.constructor.name, \"New profile: Stopped recording frames\");\n }\n __privateSet(this, _profileInProgress, { origin: name, crumbs: [] });\n __privateSet(this, _profileStartTs, performance.now());\n writeSceneLog(this.constructor.name, \"Profile started:\", __privateGet(this, _profileInProgress), __privateGet(this, _profileStartTs));\n }\n recordProfileTail(measurementStartTime, profileStartTs) {\n __privateSet(this, _trailAnimationFrameId, requestAnimationFrame(\n () => this.measureTrailingFrames(measurementStartTime, measurementStartTime, profileStartTs)\n ));\n }\n tryCompletingProfile() {\n writeSceneLog(this.constructor.name, \"Trying to complete profile\", __privateGet(this, _profileInProgress));\n if (this.queryController.runningQueriesCount() === 0 && __privateGet(this, _profileInProgress)) {\n writeSceneLog(this.constructor.name, \"All queries completed, stopping profile\");\n this.recordProfileTail(performance.now(), __privateGet(this, _profileStartTs));\n }\n }\n isTailRecording() {\n return Boolean(__privateGet(this, _trailAnimationFrameId));\n }\n cancelTailRecording() {\n if (__privateGet(this, _trailAnimationFrameId)) {\n cancelAnimationFrame(__privateGet(this, _trailAnimationFrameId));\n __privateSet(this, _trailAnimationFrameId, null);\n writeSceneLog(this.constructor.name, \"Cancelled recording frames, new profile started\");\n }\n }\n addCrumb(crumb) {\n if (__privateGet(this, _profileInProgress)) {\n __privateGet(this, _profileInProgress).crumbs.push(crumb);\n }\n }\n}\n_profileInProgress = new WeakMap();\n_profileStartTs = new WeakMap();\n_trailAnimationFrameId = new WeakMap();\n_recordedTrailingSpans = new WeakMap();\nfunction processRecordedSpans(spans) {\n for (let i = spans.length - 1; i >= 0; i--) {\n if (spans[i] > SPAN_THRESHOLD) {\n return spans.slice(0, i + 1);\n }\n }\n return [spans[0]];\n}\nfunction captureNetwork(startTs, endTs) {\n const entries = performance.getEntriesByType(\"resource\");\n performance.clearResourceTimings();\n const networkEntries = entries.filter((entry) => entry.startTime >= startTs && entry.startTime <= endTs);\n for (const entry of networkEntries) {\n performance.measure(\"Network entry \" + entry.name, {\n start: entry.startTime,\n end: entry.responseEnd\n });\n }\n return calculateNetworkTime(networkEntries);\n}\nfunction calculateNetworkTime(requests) {\n if (requests.length === 0) {\n return 0;\n }\n requests.sort((a, b) => a.startTime - b.startTime);\n let totalNetworkTime = 0;\n let currentStart = requests[0].startTime;\n let currentEnd = requests[0].responseEnd;\n for (let i = 1; i < requests.length; i++) {\n if (requests[i].startTime <= currentEnd) {\n currentEnd = Math.max(currentEnd, requests[i].responseEnd);\n } else {\n totalNetworkTime += currentEnd - currentStart;\n currentStart = requests[i].startTime;\n currentEnd = requests[i].responseEnd;\n }\n }\n totalNetworkTime += currentEnd - currentStart;\n return totalNetworkTime;\n}\n\nexport { SceneRenderProfiler, calculateNetworkTime, processRecordedSpans };\n//# sourceMappingURL=SceneRenderProfiler.js.map\n","import { isQueryController } from '../../behaviors/SceneQueryController.js';\n\nfunction getQueryController(sceneObject) {\n let parent = sceneObject;\n while (parent) {\n if (parent.state.$behaviors) {\n for (const behavior of parent.state.$behaviors) {\n if (isQueryController(behavior)) {\n return behavior;\n }\n }\n }\n parent = parent.parent;\n }\n return void 0;\n}\n\nexport { getQueryController };\n//# sourceMappingURL=getQueryController.js.map\n","import { SceneObjectBase } from '../core/SceneObjectBase.js';\nimport { writeSceneLog } from '../utils/writeSceneLog.js';\nimport { SceneRenderProfiler } from './SceneRenderProfiler.js';\n\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _running, _tryCompleteProfileFrameId;\nfunction isQueryController(s) {\n return \"isQueryController\" in s;\n}\nclass SceneQueryController extends SceneObjectBase {\n constructor(state = {}) {\n super({ ...state, isRunning: false });\n this.isQueryController = true;\n this.profiler = new SceneRenderProfiler(this);\n __privateAdd(this, _running, /* @__PURE__ */ new Set());\n __privateAdd(this, _tryCompleteProfileFrameId, null);\n this.runningQueriesCount = () => {\n return __privateGet(this, _running).size;\n };\n this.addActivationHandler(() => {\n return () => __privateGet(this, _running).clear();\n });\n }\n startProfile(name) {\n if (!this.state.enableProfiling) {\n return;\n }\n this.profiler.startProfile(name);\n }\n queryStarted(entry) {\n __privateGet(this, _running).add(entry);\n this.changeRunningQueryCount(1, entry);\n if (!this.state.isRunning) {\n this.setState({ isRunning: true });\n }\n }\n queryCompleted(entry) {\n if (!__privateGet(this, _running).has(entry)) {\n return;\n }\n __privateGet(this, _running).delete(entry);\n this.changeRunningQueryCount(-1);\n if (__privateGet(this, _running).size === 0) {\n this.setState({ isRunning: false });\n }\n }\n changeRunningQueryCount(dir, entry) {\n var _a;\n window.__grafanaRunningQueryCount = ((_a = window.__grafanaRunningQueryCount) != null ? _a : 0) + dir;\n if (dir === 1 && this.state.enableProfiling) {\n if (entry) {\n this.profiler.addCrumb(`${entry.origin.constructor.name}/${entry.type}`);\n }\n if (this.profiler.isTailRecording()) {\n writeSceneLog(this.constructor.name, \"New query started, cancelling tail recording\");\n this.profiler.cancelTailRecording();\n }\n }\n if (this.state.enableProfiling) {\n if (__privateGet(this, _tryCompleteProfileFrameId)) {\n cancelAnimationFrame(__privateGet(this, _tryCompleteProfileFrameId));\n }\n __privateSet(this, _tryCompleteProfileFrameId, requestAnimationFrame(() => {\n this.profiler.tryCompletingProfile();\n }));\n }\n }\n cancelAll() {\n var _a;\n for (const entry of __privateGet(this, _running).values()) {\n (_a = entry.cancel) == null ? void 0 : _a.call(entry);\n }\n }\n}\n_running = new WeakMap();\n_tryCompleteProfileFrameId = new WeakMap();\n\nexport { SceneQueryController, isQueryController };\n//# sourceMappingURL=SceneQueryController.js.map\n","import { TableCellDisplayMode } from '../common/common.gen.mjs';\nexport { AxisColorMode, AxisPlacement, BarAlignment, BarGaugeDisplayMode, BarGaugeNamePlacement, BarGaugeSizing, BarGaugeValueMode, BigValueColorMode, BigValueGraphMode, BigValueJustifyMode, BigValueTextMode, ComparisonOperation, DataTopic, FrameGeometrySourceMode, GraphDrawStyle, GraphGradientMode, GraphThresholdsStyleMode, GraphTransform, HeatmapCalculationMode, HeatmapCellLayout, LegendDisplayMode, LineInterpolation, LogsDedupStrategy, LogsSortOrder, PercentChangeColorMode, ResourceDimensionMode, ScalarDimensionMode, ScaleDimensionMode, ScaleDirection, ScaleDistribution, ScaleOrientation, SortOrder, StackingMode, TableCellBackgroundDisplayMode, TableCellHeight, TextDimensionMode, TooltipDisplayMode, VariableFormatID, VisibilityMode, VizOrientation, defaultLineStyle, defaultOptionsWithTimezones, defaultReduceDataOptions, defaultTableFooterOptions, defaultTimeZone, defaultVizLegendOptions } from '../common/common.gen.mjs';\n\nconst defaultTableFieldOptions = {\n align: \"auto\",\n inspect: false,\n cellOptions: {\n type: TableCellDisplayMode.Auto\n }\n};\nvar LoadingState = /* @__PURE__ */ ((LoadingState2) => {\n LoadingState2[\"NotStarted\"] = \"NotStarted\";\n LoadingState2[\"Loading\"] = \"Loading\";\n LoadingState2[\"Streaming\"] = \"Streaming\";\n LoadingState2[\"Done\"] = \"Done\";\n LoadingState2[\"Error\"] = \"Error\";\n return LoadingState2;\n})(LoadingState || {});\n\nexport { LoadingState, TableCellDisplayMode, defaultTableFieldOptions };\n//# sourceMappingURL=common.types.mjs.map\n","import { getDefaultTimeRange } from '@grafana/data';\nimport { LoadingState } from '@grafana/schema';\nimport { of } from 'rxjs';\nimport { SceneObjectBase } from './SceneObjectBase.js';\n\nclass SceneDataNode extends SceneObjectBase {\n constructor(state) {\n super({\n data: emptyPanelData,\n ...state\n });\n }\n getResultsStream() {\n const result = {\n origin: this,\n data: this.state.data\n };\n return of(result);\n }\n}\nconst emptyPanelData = {\n state: LoadingState.Done,\n series: [],\n timeRange: getDefaultTimeRange()\n};\n\nexport { SceneDataNode, emptyPanelData };\n//# sourceMappingURL=SceneDataNode.js.map\n","class SceneObjectUrlSyncConfig {\n constructor(_sceneObject, _options) {\n this._sceneObject = _sceneObject;\n this._nextChangeShouldAddHistoryStep = false;\n this._keys = _options.keys;\n }\n getKeys() {\n if (typeof this._keys === \"function\") {\n return this._keys();\n }\n return this._keys;\n }\n getUrlState() {\n return this._sceneObject.getUrlState();\n }\n updateFromUrl(values) {\n this._sceneObject.updateFromUrl(values);\n }\n shouldCreateHistoryStep(values) {\n return this._nextChangeShouldAddHistoryStep;\n }\n performBrowserHistoryAction(callback) {\n this._nextChangeShouldAddHistoryStep = true;\n callback();\n this._nextChangeShouldAddHistoryStep = false;\n }\n}\n\nexport { SceneObjectUrlSyncConfig };\n//# sourceMappingURL=SceneObjectUrlSyncConfig.js.map\n","import { toUtc } from '@grafana/data';\n\nconst INTERVAL_STRING_REGEX = /^\\d+[yYmMsSwWhHdD]$/;\nfunction parseUrlParam(value) {\n if (typeof value !== \"string\") {\n return null;\n }\n if (value.indexOf(\"now\") !== -1) {\n return value;\n }\n if (INTERVAL_STRING_REGEX.test(value)) {\n return value;\n }\n if (value.length === 8) {\n const utcValue = toUtc(value, \"YYYYMMDD\");\n if (utcValue.isValid()) {\n return utcValue.toISOString();\n }\n } else if (value.length === 15) {\n const utcValue = toUtc(value, \"YYYYMMDDTHHmmss\");\n if (utcValue.isValid()) {\n return utcValue.toISOString();\n }\n } else if (value.length === 19) {\n const utcValue = toUtc(value, \"YYYY-MM-DD HH:mm:ss\");\n if (utcValue.isValid()) {\n return utcValue.toISOString();\n }\n } else if (value.length === 24) {\n const utcValue = toUtc(value);\n return utcValue.toISOString();\n }\n const epoch = parseInt(value, 10);\n if (!isNaN(epoch)) {\n return toUtc(epoch).toISOString();\n }\n return null;\n}\n\nexport { parseUrlParam };\n//# sourceMappingURL=parseUrlParam.js.map\n","import { setWeekStart, dateMath } from '@grafana/data';\n\nfunction evaluateTimeRange(from, to, timeZone, fiscalYearStartMonth, delay, weekStart) {\n const hasDelay = delay && to === \"now\";\n const now = Date.now();\n if (weekStart) {\n setWeekStartIfDifferent(weekStart);\n }\n const parseOrToDateTime = (val, options) => {\n if (dateMath.toDateTime) {\n return dateMath.toDateTime(val, options);\n } else {\n return dateMath.parse(val, options.roundUp, options.timezone, options.fiscalYearStartMonth);\n }\n };\n return {\n to: parseOrToDateTime(hasDelay ? \"now-\" + delay : to, {\n roundUp: true,\n timezone: timeZone,\n fiscalYearStartMonth,\n now\n }),\n from: parseOrToDateTime(from, {\n roundUp: false,\n timezone: timeZone,\n fiscalYearStartMonth,\n now\n }),\n raw: {\n from,\n to\n }\n };\n}\nlet prevWeekStart;\nfunction setWeekStartIfDifferent(weekStart) {\n if (weekStart !== prevWeekStart) {\n prevWeekStart = weekStart;\n setWeekStart(weekStart);\n }\n}\n\nexport { evaluateTimeRange };\n//# sourceMappingURL=evaluateTimeRange.js.map\n","import { isDateTime, dateMath, dateTimeParse } from '@grafana/data';\n\nfunction isValid(value, roundUp, timeZone) {\n if (isDateTime(value)) {\n return value.isValid();\n }\n if (dateMath.isMathString(value)) {\n return dateMath.isValid(value);\n }\n const parsed = dateTimeParse(value, { roundUp, timeZone });\n return parsed.isValid();\n}\n\nexport { isValid };\n//# sourceMappingURL=date.js.map\n","import { getTimeZone, rangeUtil, setWeekStart, toUtc } from '@grafana/data';\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig.js';\nimport { SceneObjectBase } from './SceneObjectBase.js';\nimport { getClosest } from './sceneGraph/utils.js';\nimport { parseUrlParam } from '../utils/parseUrlParam.js';\nimport { evaluateTimeRange } from '../utils/evaluateTimeRange.js';\nimport { RefreshEvent, config, locationService } from '@grafana/runtime';\nimport { isValid } from '../utils/date.js';\nimport { getQueryController } from './sceneGraph/getQueryController.js';\n\nclass SceneTimeRange extends SceneObjectBase {\n constructor(state = {}) {\n var _a;\n const from = state.from && isValid(state.from) ? state.from : \"now-6h\";\n const to = state.to && isValid(state.to) ? state.to : \"now\";\n const timeZone = state.timeZone;\n const value = evaluateTimeRange(\n from,\n to,\n timeZone || getTimeZone(),\n state.fiscalYearStartMonth,\n state.UNSAFE_nowDelay,\n state.weekStart\n );\n const refreshOnActivate = (_a = state.refreshOnActivate) != null ? _a : { percent: 10 };\n super({ from, to, timeZone, value, refreshOnActivate, ...state });\n this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: [\"from\", \"to\", \"timezone\", \"time\", \"time.window\"] });\n this.onTimeRangeChange = (timeRange) => {\n const update = {};\n if (typeof timeRange.raw.from === \"string\") {\n update.from = timeRange.raw.from;\n } else {\n update.from = timeRange.raw.from.toISOString();\n }\n if (typeof timeRange.raw.to === \"string\") {\n update.to = timeRange.raw.to;\n } else {\n update.to = timeRange.raw.to.toISOString();\n }\n update.value = evaluateTimeRange(\n update.from,\n update.to,\n this.getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n if (update.from !== this.state.from || update.to !== this.state.to) {\n const queryController = getQueryController(this);\n queryController == null ? void 0 : queryController.startProfile(\"SceneTimeRange\");\n this._urlSync.performBrowserHistoryAction(() => {\n this.setState(update);\n });\n }\n };\n this.onTimeZoneChange = (timeZone) => {\n this._urlSync.performBrowserHistoryAction(() => {\n this.setState({ timeZone });\n });\n };\n this.onRefresh = () => {\n this.refreshRange(0);\n this.publishEvent(new RefreshEvent(), true);\n };\n this.addActivationHandler(this._onActivate.bind(this));\n }\n _onActivate() {\n if (!this.state.timeZone) {\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n this._subs.add(\n timeZoneSource.subscribeToState((n, p) => {\n if (n.timeZone !== void 0 && n.timeZone !== p.timeZone) {\n this.refreshRange(0);\n }\n })\n );\n }\n }\n if (rangeUtil.isRelativeTimeRange(this.state.value.raw)) {\n this.refreshIfStale();\n }\n return () => {\n if (this.state.weekStart) {\n setWeekStart(config.bootData.user.weekStart);\n }\n };\n }\n refreshIfStale() {\n var _a, _b, _c, _d;\n let ms;\n if (((_b = (_a = this.state) == null ? void 0 : _a.refreshOnActivate) == null ? void 0 : _b.percent) !== void 0) {\n ms = this.calculatePercentOfInterval(this.state.refreshOnActivate.percent);\n }\n if (((_d = (_c = this.state) == null ? void 0 : _c.refreshOnActivate) == null ? void 0 : _d.afterMs) !== void 0) {\n ms = Math.min(this.state.refreshOnActivate.afterMs, ms != null ? ms : Infinity);\n }\n if (ms !== void 0) {\n this.refreshRange(ms);\n }\n }\n /**\n * Will traverse up the scene graph to find the closest SceneTimeRangeLike with time zone set\n */\n getTimeZoneSource() {\n if (!this.parent || !this.parent.parent) {\n return this;\n }\n const source = getClosest(this.parent.parent, (o) => {\n if (o.state.$timeRange && o.state.$timeRange.state.timeZone) {\n return o.state.$timeRange;\n }\n return void 0;\n });\n if (!source) {\n return this;\n }\n return source;\n }\n /**\n * Refreshes time range if it is older than the invalidation interval\n * @param refreshAfterMs invalidation interval (milliseconds)\n * @private\n */\n refreshRange(refreshAfterMs) {\n var _a;\n const value = evaluateTimeRange(\n this.state.from,\n this.state.to,\n (_a = this.state.timeZone) != null ? _a : getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n const diff = value.to.diff(this.state.value.to, \"milliseconds\");\n if (diff >= refreshAfterMs) {\n this.setState({ value });\n }\n }\n calculatePercentOfInterval(percent) {\n const intervalMs = this.state.value.to.diff(this.state.value.from, \"milliseconds\");\n return Math.ceil(intervalMs / percent);\n }\n getTimeZone() {\n if (this.state.timeZone) {\n return this.state.timeZone;\n }\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n return timeZoneSource.state.timeZone;\n }\n return getTimeZone();\n }\n getUrlState() {\n const params = locationService.getSearchObject();\n const urlValues = { from: this.state.from, to: this.state.to, timezone: this.getTimeZone() };\n if (params.time && params[\"time.window\"]) {\n urlValues.time = null;\n urlValues[\"time.window\"] = null;\n }\n return urlValues;\n }\n updateFromUrl(values) {\n var _a, _b, _c;\n const update = {};\n let from = parseUrlParam(values.from);\n let to = parseUrlParam(values.to);\n if (values.time && values[\"time.window\"]) {\n const time = Array.isArray(values.time) ? values.time[0] : values.time;\n const timeWindow = Array.isArray(values[\"time.window\"]) ? values[\"time.window\"][0] : values[\"time.window\"];\n const timeRange = getTimeWindow(time, timeWindow);\n if (timeRange.from && isValid(timeRange.from)) {\n from = timeRange.from;\n }\n if (timeRange.to && isValid(timeRange.to)) {\n to = timeRange.to;\n }\n }\n if (from && isValid(from)) {\n update.from = from;\n }\n if (to && isValid(to)) {\n update.to = to;\n }\n if (typeof values.timezone === \"string\") {\n update.timeZone = values.timezone !== \"\" ? values.timezone : void 0;\n }\n if (Object.keys(update).length === 0) {\n return;\n }\n update.value = evaluateTimeRange(\n (_a = update.from) != null ? _a : this.state.from,\n (_b = update.to) != null ? _b : this.state.to,\n (_c = update.timeZone) != null ? _c : this.getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n return this.setState(update);\n }\n}\nfunction getTimeWindow(time, timeWindow) {\n const valueTime = isNaN(Date.parse(time)) ? parseInt(time, 10) : Date.parse(time);\n let timeWindowMs;\n if (timeWindow.match(/^\\d+$/) && parseInt(timeWindow, 10)) {\n timeWindowMs = parseInt(timeWindow, 10);\n } else {\n timeWindowMs = rangeUtil.intervalToMs(timeWindow);\n }\n return {\n from: toUtc(valueTime - timeWindowMs / 2).toISOString(),\n to: toUtc(valueTime + timeWindowMs / 2).toISOString()\n };\n}\n\nexport { SceneTimeRange };\n//# sourceMappingURL=SceneTimeRange.js.map\n","import { SceneDataNode } from '../../core/SceneDataNode.js';\nimport { SceneObjectBase } from '../../core/SceneObjectBase.js';\nimport { SceneTimeRange } from '../../core/SceneTimeRange.js';\n\nconst EmptyDataNode = new SceneDataNode();\nconst DefaultTimeRange = new SceneTimeRange();\nclass EmptyVariableSetImpl extends SceneObjectBase {\n constructor() {\n super({ variables: [] });\n }\n getByName(name) {\n return void 0;\n }\n isVariableLoadingOrWaitingToUpdate(variable) {\n return false;\n }\n}\nconst EmptyVariableSet = new EmptyVariableSetImpl();\n\nexport { DefaultTimeRange, EmptyDataNode, EmptyVariableSet, EmptyVariableSetImpl };\n//# sourceMappingURL=defaults.js.map\n","import { DefaultTimeRange } from '../../variables/interpolation/defaults.js';\nimport { getClosest } from './utils.js';\n\nfunction getTimeRange(sceneObject) {\n var _a;\n return (_a = getClosest(sceneObject, (s) => s.state.$timeRange)) != null ? _a : DefaultTimeRange;\n}\n\nexport { getTimeRange };\n//# sourceMappingURL=getTimeRange.js.map\n","import { BusEventWithPayload } from '@grafana/data';\n\nclass SceneVariableValueChangedEvent extends BusEventWithPayload {\n}\nSceneVariableValueChangedEvent.type = \"scene-variable-changed-value\";\nfunction isCustomVariableValue(value) {\n return typeof value === \"object\" && \"formatter\" in value;\n}\n\nexport { SceneVariableValueChangedEvent, isCustomVariableValue };\n//# sourceMappingURL=types.js.map\n","import { property } from 'lodash';\n\nlet fieldAccessorCache = {};\nfunction getFieldAccessor(fieldPath) {\n const accessor = fieldAccessorCache[fieldPath];\n if (accessor) {\n return accessor;\n }\n return fieldAccessorCache[fieldPath] = property(fieldPath);\n}\n\nexport { getFieldAccessor };\n//# sourceMappingURL=fieldAccessorCache.js.map\n","import { getFieldAccessor } from './fieldAccessorCache.js';\n\nclass ScopedVarsVariable {\n constructor(name, value) {\n this.state = { name, value, type: \"scopedvar\" };\n }\n getValue(fieldPath) {\n let { value } = this.state;\n let realValue = value.value;\n if (fieldPath) {\n realValue = getFieldAccessor(fieldPath)(value.value);\n } else {\n realValue = value.value;\n }\n if (realValue === \"string\" || realValue === \"number\" || realValue === \"boolean\") {\n return realValue;\n }\n return String(realValue);\n }\n getValueText() {\n const { value } = this.state;\n if (value.text != null) {\n return String(value.text);\n }\n return String(value);\n }\n}\nlet scopedVarsVariable;\nfunction getSceneVariableForScopedVar(name, value) {\n if (!scopedVarsVariable) {\n scopedVarsVariable = new ScopedVarsVariable(name, value);\n } else {\n scopedVarsVariable.state.name = name;\n scopedVarsVariable.state.value = value;\n }\n return scopedVarsVariable;\n}\n\nexport { ScopedVarsVariable, getSceneVariableForScopedVar };\n//# sourceMappingURL=ScopedVarsVariable.js.map\n","import { map, isArray, replace } from 'lodash';\nimport { Registry, escapeRegex, textUtil, dateTime, urlUtil } from '@grafana/data';\nimport { VariableFormatID } from '@grafana/schema';\n\nconst formatRegistry = new Registry(() => {\n const formats = [\n {\n id: VariableFormatID.Lucene,\n name: \"Lucene\",\n description: \"Values are lucene escaped and multi-valued variables generate an OR expression\",\n formatter: (value) => {\n if (typeof value === \"string\") {\n return luceneEscape(value);\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return \"__empty__\";\n }\n const quotedValues = map(value, (val) => {\n return '\"' + luceneEscape(val) + '\"';\n });\n return \"(\" + quotedValues.join(\" OR \") + \")\";\n } else {\n return luceneEscape(`${value}`);\n }\n }\n },\n {\n id: VariableFormatID.Raw,\n name: \"raw\",\n description: \"Keep value as is\",\n formatter: (value) => String(value)\n },\n {\n id: VariableFormatID.Regex,\n name: \"Regex\",\n description: \"Values are regex escaped and multi-valued variables generate a (|) expression\",\n formatter: (value) => {\n if (typeof value === \"string\") {\n return escapeRegex(value);\n }\n if (Array.isArray(value)) {\n const escapedValues = value.map((item) => {\n if (typeof item === \"string\") {\n return escapeRegex(item);\n } else {\n return escapeRegex(String(item));\n }\n });\n if (escapedValues.length === 1) {\n return escapedValues[0];\n }\n return \"(\" + escapedValues.join(\"|\") + \")\";\n }\n return escapeRegex(`${value}`);\n }\n },\n {\n id: VariableFormatID.Pipe,\n name: \"Pipe\",\n description: \"Values are separated by | character\",\n formatter: (value) => {\n if (typeof value === \"string\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.join(\"|\");\n }\n return `${value}`;\n }\n },\n {\n id: VariableFormatID.Distributed,\n name: \"Distributed\",\n description: \"Multiple values are formatted like variable=value\",\n formatter: (value, args, variable) => {\n if (typeof value === \"string\") {\n return value;\n }\n if (Array.isArray(value)) {\n value = map(value, (val, index) => {\n if (index !== 0) {\n return variable.state.name + \"=\" + val;\n } else {\n return val;\n }\n });\n return value.join(\",\");\n }\n return `${value}`;\n }\n },\n {\n id: VariableFormatID.CSV,\n name: \"Csv\",\n description: \"Comma-separated values\",\n formatter: (value) => {\n if (typeof value === \"string\") {\n return value;\n }\n if (isArray(value)) {\n return value.join(\",\");\n }\n return String(value);\n }\n },\n {\n id: VariableFormatID.HTML,\n name: \"HTML\",\n description: \"HTML escaping of values\",\n formatter: (value) => {\n if (typeof value === \"string\") {\n return textUtil.escapeHtml(value);\n }\n if (isArray(value)) {\n return textUtil.escapeHtml(value.join(\", \"));\n }\n return textUtil.escapeHtml(String(value));\n }\n },\n {\n id: VariableFormatID.JSON,\n name: \"JSON\",\n description: \"JSON stringify value\",\n formatter: (value) => {\n if (typeof value === \"string\") {\n return value;\n }\n return JSON.stringify(value);\n }\n },\n {\n id: VariableFormatID.PercentEncode,\n name: \"Percent encode\",\n description: \"Useful for URL escaping values\",\n formatter: (value) => {\n if (isArray(value)) {\n return encodeURIComponentStrict(\"{\" + value.join(\",\") + \"}\");\n }\n return encodeURIComponentStrict(value);\n }\n },\n {\n id: VariableFormatID.SingleQuote,\n name: \"Single quote\",\n description: \"Single quoted values\",\n formatter: (value) => {\n const regExp = new RegExp(`'`, \"g\");\n if (isArray(value)) {\n return map(value, (v) => `'${replace(v, regExp, `\\\\'`)}'`).join(\",\");\n }\n let strVal = typeof value === \"string\" ? value : String(value);\n return `'${replace(strVal, regExp, `\\\\'`)}'`;\n }\n },\n {\n id: VariableFormatID.DoubleQuote,\n name: \"Double quote\",\n description: \"Double quoted values\",\n formatter: (value) => {\n const regExp = new RegExp('\"', \"g\");\n if (isArray(value)) {\n return map(value, (v) => `\"${replace(v, regExp, '\\\\\"')}\"`).join(\",\");\n }\n let strVal = typeof value === \"string\" ? value : String(value);\n return `\"${replace(strVal, regExp, '\\\\\"')}\"`;\n }\n },\n {\n id: VariableFormatID.SQLString,\n name: \"SQL string\",\n description: \"SQL string quoting and commas for use in IN statements and other scenarios\",\n formatter: sqlStringFormatter\n },\n {\n id: VariableFormatID.Date,\n name: \"Date\",\n description: \"Format date in different ways\",\n formatter: (value, args) => {\n var _a;\n let nrValue = NaN;\n if (typeof value === \"number\") {\n nrValue = value;\n } else if (typeof value === \"string\") {\n nrValue = parseInt(value, 10);\n }\n if (isNaN(nrValue)) {\n return \"NaN\";\n }\n const arg = (_a = args[0]) != null ? _a : \"iso\";\n switch (arg) {\n case \"ms\":\n return String(value);\n case \"seconds\":\n return `${Math.round(nrValue / 1e3)}`;\n case \"iso\":\n return dateTime(nrValue).toISOString();\n default:\n if ((args || []).length > 1) {\n return dateTime(nrValue).format(args.join(\":\"));\n }\n return dateTime(nrValue).format(arg);\n }\n }\n },\n {\n id: VariableFormatID.Glob,\n name: \"Glob\",\n description: \"Format multi-valued variables using glob syntax, example {value1,value2}\",\n formatter: (value) => {\n if (isArray(value) && value.length > 1) {\n return \"{\" + value.join(\",\") + \"}\";\n }\n return String(value);\n }\n },\n {\n id: VariableFormatID.Text,\n name: \"Text\",\n description: \"Format variables in their text representation. Example in multi-variable scenario A + B + C.\",\n formatter: (value, _args, variable) => {\n if (variable.getValueText) {\n return variable.getValueText();\n }\n return String(value);\n }\n },\n {\n id: VariableFormatID.QueryParam,\n name: \"Query parameter\",\n description: \"Format variables as URL parameters. Example in multi-variable scenario A + B + C => var-foo=A&var-foo=B&var-foo=C.\",\n formatter: (value, _args, variable) => {\n if (variable.urlSync) {\n const urlParam = variable.urlSync.getUrlState();\n return urlUtil.toUrlParams(urlParam);\n }\n if (Array.isArray(value)) {\n return value.map((v) => formatQueryParameter(variable.state.name, v)).join(\"&\");\n }\n return formatQueryParameter(variable.state.name, value);\n }\n },\n {\n id: VariableFormatID.UriEncode,\n name: \"Percent encode as URI\",\n description: \"Useful for URL escaping values, taking into URI syntax characters\",\n formatter: (value) => {\n if (isArray(value)) {\n return encodeURIStrict(\"{\" + value.join(\",\") + \"}\");\n }\n return encodeURIStrict(value);\n }\n }\n ];\n return formats;\n});\nfunction luceneEscape(value) {\n if (isNaN(+value) === false) {\n return value;\n }\n return value.replace(/([\\!\\*\\+\\-\\=<>\\s\\&\\|\\(\\)\\[\\]\\{\\}\\^\\~\\?\\:\\\\/\"])/g, \"\\\\$1\");\n}\nfunction encodeURIComponentStrict(str) {\n if (typeof str === \"object\") {\n str = String(str);\n }\n return replaceSpecialCharactersToASCII(encodeURIComponent(str));\n}\nconst encodeURIStrict = (str) => replaceSpecialCharactersToASCII(encodeURI(String(str)));\nconst replaceSpecialCharactersToASCII = (value) => value.replace(/[!'()*]/g, (c) => {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n});\nfunction formatQueryParameter(name, value) {\n return `var-${name}=${encodeURIComponentStrict(value)}`;\n}\nconst SQL_ESCAPE_MAP = {\n \"'\": \"''\",\n '\"': '\\\\\"'\n};\nfunction sqlStringFormatter(value) {\n const regExp = new RegExp(`'|\"`, \"g\");\n if (isArray(value)) {\n return map(value, (v) => `'${replace(v, regExp, (match) => {\n var _a;\n return (_a = SQL_ESCAPE_MAP[match]) != null ? _a : \"\";\n })}'`).join(\",\");\n }\n let strVal = typeof value === \"string\" ? value : String(value);\n return `'${replace(strVal, regExp, (match) => {\n var _a;\n return (_a = SQL_ESCAPE_MAP[match]) != null ? _a : \"\";\n })}'`;\n}\n\nexport { formatRegistry };\n//# sourceMappingURL=formatRegistry.js.map\n","const ALL_VARIABLE_TEXT = \"All\";\nconst ALL_VARIABLE_VALUE = \"$__all\";\nconst AUTO_VARIABLE_TEXT = \"Auto\";\nconst AUTO_VARIABLE_VALUE = \"$__auto\";\nconst VARIABLE_REGEX = /\\$(\\w+)|\\[\\[(\\w+?)(?::(\\w+))?\\]\\]|\\${(\\w+)(?:\\.([^:^\\}]+))?(?::([^\\}]+))?}/g;\nconst SEARCH_FILTER_VARIABLE = \"__searchFilter\";\n\nexport { ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE, AUTO_VARIABLE_TEXT, AUTO_VARIABLE_VALUE, SEARCH_FILTER_VARIABLE, VARIABLE_REGEX };\n//# sourceMappingURL=constants.js.map\n","class SkipFormattingValue {\n constructor(_value) {\n this._value = _value;\n }\n formatter() {\n return this._value;\n }\n}\n\nexport { SkipFormattingValue };\n//# sourceMappingURL=types.js.map\n","import { urlUtil, dateTimeFormat } from '@grafana/data';\nimport { getTimeRange } from '../../core/sceneGraph/getTimeRange.js';\nimport { getData } from '../../core/sceneGraph/sceneGraph.js';\nimport { SkipFormattingValue } from './types.js';\n\nclass UrlTimeRangeMacro {\n constructor(name, sceneObject) {\n this.state = { name, type: \"url_variable\" };\n this._sceneObject = sceneObject;\n }\n getValue() {\n var _a;\n const timeRange = getTimeRange(this._sceneObject);\n const urlState = (_a = timeRange.urlSync) == null ? void 0 : _a.getUrlState();\n if ((urlState == null ? void 0 : urlState.timezone) === \"browser\") {\n urlState.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n return new SkipFormattingValue(urlUtil.toUrlParams(urlState));\n }\n getValueText() {\n return \"\";\n }\n}\nclass TimeFromAndToMacro {\n constructor(name, sceneObject) {\n this.state = { name, type: \"time_macro\" };\n this._sceneObject = sceneObject;\n }\n getValue() {\n const timeRange = getTimeRange(this._sceneObject);\n if (this.state.name === \"__from\") {\n return timeRange.state.value.from.valueOf();\n } else {\n return timeRange.state.value.to.valueOf();\n }\n }\n getValueText() {\n const timeRange = getTimeRange(this._sceneObject);\n if (this.state.name === \"__from\") {\n return dateTimeFormat(timeRange.state.value.from, { timeZone: timeRange.getTimeZone() });\n } else {\n return dateTimeFormat(timeRange.state.value.to, { timeZone: timeRange.getTimeZone() });\n }\n }\n}\nclass TimezoneMacro {\n constructor(name, sceneObject) {\n this.state = { name, type: \"time_macro\" };\n this._sceneObject = sceneObject;\n }\n getValue() {\n const timeRange = getTimeRange(this._sceneObject);\n const timeZone = timeRange.getTimeZone();\n if (timeZone === \"browser\") {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n return timeZone;\n }\n getValueText() {\n return this.getValue();\n }\n}\nclass IntervalMacro {\n constructor(name, sceneObject, match) {\n this.state = { name, type: \"time_macro\", match };\n this._sceneObject = sceneObject;\n }\n getValue() {\n var _a;\n const data = getData(this._sceneObject);\n if (data) {\n const request = (_a = data.state.data) == null ? void 0 : _a.request;\n if (!request) {\n return this.state.match;\n }\n if (this.state.name === \"__interval_ms\") {\n return request.intervalMs;\n }\n return request.interval;\n }\n return this.state.match;\n }\n}\n\nexport { IntervalMacro, TimeFromAndToMacro, TimezoneMacro, UrlTimeRangeMacro };\n//# sourceMappingURL=timeMacros.js.map\n","import { useLocationService, locationService } from '@grafana/runtime';\n\nfunction setBaseClassState(sceneObject, newState) {\n sceneObject.setState(newState);\n}\nfunction useLocationServiceSafe() {\n return useLocationService ? useLocationService() : locationService;\n}\n\nexport { setBaseClassState, useLocationServiceSafe };\n//# sourceMappingURL=utils.js.map\n","import { isEqual, isArray } from 'lodash';\nimport { map } from 'rxjs';\nimport { ALL_VARIABLE_VALUE, ALL_VARIABLE_TEXT } from '../constants.js';\nimport { SceneObjectBase } from '../../core/SceneObjectBase.js';\nimport { SceneVariableValueChangedEvent } from '../types.js';\nimport { formatRegistry } from '../interpolation/formatRegistry.js';\nimport { VariableFormatID } from '@grafana/schema';\nimport { setBaseClassState } from '../../utils/utils.js';\n\nclass MultiValueVariable extends SceneObjectBase {\n constructor() {\n super(...arguments);\n this._urlSync = new MultiValueUrlSyncHandler(this);\n }\n /**\n * This function is called on when SceneVariableSet is activated or when a dependency changes.\n */\n validateAndUpdate() {\n return this.getValueOptions({}).pipe(\n map((options) => {\n this.updateValueGivenNewOptions(options);\n return {};\n })\n );\n }\n onCancel() {\n this.setStateHelper({ loading: false });\n const sceneVarSet = this.parent;\n sceneVarSet == null ? void 0 : sceneVarSet.cancel(this);\n }\n /**\n * Check if current value is valid given new options. If not update the value.\n */\n updateValueGivenNewOptions(options) {\n const { value: currentValue, text: currentText, options: oldOptions } = this.state;\n const stateUpdate = this.getStateUpdateGivenNewOptions(options, currentValue, currentText);\n this.interceptStateUpdateAfterValidation(stateUpdate);\n this.setStateHelper(stateUpdate);\n if (stateUpdate.value !== currentValue || stateUpdate.text !== currentText || this.hasAllValue() && !isEqual(options, oldOptions)) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n getStateUpdateGivenNewOptions(options, currentValue, currentText) {\n const stateUpdate = {\n options,\n loading: false,\n value: currentValue,\n text: currentText\n };\n if (options.length === 0) {\n if (this.state.defaultToAll || this.state.includeAll) {\n stateUpdate.value = ALL_VARIABLE_VALUE;\n stateUpdate.text = ALL_VARIABLE_TEXT;\n } else if (this.state.isMulti) {\n stateUpdate.value = [];\n stateUpdate.text = [];\n } else {\n stateUpdate.value = \"\";\n stateUpdate.text = \"\";\n }\n return stateUpdate;\n }\n if (this.hasAllValue()) {\n if (this.state.includeAll) {\n stateUpdate.text = ALL_VARIABLE_TEXT;\n } else {\n stateUpdate.value = options[0].value;\n stateUpdate.text = options[0].label;\n if (this.state.isMulti) {\n stateUpdate.value = [stateUpdate.value];\n stateUpdate.text = [stateUpdate.text];\n }\n }\n return stateUpdate;\n }\n if (this.state.isMulti) {\n const currentValues = Array.isArray(currentValue) ? currentValue : [currentValue];\n const validValues = currentValues.filter((v) => options.find((o) => o.value === v));\n const validTexts = validValues.map((v) => options.find((o) => o.value === v).label);\n if (validValues.length === 0) {\n const defaultState = this.getDefaultMultiState(options);\n stateUpdate.value = defaultState.value;\n stateUpdate.text = defaultState.text;\n } else {\n if (!isEqual(validValues, currentValue)) {\n stateUpdate.value = validValues;\n }\n if (!isEqual(validTexts, currentText)) {\n stateUpdate.text = validTexts;\n }\n }\n return stateUpdate;\n }\n let matchingOption = findOptionMatchingCurrent(currentValue, currentText, options);\n if (matchingOption) {\n stateUpdate.text = matchingOption.label;\n stateUpdate.value = matchingOption.value;\n } else {\n const defaultState = this.getDefaultSingleState(options);\n stateUpdate.value = defaultState.value;\n stateUpdate.text = defaultState.text;\n }\n return stateUpdate;\n }\n /**\n * Values set by initial URL sync needs to survive the next validation and update.\n * This function can intercept and make sure those values are preserved.\n */\n interceptStateUpdateAfterValidation(stateUpdate) {\n const isAllValueFix = stateUpdate.value === ALL_VARIABLE_VALUE && this.state.text === ALL_VARIABLE_TEXT;\n if (this.skipNextValidation && stateUpdate.value !== this.state.value && stateUpdate.text !== this.state.text && !isAllValueFix) {\n stateUpdate.value = this.state.value;\n stateUpdate.text = this.state.text;\n }\n this.skipNextValidation = false;\n }\n getValue() {\n if (this.hasAllValue()) {\n if (this.state.allValue) {\n return new CustomAllValue(this.state.allValue, this);\n }\n return this.state.options.map((x) => x.value);\n }\n return this.state.value;\n }\n getValueText() {\n if (this.hasAllValue()) {\n return ALL_VARIABLE_TEXT;\n }\n if (Array.isArray(this.state.text)) {\n return this.state.text.join(\" + \");\n }\n return String(this.state.text);\n }\n hasAllValue() {\n const value = this.state.value;\n return value === ALL_VARIABLE_VALUE || Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE;\n }\n getDefaultMultiState(options) {\n if (this.state.defaultToAll) {\n return { value: [ALL_VARIABLE_VALUE], text: [ALL_VARIABLE_TEXT] };\n } else if (options.length > 0) {\n return { value: [options[0].value], text: [options[0].label] };\n } else {\n return { value: [], text: [] };\n }\n }\n getDefaultSingleState(options) {\n if (this.state.defaultToAll) {\n return { value: ALL_VARIABLE_VALUE, text: ALL_VARIABLE_TEXT };\n } else if (options.length > 0) {\n return { value: options[0].value, text: options[0].label };\n } else {\n return { value: \"\", text: \"\" };\n }\n }\n /**\n * Change the value and publish SceneVariableValueChangedEvent event.\n */\n changeValueTo(value, text, isUserAction = false) {\n var _a, _b;\n if (value === this.state.value && text === this.state.text) {\n return;\n }\n if (!text) {\n if (Array.isArray(value)) {\n text = value.map((v) => this.findLabelTextForValue(v));\n } else {\n text = this.findLabelTextForValue(value);\n }\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n const state = this.getDefaultMultiState(this.state.options);\n value = state.value;\n text = state.text;\n }\n if (value[value.length - 1] === ALL_VARIABLE_VALUE) {\n value = [ALL_VARIABLE_VALUE];\n text = [ALL_VARIABLE_TEXT];\n } else if (value[0] === ALL_VARIABLE_VALUE && value.length > 1) {\n value.shift();\n if (Array.isArray(text)) {\n text.shift();\n }\n }\n }\n if (isEqual(value, this.state.value) && isEqual(text, this.state.text)) {\n return;\n }\n const stateChangeAction = () => this.setStateHelper({ value, text, loading: false });\n if (isUserAction) {\n (_b = (_a = this._urlSync).performBrowserHistoryAction) == null ? void 0 : _b.call(_a, stateChangeAction);\n } else {\n stateChangeAction();\n }\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n findLabelTextForValue(value) {\n if (value === ALL_VARIABLE_VALUE) {\n return ALL_VARIABLE_TEXT;\n }\n const option = this.state.options.find((x) => x.value === value);\n if (option) {\n return option.label;\n }\n const optionByLabel = this.state.options.find((x) => x.label === value);\n if (optionByLabel) {\n return optionByLabel.label;\n }\n return value;\n }\n /**\n * This helper function is to counter the contravariance of setState\n */\n setStateHelper(state) {\n setBaseClassState(this, state);\n }\n getOptionsForSelect(includeCurrentValue = true) {\n let options = this.state.options;\n if (this.state.includeAll) {\n options = [{ value: ALL_VARIABLE_VALUE, label: ALL_VARIABLE_TEXT }, ...options];\n }\n if (includeCurrentValue && !Array.isArray(this.state.value)) {\n const current = options.find((x) => x.value === this.state.value);\n if (!current) {\n options = [{ value: this.state.value, label: String(this.state.text) }, ...options];\n }\n }\n return options;\n }\n refreshOptions() {\n this.getValueOptions({}).subscribe((options) => {\n this.updateValueGivenNewOptions(options);\n });\n }\n}\nfunction findOptionMatchingCurrent(currentValue, currentText, options) {\n let textMatch;\n for (const item of options) {\n if (item.value === currentValue) {\n return item;\n }\n if (item.label === currentText) {\n textMatch = item;\n }\n }\n return textMatch;\n}\nclass MultiValueUrlSyncHandler {\n constructor(_sceneObject) {\n this._sceneObject = _sceneObject;\n this._nextChangeShouldAddHistoryStep = false;\n }\n getKey() {\n return `var-${this._sceneObject.state.name}`;\n }\n getKeys() {\n if (this._sceneObject.state.skipUrlSync) {\n return [];\n }\n return [this.getKey()];\n }\n getUrlState() {\n if (this._sceneObject.state.skipUrlSync) {\n return {};\n }\n let urlValue = null;\n let value = this._sceneObject.state.value;\n if (Array.isArray(value)) {\n urlValue = value.map(String);\n } else if (this._sceneObject.state.isMulti) {\n urlValue = [String(value)];\n } else {\n urlValue = String(value);\n }\n return { [this.getKey()]: urlValue };\n }\n updateFromUrl(values) {\n let urlValue = values[this.getKey()];\n if (urlValue != null) {\n if (this._sceneObject.state.includeAll) {\n urlValue = handleLegacyUrlAllValue(urlValue);\n }\n if (this._sceneObject.state.allValue && this._sceneObject.state.allValue === urlValue) {\n urlValue = ALL_VARIABLE_VALUE;\n }\n if (!this._sceneObject.isActive) {\n this._sceneObject.skipNextValidation = true;\n }\n this._sceneObject.changeValueTo(urlValue);\n }\n }\n performBrowserHistoryAction(callback) {\n this._nextChangeShouldAddHistoryStep = true;\n callback();\n this._nextChangeShouldAddHistoryStep = false;\n }\n shouldCreateHistoryStep(values) {\n return this._nextChangeShouldAddHistoryStep;\n }\n}\nfunction handleLegacyUrlAllValue(value) {\n if (isArray(value) && value[0] === ALL_VARIABLE_TEXT) {\n return [ALL_VARIABLE_VALUE];\n } else if (value === ALL_VARIABLE_TEXT) {\n return ALL_VARIABLE_VALUE;\n }\n return value;\n}\nclass CustomAllValue {\n constructor(_value, _variable) {\n this._value = _value;\n this._variable = _variable;\n }\n formatter(formatNameOrFn) {\n if (formatNameOrFn === VariableFormatID.Text) {\n return ALL_VARIABLE_TEXT;\n }\n if (formatNameOrFn === VariableFormatID.PercentEncode) {\n return formatRegistry.get(VariableFormatID.PercentEncode).formatter(this._value, [], this._variable);\n }\n if (formatNameOrFn === VariableFormatID.QueryParam) {\n return formatRegistry.get(VariableFormatID.QueryParam).formatter(ALL_VARIABLE_TEXT, [], this._variable);\n }\n return this._value;\n }\n}\n\nexport { CustomAllValue, MultiValueUrlSyncHandler, MultiValueVariable };\n//# sourceMappingURL=MultiValueVariable.js.map\n","import { isCustomVariableValue } from '../types.js';\nimport { formatRegistry } from '../interpolation/formatRegistry.js';\nimport { SkipFormattingValue } from './types.js';\nimport { VariableFormatID } from '@grafana/schema';\nimport { MultiValueVariable } from '../variants/MultiValueVariable.js';\nimport { ALL_VARIABLE_VALUE } from '../constants.js';\n\nclass AllVariablesMacro {\n constructor(name, sceneObject) {\n this.state = { name, type: \"url_variable\" };\n this._sceneObject = sceneObject;\n }\n getValue() {\n const allVars = collectAllVariables(this._sceneObject);\n const format = formatRegistry.get(VariableFormatID.QueryParam);\n const params = [];\n for (const name of Object.keys(allVars)) {\n const variable = allVars[name];\n if (variable instanceof MultiValueVariable && variable.hasAllValue() && !variable.state.allValue) {\n params.push(format.formatter(ALL_VARIABLE_VALUE, [], variable));\n continue;\n }\n const value = variable.getValue();\n if (!value) {\n continue;\n }\n if (isCustomVariableValue(value)) {\n params.push(value.formatter(VariableFormatID.QueryParam));\n } else {\n params.push(format.formatter(value, [], variable));\n }\n }\n return new SkipFormattingValue(params.join(\"&\"));\n }\n getValueText() {\n return \"\";\n }\n}\nfunction collectAllVariables(sceneObject, record = {}) {\n if (sceneObject.state.$variables) {\n for (const variable of sceneObject.state.$variables.state.variables) {\n if (variable.state.skipUrlSync) {\n continue;\n }\n if (!record[variable.state.name]) {\n record[variable.state.name] = variable;\n }\n }\n }\n if (sceneObject.parent) {\n collectAllVariables(sceneObject.parent, record);\n }\n return record;\n}\n\nexport { AllVariablesMacro };\n//# sourceMappingURL=AllVariablesMacro.js.map\n","import { getDisplayProcessor, formattedValueToString, FieldType, getFieldDisplayValuesProxy, getFrameDisplayName } from '@grafana/data';\nimport { getFieldAccessor } from '../interpolation/fieldAccessorCache.js';\nimport { getTemplateProxyForField } from './templateProxies.js';\n\nclass ValueMacro {\n constructor(name, sceneObject, _match, _scopedVars) {\n this._match = _match;\n this._scopedVars = _scopedVars;\n this.state = { name, type: \"__value\" };\n }\n getValue(fieldPath) {\n var _a, _b;\n const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;\n if (!dataContext) {\n return this._match;\n }\n const { frame, rowIndex, field, calculatedValue } = dataContext.value;\n if (calculatedValue) {\n switch (fieldPath) {\n case \"numeric\":\n return calculatedValue.numeric;\n case \"raw\":\n return calculatedValue.numeric;\n case \"time\":\n return \"\";\n case \"text\":\n default:\n return formattedValueToString(calculatedValue);\n }\n }\n if (rowIndex == null) {\n return this._match;\n }\n if (fieldPath === \"time\") {\n const timeField = frame.fields.find((f) => f.type === FieldType.time);\n return timeField ? timeField.values.get(rowIndex) : void 0;\n }\n if (!field) {\n return this._match;\n }\n const value = field.values.get(rowIndex);\n if (fieldPath === \"raw\") {\n return value;\n }\n const displayProcessor = (_b = field.display) != null ? _b : fallbackDisplayProcessor;\n const result = displayProcessor(value);\n switch (fieldPath) {\n case \"numeric\":\n return result.numeric;\n case \"text\":\n default:\n return formattedValueToString(result);\n }\n }\n getValueText() {\n return \"\";\n }\n}\nconst fallbackDisplayProcessor = getDisplayProcessor();\nclass DataMacro {\n constructor(name, sceneObject, _match, _scopedVars) {\n this._match = _match;\n this._scopedVars = _scopedVars;\n this.state = { name, type: \"__data\" };\n }\n getValue(fieldPath) {\n var _a, _b;\n const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n const { frame, rowIndex } = dataContext.value;\n if (rowIndex === void 0 || fieldPath === void 0) {\n return this._match;\n }\n const obj = {\n name: frame.name,\n refId: frame.refId,\n fields: getFieldDisplayValuesProxy({ frame, rowIndex })\n };\n return (_b = getFieldAccessor(fieldPath)(obj)) != null ? _b : \"\";\n }\n getValueText() {\n return \"\";\n }\n}\nclass SeriesMacro {\n constructor(name, sceneObject, _match, _scopedVars) {\n this._match = _match;\n this._scopedVars = _scopedVars;\n this.state = { name, type: \"__series\" };\n }\n getValue(fieldPath) {\n var _a;\n const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n if (fieldPath !== \"name\") {\n return this._match;\n }\n const { frame, frameIndex } = dataContext.value;\n return getFrameDisplayName(frame, frameIndex);\n }\n getValueText() {\n return \"\";\n }\n}\nclass FieldMacro {\n constructor(name, sceneObject, _match, _scopedVars) {\n this._match = _match;\n this._scopedVars = _scopedVars;\n this.state = { name, type: \"__field\" };\n }\n getValue(fieldPath) {\n var _a, _b;\n const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n if (fieldPath === void 0 || fieldPath === \"\") {\n return this._match;\n }\n const { frame, field, data } = dataContext.value;\n const obj = getTemplateProxyForField(field, frame, data);\n return (_b = getFieldAccessor(fieldPath)(obj)) != null ? _b : \"\";\n }\n getValueText() {\n return \"\";\n }\n}\n\nexport { DataMacro, FieldMacro, SeriesMacro, ValueMacro };\n//# sourceMappingURL=dataMacros.js.map\n","import { locationService, config } from '@grafana/runtime';\n\nclass UrlMacro {\n constructor(name, _) {\n this.state = { name, type: \"url_macro\" };\n }\n getValue(fieldPath) {\n var _a;\n const location = locationService.getLocation();\n const subUrl = (_a = config.appSubUrl) != null ? _a : \"\";\n switch (fieldPath != null ? fieldPath : \"\") {\n case \"params\":\n return new UrlStateFormatter(location.search);\n case \"path\":\n return subUrl + location.pathname;\n case \"\":\n default:\n return subUrl + location.pathname + location.search;\n }\n }\n getValueText() {\n return \"\";\n }\n}\nclass UrlStateFormatter {\n constructor(_urlQueryParams) {\n this._urlQueryParams = _urlQueryParams;\n }\n formatter(options) {\n if (!options) {\n return this._urlQueryParams;\n }\n const params = options.split(\":\");\n if (params[0] === \"exclude\" && params.length > 1) {\n const allParams = new URLSearchParams(this._urlQueryParams);\n for (const param of params[1].split(\",\")) {\n allParams.delete(param);\n }\n return `?${allParams}`;\n }\n if (params[0] === \"include\" && params.length > 1) {\n const allParams = new URLSearchParams(this._urlQueryParams);\n const includeOnly = params[1].split(\",\");\n for (const param of allParams.keys()) {\n if (!includeOnly.includes(param)) {\n allParams.delete(param);\n }\n }\n return `?${allParams}`;\n }\n return this._urlQueryParams;\n }\n}\n\nexport { UrlMacro };\n//# sourceMappingURL=urlMacros.js.map\n","import { DataLinkBuiltInVars } from '@grafana/data';\nimport { UrlTimeRangeMacro, TimeFromAndToMacro, TimezoneMacro, IntervalMacro } from './timeMacros.js';\nimport { AllVariablesMacro } from './AllVariablesMacro.js';\nimport { ValueMacro, DataMacro, SeriesMacro, FieldMacro } from './dataMacros.js';\nimport { UrlMacro } from './urlMacros.js';\nimport { UserMacro, OrgMacro } from './contextMacros.js';\n\nconst macrosIndex = /* @__PURE__ */ new Map([\n [DataLinkBuiltInVars.includeVars, AllVariablesMacro],\n [DataLinkBuiltInVars.keepTime, UrlTimeRangeMacro],\n [\"__value\", ValueMacro],\n [\"__data\", DataMacro],\n [\"__series\", SeriesMacro],\n [\"__field\", FieldMacro],\n [\"__url\", UrlMacro],\n [\"__from\", TimeFromAndToMacro],\n [\"__to\", TimeFromAndToMacro],\n [\"__timezone\", TimezoneMacro],\n [\"__user\", UserMacro],\n [\"__org\", OrgMacro],\n [\"__interval\", IntervalMacro],\n [\"__interval_ms\", IntervalMacro]\n]);\nfunction registerVariableMacro(name, macro) {\n if (macrosIndex.get(name)) {\n throw new Error(`Macro already registered ${name}`);\n }\n macrosIndex.set(name, macro);\n return () => {\n macrosIndex.delete(name);\n };\n}\n\nexport { macrosIndex, registerVariableMacro };\n//# sourceMappingURL=index.js.map\n","import { getFieldDisplayName, formatLabels } from '@grafana/data';\n\nfunction getTemplateProxyForField(field, frame, frames) {\n return new Proxy(\n {},\n // This object shows up in test snapshots\n {\n get: (obj, key) => {\n if (key === \"name\") {\n return field.name;\n }\n if (key === \"displayName\") {\n return getFieldDisplayName(field, frame, frames);\n }\n if (key === \"labels\" || key === \"formattedLabels\") {\n if (!field.labels) {\n return \"\";\n }\n return {\n ...field.labels,\n __values: Object.values(field.labels).sort().join(\", \"),\n toString: () => {\n return formatLabels(field.labels, \"\", true);\n }\n };\n }\n return void 0;\n }\n }\n );\n}\n\nexport { getTemplateProxyForField };\n//# sourceMappingURL=templateProxies.js.map\n","import { config } from '@grafana/runtime';\n\nclass UserMacro {\n constructor(name, _) {\n this.state = { name, type: \"user_macro\" };\n }\n getValue(fieldPath) {\n const user = config.bootData.user;\n switch (fieldPath) {\n case \"login\":\n return user.login;\n case \"email\":\n return user.email;\n case \"id\":\n default:\n return String(user.id);\n }\n }\n getValueText() {\n return \"\";\n }\n}\nclass OrgMacro {\n constructor(name, _) {\n this.state = { name, type: \"org_macro\" };\n }\n getValue(fieldPath) {\n const user = config.bootData.user;\n switch (fieldPath) {\n case \"name\":\n return user.orgName;\n case \"id\":\n default:\n return String(user.orgId);\n }\n }\n getValueText() {\n return \"\";\n }\n}\n\nexport { OrgMacro, UserMacro };\n//# sourceMappingURL=contextMacros.js.map\n","import { VariableFormatID } from '@grafana/schema';\nimport { isCustomVariableValue } from '../types.js';\nimport { getSceneVariableForScopedVar } from './ScopedVarsVariable.js';\nimport { formatRegistry } from './formatRegistry.js';\nimport { VARIABLE_REGEX } from '../constants.js';\nimport { lookupVariable } from '../lookupVariable.js';\nimport { macrosIndex } from '../macros/index.js';\n\nfunction sceneInterpolator(sceneObject, target, scopedVars, format, interpolations) {\n if (!target || typeof target !== \"string\") {\n return target != null ? target : \"\";\n }\n VARIABLE_REGEX.lastIndex = 0;\n return target.replace(VARIABLE_REGEX, (match, var1, var2, fmt2, var3, fieldPath, fmt3) => {\n const variableName = var1 || var2 || var3;\n const fmt = fmt2 || fmt3 || format;\n const variable = lookupFormatVariable(variableName, match, scopedVars, sceneObject);\n if (!variable) {\n if (interpolations) {\n interpolations.push({ match, variableName, fieldPath, format: fmt, value: match, found: false });\n }\n return match;\n }\n const value = formatValue(sceneObject, variable, variable.getValue(fieldPath), fmt);\n if (interpolations) {\n interpolations.push({ match, variableName, fieldPath, format: fmt, value, found: value !== match });\n }\n return value;\n });\n}\nfunction lookupFormatVariable(name, match, scopedVars, sceneObject) {\n if (scopedVars && scopedVars.hasOwnProperty(name)) {\n const scopedVar = scopedVars[name];\n if (scopedVar) {\n return getSceneVariableForScopedVar(name, scopedVar);\n }\n }\n const variable = lookupVariable(name, sceneObject);\n if (variable) {\n return variable;\n }\n const Macro = macrosIndex.get(name);\n if (Macro) {\n return new Macro(name, sceneObject, match, scopedVars);\n }\n return null;\n}\nfunction formatValue(context, variable, value, formatNameOrFn) {\n if (value === null || value === void 0) {\n return \"\";\n }\n if (isCustomVariableValue(value)) {\n return sceneInterpolator(context, value.formatter(formatNameOrFn));\n }\n if (!Array.isArray(value) && typeof value === \"object\") {\n value = `${value}`;\n }\n if (typeof formatNameOrFn === \"function\") {\n return formatNameOrFn(value, {\n name: variable.state.name,\n type: variable.state.type,\n multi: variable.state.isMulti,\n includeAll: variable.state.includeAll\n });\n }\n let args = [];\n if (!formatNameOrFn) {\n formatNameOrFn = VariableFormatID.Glob;\n } else {\n args = formatNameOrFn.split(\":\");\n if (args.length > 1) {\n formatNameOrFn = args[0];\n args = args.slice(1);\n } else {\n args = [];\n }\n }\n let formatter = formatRegistry.getIfExists(formatNameOrFn);\n if (!formatter) {\n console.error(`Variable format ${formatNameOrFn} not found. Using glob format as fallback.`);\n formatter = formatRegistry.get(VariableFormatID.Glob);\n }\n return formatter.formatter(value, args, variable);\n}\n\nexport { sceneInterpolator };\n//# sourceMappingURL=sceneInterpolator.js.map\n","function isSceneObject(obj) {\n return obj.useState !== void 0;\n}\nfunction isDataRequestEnricher(obj) {\n return \"enrichDataRequest\" in obj;\n}\nfunction isFiltersRequestEnricher(obj) {\n return \"enrichFiltersRequest\" in obj;\n}\nfunction isDataLayer(obj) {\n return \"isDataLayer\" in obj;\n}\n\nexport { isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject };\n//# sourceMappingURL=types.js.map\n","import { Observable, from, map, catchError } from 'rxjs';\nimport { LoadingState } from '@grafana/schema';\nimport { sceneGraph } from '../core/sceneGraph/index.js';\n\nfunction registerQueryWithController(entry) {\n return (queryStream) => {\n const queryControler = sceneGraph.getQueryController(entry.origin);\n if (!queryControler) {\n return queryStream;\n }\n return new Observable((observer) => {\n if (!entry.cancel) {\n entry.cancel = () => observer.complete();\n }\n queryControler.queryStarted(entry);\n let markedAsCompleted = false;\n const sub = queryStream.subscribe({\n next: (v) => {\n if (!markedAsCompleted && v.state !== LoadingState.Loading) {\n markedAsCompleted = true;\n queryControler.queryCompleted(entry);\n }\n observer.next(v);\n },\n error: (e) => observer.error(e),\n complete: () => {\n observer.complete();\n }\n });\n return () => {\n sub.unsubscribe();\n if (!markedAsCompleted) {\n queryControler.queryCompleted(entry);\n }\n };\n });\n };\n}\nfunction wrapPromiseInStateObservable(promise) {\n return new Observable((observer) => {\n observer.next({ state: LoadingState.Loading });\n const promiseObservable = from(promise);\n promiseObservable.pipe(\n map(() => ({ state: LoadingState.Done })),\n catchError(() => {\n observer.next({ state: LoadingState.Error });\n return [];\n })\n ).subscribe({\n next: (result) => observer.next(result),\n complete: () => observer.complete()\n });\n });\n}\n\nexport { registerQueryWithController, wrapPromiseInStateObservable };\n//# sourceMappingURL=registerQueryWithController.js.map\n","import { getDataSourceSrv } from '@grafana/runtime';\nimport { runtimeDataSources } from '../querying/RuntimeDataSource.js';\nimport { wrapPromiseInStateObservable, registerQueryWithController } from '../querying/registerQueryWithController.js';\nimport { sceneGraph } from '../core/sceneGraph/index.js';\n\nasync function getDataSource(datasource, scopedVars) {\n if (datasource == null ? void 0 : datasource.uid) {\n const runtimeDataSource = runtimeDataSources.get(datasource.uid);\n if (runtimeDataSource) {\n return runtimeDataSource;\n }\n }\n if (datasource && datasource.query) {\n return datasource;\n }\n const dsPromise = getDataSourceSrv().get(datasource, scopedVars);\n if (scopedVars.__sceneObject && scopedVars.__sceneObject.value.valueOf()) {\n const queryControler = sceneGraph.getQueryController(scopedVars.__sceneObject.value.valueOf());\n if (queryControler && queryControler.state.enableProfiling) {\n wrapPromiseInStateObservable(dsPromise).pipe(\n registerQueryWithController({\n type: \"plugin\",\n origin: scopedVars.__sceneObject.value.valueOf()\n })\n ).subscribe(() => {\n });\n }\n }\n const result = await dsPromise;\n return result;\n}\n\nexport { getDataSource };\n//# sourceMappingURL=getDataSource.js.map\n","import { sceneGraph } from '../core/sceneGraph/index.js';\nimport { isVariableValueEqual } from './utils.js';\n\nclass VariableValueRecorder {\n constructor() {\n this._values = /* @__PURE__ */ new Map();\n }\n recordCurrentDependencyValuesForSceneObject(sceneObject) {\n this.clearValues();\n if (!sceneObject.variableDependency) {\n return;\n }\n for (const variableName of sceneObject.variableDependency.getNames()) {\n const variable = sceneGraph.lookupVariable(variableName, sceneObject);\n if (variable) {\n this._values.set(variable.state.name, variable.getValue());\n }\n }\n }\n cloneAndRecordCurrentValuesForSceneObject(sceneObject) {\n const clone = new VariableValueRecorder();\n clone.recordCurrentDependencyValuesForSceneObject(sceneObject);\n return clone;\n }\n clearValues() {\n this._values.clear();\n }\n hasValues() {\n return !!this._values;\n }\n recordCurrentValue(variable) {\n this._values.set(variable.state.name, variable.getValue());\n }\n hasRecordedValue(variable) {\n return this._values.has(variable.state.name);\n }\n hasValueChanged(variable) {\n if (this._values.has(variable.state.name)) {\n const value = this._values.get(variable.state.name);\n if (!isVariableValueEqual(value, variable.getValue())) {\n return true;\n }\n }\n return false;\n }\n hasDependenciesChanged(sceneObject) {\n if (!this._values) {\n return false;\n }\n if (!sceneObject.variableDependency) {\n return false;\n }\n for (const variableName of sceneObject.variableDependency.getNames()) {\n const variable = sceneGraph.lookupVariable(variableName, sceneObject);\n if (!variable) {\n continue;\n }\n const name = variable.state.name;\n if (variable && this._values.has(name)) {\n const value = this._values.get(name);\n if (!isVariableValueEqual(value, variable.getValue())) {\n return true;\n }\n }\n }\n return false;\n }\n}\n\nexport { VariableValueRecorder };\n//# sourceMappingURL=VariableValueRecorder.js.map\n","function isExtraQueryProvider(obj) {\n return typeof obj === \"object\" && \"getExtraQueries\" in obj;\n}\n\nexport { isExtraQueryProvider };\n//# sourceMappingURL=ExtraQueryProvider.js.map\n","import { of, mergeMap, forkJoin, map } from 'rxjs';\n\nconst passthroughProcessor = (_, secondary) => of(secondary);\nconst extraQueryProcessingOperator = (processors) => (data) => {\n return data.pipe(\n mergeMap(([primary, ...secondaries]) => {\n const processedSecondaries = secondaries.flatMap((s) => {\n var _a, _b;\n return (_b = (_a = processors.get(s.request.requestId)) == null ? void 0 : _a(primary, s)) != null ? _b : of(s);\n });\n return forkJoin([of(primary), ...processedSecondaries]);\n }),\n map(([primary, ...processedSecondaries]) => {\n var _a;\n return {\n ...primary,\n series: [...primary.series, ...processedSecondaries.flatMap((s) => s.series)],\n annotations: [...(_a = primary.annotations) != null ? _a : [], ...processedSecondaries.flatMap((s) => {\n var _a2;\n return (_a2 = s.annotations) != null ? _a2 : [];\n })]\n };\n })\n );\n};\n\nexport { extraQueryProcessingOperator, passthroughProcessor };\n//# sourceMappingURL=extraQueryProcessingOperator.js.map\n","const GLOBAL_ANNOTATION_ID = 0;\nfunction filterAnnotations(data, filters) {\n var _a;\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n const rows = Array.from({ length: data.length }, () => /* @__PURE__ */ new Set());\n let frameIdx = 0;\n for (const frame of data) {\n for (let index = 0; index < frame.length; index++) {\n if (rows[frameIdx].has(index)) {\n continue;\n }\n let matching = true;\n const panelIdField = frame.fields.find((f) => f.name === \"panelId\");\n const sourceField = frame.fields.find((f) => f.name === \"source\");\n if (sourceField) {\n if (panelIdField && sourceField.values[index].type === \"dashboard\") {\n matching = [filters.panelId, GLOBAL_ANNOTATION_ID].includes(panelIdField.values[index]);\n }\n const sourceFilter = sourceField.values[index].filter;\n if (sourceFilter) {\n const includes = [...(_a = sourceFilter.ids) != null ? _a : [], GLOBAL_ANNOTATION_ID].includes(filters.panelId);\n if (sourceFilter.exclude) {\n if (includes) {\n matching = false;\n }\n } else if (!includes) {\n matching = false;\n }\n }\n }\n if (matching) {\n rows[frameIdx].add(index);\n }\n }\n frameIdx++;\n }\n const processed = [];\n frameIdx = 0;\n for (const frame of data) {\n const frameLength = rows[frameIdx].size;\n const fields = [];\n for (const field of frame.fields) {\n const buffer = [];\n for (let index = 0; index < frame.length; index++) {\n if (rows[frameIdx].has(index)) {\n buffer.push(field.values[index]);\n continue;\n }\n }\n fields.push({\n ...field,\n values: buffer\n });\n }\n processed.push({\n ...frame,\n fields,\n length: frameLength\n });\n frameIdx++;\n }\n return processed;\n}\n\nexport { filterAnnotations };\n//# sourceMappingURL=filterAnnotations.js.map\n","import { isDataRequestEnricher } from '../core/types.js';\n\nfunction getEnrichedDataRequest(sourceRunner) {\n const root = sourceRunner.getRoot();\n if (isDataRequestEnricher(root)) {\n return root.enrichDataRequest(sourceRunner);\n }\n return null;\n}\n\nexport { getEnrichedDataRequest };\n//# sourceMappingURL=getEnrichedDataRequest.js.map\n","import { getTemplateSrv, getDataSourceSrv } from '@grafana/runtime';\nimport { interpolate } from '../../core/sceneGraph/sceneGraph.js';\n\nlet originalGetAdhocFilters = void 0;\nlet allActiveFilterSets = /* @__PURE__ */ new Set();\nfunction patchGetAdhocFilters(filterVar) {\n filterVar.addActivationHandler(() => {\n allActiveFilterSets.add(filterVar);\n return () => allActiveFilterSets.delete(filterVar);\n });\n if (originalGetAdhocFilters) {\n return;\n }\n const templateSrv = getTemplateSrv();\n if (!(templateSrv == null ? void 0 : templateSrv.getAdhocFilters)) {\n console.log(\"Failed to patch getAdhocFilters\");\n return;\n }\n originalGetAdhocFilters = templateSrv.getAdhocFilters;\n templateSrv.getAdhocFilters = function getAdhocFiltersScenePatch(dsName) {\n var _a;\n if (allActiveFilterSets.size === 0) {\n return originalGetAdhocFilters.call(templateSrv, dsName);\n }\n const ds = getDataSourceSrv().getInstanceSettings(dsName);\n if (!ds) {\n return [];\n }\n for (const filter of allActiveFilterSets.values()) {\n if (((_a = filter.state.datasource) == null ? void 0 : _a.uid) === ds.uid) {\n return filter.state.filters;\n }\n }\n return [];\n }.bind(templateSrv);\n}\nfunction findActiveAdHocFilterVariableByUid(dsUid) {\n var _a;\n for (const filter of allActiveFilterSets.values()) {\n if (interpolate(filter, (_a = filter.state.datasource) == null ? void 0 : _a.uid) === dsUid) {\n return filter;\n }\n }\n return void 0;\n}\n\nexport { findActiveAdHocFilterVariableByUid, patchGetAdhocFilters };\n//# sourceMappingURL=patchGetAdhocFilters.js.map\n","import { interpolate } from '../../core/sceneGraph/sceneGraph.js';\n\nconst allActiveGroupByVariables = /* @__PURE__ */ new Set();\nfunction findActiveGroupByVariablesByUid(dsUid) {\n var _a;\n for (const groupByVariable of allActiveGroupByVariables.values()) {\n if (interpolate(groupByVariable, (_a = groupByVariable.state.datasource) == null ? void 0 : _a.uid) === dsUid) {\n return groupByVariable;\n }\n }\n return void 0;\n}\n\nexport { allActiveGroupByVariables, findActiveGroupByVariablesByUid };\n//# sourceMappingURL=findActiveGroupByVariablesByUid.js.map\n","import { valid, compare, gte } from 'semver';\n\nfunction resolveSelectors(versionedSelectors, grafanaVersion = \"latest\") {\n const version = grafanaVersion.replace(/\\-.*/, \"\");\n return resolveSelectorGroup(versionedSelectors, version);\n}\nfunction resolveSelectorGroup(group, grafanaVersion) {\n const result = {};\n for (const [key, value] of Object.entries(group)) {\n if (isVersionedSelectorGroup(value)) {\n result[key] = resolveSelectorGroup(value, grafanaVersion);\n } else {\n assertIsSemverValid(value, key);\n result[key] = resolveSelector(value, grafanaVersion);\n }\n }\n return result;\n}\nfunction isVersionedSelectorGroup(target) {\n if (typeof target === \"object\") {\n const [first] = Object.keys(target);\n return !valid(first);\n }\n return false;\n}\nfunction resolveSelector(versionedSelector, grafanaVersion) {\n let versionToUse;\n let versions = Object.keys(versionedSelector).sort(compare);\n if (grafanaVersion === \"latest\") {\n return versionedSelector[versions[versions.length - 1]];\n }\n for (const version of versions) {\n if (gte(grafanaVersion, version)) {\n versionToUse = version;\n }\n }\n if (!versionToUse) {\n versionToUse = versions[versions.length - 1];\n }\n return versionedSelector[versionToUse];\n}\nfunction assertIsSemverValid(versionedSelector, selectorName) {\n if (!Object.keys(versionedSelector).every((version) => valid(version))) {\n throw new Error(`Invalid semver version: '${selectorName}'`);\n }\n}\n\nexport { resolveSelectors };\n//# sourceMappingURL=resolver.mjs.map\n","const MIN_GRAFANA_VERSION = \"8.5.0\";\n\nexport { MIN_GRAFANA_VERSION };\n//# sourceMappingURL=constants.mjs.map\n","import { MIN_GRAFANA_VERSION } from './constants.mjs';\n\nconst versionedComponents = {\n RadioButton: {\n container: {\n \"10.2.3\": \"data-testid radio-button\"\n }\n },\n Breadcrumbs: {\n breadcrumb: {\n \"9.4.0\": (title) => `data-testid ${title} breadcrumb`\n }\n },\n TimePicker: {\n openButton: {\n [MIN_GRAFANA_VERSION]: \"data-testid TimePicker Open Button\"\n },\n overlayContent: {\n \"10.2.3\": \"data-testid TimePicker Overlay Content\"\n },\n fromField: {\n \"10.2.3\": \"data-testid Time Range from field\",\n [MIN_GRAFANA_VERSION]: \"Time Range from field\"\n },\n toField: {\n \"10.2.3\": \"data-testid Time Range to field\",\n [MIN_GRAFANA_VERSION]: \"Time Range to field\"\n },\n applyTimeRange: {\n [MIN_GRAFANA_VERSION]: \"data-testid TimePicker submit button\"\n },\n copyTimeRange: {\n \"10.4.0\": \"data-testid TimePicker copy button\"\n },\n pasteTimeRange: {\n \"10.4.0\": \"data-testid TimePicker paste button\"\n },\n calendar: {\n label: {\n \"10.2.3\": \"data-testid Time Range calendar\",\n [MIN_GRAFANA_VERSION]: \"Time Range calendar\"\n },\n openButton: {\n \"10.2.3\": \"data-testid Open time range calendar\",\n [MIN_GRAFANA_VERSION]: \"Open time range calendar\"\n },\n closeButton: {\n \"10.2.3\": \"data-testid Close time range Calendar\",\n [MIN_GRAFANA_VERSION]: \"Close time range Calendar\"\n }\n },\n absoluteTimeRangeTitle: {\n [MIN_GRAFANA_VERSION]: \"data-testid-absolute-time-range-narrow\"\n }\n },\n DataSourcePermissions: {\n form: { \"9.5.0\": () => 'form[name=\"addPermission\"]' },\n roleType: {\n \"9.5.0\": \"Role to add new permission to\"\n },\n rolePicker: {\n \"9.5.0\": \"Built-in role picker\"\n },\n permissionLevel: {\n \"9.5.0\": \"Permission Level\"\n }\n },\n DateTimePicker: {\n input: {\n \"10.2.3\": \"data-testid date-time-input\"\n }\n },\n DataSource: {\n TestData: {\n QueryTab: {\n scenarioSelectContainer: {\n [MIN_GRAFANA_VERSION]: \"Test Data Query scenario select container\"\n },\n scenarioSelect: {\n [MIN_GRAFANA_VERSION]: \"Test Data Query scenario select\"\n },\n max: {\n [MIN_GRAFANA_VERSION]: \"TestData max\"\n },\n min: {\n [MIN_GRAFANA_VERSION]: \"TestData min\"\n },\n noise: {\n [MIN_GRAFANA_VERSION]: \"TestData noise\"\n },\n seriesCount: {\n [MIN_GRAFANA_VERSION]: \"TestData series count\"\n },\n spread: {\n [MIN_GRAFANA_VERSION]: \"TestData spread\"\n },\n startValue: {\n [MIN_GRAFANA_VERSION]: \"TestData start value\"\n },\n drop: {\n [MIN_GRAFANA_VERSION]: \"TestData drop values\"\n }\n }\n },\n DataSourceHttpSettings: {\n urlInput: {\n \"10.4.0\": \"data-testid Datasource HTTP settings url\",\n [MIN_GRAFANA_VERSION]: \"Datasource HTTP settings url\"\n }\n },\n Jaeger: {\n traceIDInput: {\n [MIN_GRAFANA_VERSION]: \"Trace ID\"\n }\n },\n Prometheus: {\n configPage: {\n connectionSettings: {\n [MIN_GRAFANA_VERSION]: \"Data source connection URL\"\n // aria-label in grafana experimental\n },\n manageAlerts: {\n \"10.4.0\": \"prometheus-alerts-manager\"\n // id for switch component\n },\n scrapeInterval: {\n \"10.4.0\": \"data-testid scrape interval\"\n },\n queryTimeout: {\n \"10.4.0\": \"data-testid query timeout\"\n },\n defaultEditor: {\n \"10.4.0\": \"data-testid default editor\"\n },\n disableMetricLookup: {\n \"10.4.0\": \"disable-metric-lookup\"\n // id for switch component\n },\n prometheusType: {\n \"10.4.0\": \"data-testid prometheus type\"\n },\n prometheusVersion: {\n \"10.4.0\": \"data-testid prometheus version\"\n },\n cacheLevel: {\n \"10.4.0\": \"data-testid cache level\"\n },\n incrementalQuerying: {\n \"10.4.0\": \"prometheus-incremental-querying\"\n // id for switch component\n },\n queryOverlapWindow: {\n \"10.4.0\": \"data-testid query overlap window\"\n },\n disableRecordingRules: {\n \"10.4.0\": \"disable-recording-rules\"\n // id for switch component\n },\n customQueryParameters: {\n \"10.4.0\": \"data-testid custom query parameters\"\n },\n httpMethod: {\n \"10.4.0\": \"data-testid http method\"\n },\n exemplarsAddButton: {\n \"10.3.0\": \"data-testid Add exemplar config button\",\n [MIN_GRAFANA_VERSION]: \"Add exemplar config button\"\n },\n internalLinkSwitch: {\n \"10.3.0\": \"data-testid Internal link switch\",\n [MIN_GRAFANA_VERSION]: \"Internal link switch\"\n },\n codeModeMetricNamesSuggestionLimit: {\n \"11.1.0\": \"data-testid code mode metric names suggestion limit\"\n }\n },\n queryEditor: {\n explain: {\n \"10.4.0\": \"data-testid prometheus explain switch wrapper\"\n },\n editorToggle: {\n \"10.4.0\": \"data-testid QueryEditorModeToggle\"\n // wrapper for toggle\n },\n options: {\n \"10.4.0\": \"data-testid prometheus options\"\n // wrapper for options group\n },\n legend: {\n \"10.4.0\": \"data-testid prometheus legend wrapper\"\n // wrapper for multiple compomnents\n },\n format: {\n \"10.4.0\": \"data-testid prometheus format\"\n },\n step: {\n \"10.4.0\": \"prometheus-step\"\n // id for autosize component\n },\n type: {\n \"10.4.0\": \"data-testid prometheus type\"\n //wrapper for radio button group\n },\n exemplars: {\n \"10.4.0\": \"prometheus-exemplars\"\n // id for editor switch component\n },\n builder: {\n // see QueryBuilder below for commented selectors\n metricSelect: {\n \"10.4.0\": \"data-testid metric select\"\n },\n hints: {\n \"10.4.0\": \"data-testid prometheus hints\"\n // wrapper for hints component\n },\n metricsExplorer: {\n \"10.4.0\": \"data-testid metrics explorer\"\n },\n queryAdvisor: {\n \"10.4.0\": \"data-testid query advisor\"\n }\n },\n code: {\n queryField: {\n \"10.4.0\": \"data-testid prometheus query field\"\n },\n metricsCountInfo: {\n \"11.1.0\": \"data-testid metrics count disclaimer\"\n },\n metricsBrowser: {\n openButton: {\n \"10.4.0\": \"data-testid open metrics browser\"\n },\n selectMetric: {\n \"10.4.0\": \"data-testid select a metric\"\n },\n seriesLimit: {\n \"10.3.1\": \"data-testid series limit\"\n },\n metricList: {\n \"10.4.0\": \"data-testid metric list\"\n },\n labelNamesFilter: {\n \"10.4.0\": \"data-testid label names filter\"\n },\n labelValuesFilter: {\n \"10.4.0\": \"data-testid label values filter\"\n },\n useQuery: {\n \"10.4.0\": \"data-testid use query\"\n },\n useAsRateQuery: {\n \"10.4.0\": \"data-testid use as rate query\"\n },\n validateSelector: {\n \"10.4.0\": \"data-testid validate selector\"\n },\n clear: {\n \"10.4.0\": \"data-testid clear\"\n }\n }\n }\n },\n exemplarMarker: {\n \"10.3.0\": \"data-testid Exemplar marker\",\n [MIN_GRAFANA_VERSION]: \"Exemplar marker\"\n },\n variableQueryEditor: {\n queryType: {\n \"10.4.0\": \"data-testid query type\"\n },\n labelnames: {\n metricRegex: {\n \"10.4.0\": \"data-testid label names metric regex\"\n }\n },\n labelValues: {\n labelSelect: {\n \"10.4.0\": \"data-testid label values label select\"\n }\n },\n metricNames: {\n metricRegex: {\n \"10.4.0\": \"data-testid metric names metric regex\"\n }\n },\n varQueryResult: {\n \"10.4.0\": \"data-testid variable query result\"\n },\n seriesQuery: {\n \"10.4.0\": \"data-testid prometheus series query\"\n },\n classicQuery: {\n \"10.4.0\": \"data-testid prometheus classic query\"\n }\n },\n annotations: {\n minStep: {\n \"10.4.0\": \"prometheus-annotation-min-step\"\n // id for autosize input\n },\n title: {\n \"10.4.0\": \"data-testid prometheus annotation title\"\n },\n tags: {\n \"10.4.0\": \"data-testid prometheus annotation tags\"\n },\n text: {\n \"10.4.0\": \"data-testid prometheus annotation text\"\n },\n seriesValueAsTimestamp: {\n \"10.4.0\": \"data-testid prometheus annotation series value as timestamp\"\n }\n }\n }\n },\n Menu: {\n MenuComponent: {\n [MIN_GRAFANA_VERSION]: (title) => `${title} menu`\n },\n MenuGroup: {\n [MIN_GRAFANA_VERSION]: (title) => `${title} menu group`\n },\n MenuItem: {\n [MIN_GRAFANA_VERSION]: (title) => `${title} menu item`\n },\n SubMenu: {\n container: {\n \"10.3.0\": \"data-testid SubMenu container\",\n [MIN_GRAFANA_VERSION]: \"SubMenu container\"\n },\n icon: {\n \"10.3.0\": \"data-testid SubMenu icon\",\n [MIN_GRAFANA_VERSION]: \"SubMenu icon\"\n }\n }\n },\n Panels: {\n Panel: {\n title: {\n [MIN_GRAFANA_VERSION]: (title) => `data-testid Panel header ${title}`\n },\n content: {\n \"11.1.0\": \"data-testid panel content\"\n },\n headerItems: {\n \"10.2.0\": (item) => `data-testid Panel header item ${item}`\n },\n menuItems: {\n \"9.5.0\": (item) => `data-testid Panel menu item ${item}`\n },\n menu: {\n \"9.5.0\": (title) => `data-testid Panel menu ${title}`\n },\n containerByTitle: {\n [MIN_GRAFANA_VERSION]: (title) => `${title} panel`\n },\n headerCornerInfo: {\n [MIN_GRAFANA_VERSION]: (mode) => `Panel header ${mode}`\n },\n status: {\n \"10.2.0\": (status) => `data-testid Panel status ${status}`,\n [MIN_GRAFANA_VERSION]: (_) => \"Panel status\"\n },\n loadingBar: {\n \"10.0.0\": () => `Panel loading bar`\n },\n HoverWidget: {\n container: {\n \"10.1.0\": \"data-testid hover-header-container\",\n [MIN_GRAFANA_VERSION]: \"hover-header-container\"\n },\n dragIcon: {\n \"10.0.0\": \"data-testid drag-icon\"\n }\n },\n PanelDataErrorMessage: {\n \"10.4.0\": \"data-testid Panel data error message\"\n }\n },\n Visualization: {\n Graph: {\n container: {\n \"9.5.0\": \"Graph container\"\n },\n VisualizationTab: {\n legendSection: {\n [MIN_GRAFANA_VERSION]: \"Legend section\"\n }\n },\n Legend: {\n legendItemAlias: {\n [MIN_GRAFANA_VERSION]: (name) => `gpl alias ${name}`\n },\n showLegendSwitch: {\n [MIN_GRAFANA_VERSION]: \"gpl show legend\"\n }\n },\n xAxis: {\n labels: {\n [MIN_GRAFANA_VERSION]: () => \"div.flot-x-axis > div.flot-tick-label\"\n }\n }\n },\n BarGauge: {\n valueV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Bar gauge value\"\n }\n },\n PieChart: {\n svgSlice: {\n \"10.3.0\": \"data testid Pie Chart Slice\"\n }\n },\n Text: {\n container: { [MIN_GRAFANA_VERSION]: () => \".markdown-html\" }\n },\n Table: {\n header: {\n [MIN_GRAFANA_VERSION]: \"table header\"\n },\n footer: {\n [MIN_GRAFANA_VERSION]: \"table-footer\"\n },\n body: {\n \"10.2.0\": \"data-testid table body\"\n }\n }\n }\n },\n VizLegend: {\n seriesName: {\n \"10.3.0\": (name) => `data-testid VizLegend series ${name}`\n }\n },\n Drawer: {\n General: {\n title: {\n [MIN_GRAFANA_VERSION]: (title) => `Drawer title ${title}`\n },\n expand: {\n [MIN_GRAFANA_VERSION]: \"Drawer expand\"\n },\n contract: {\n [MIN_GRAFANA_VERSION]: \"Drawer contract\"\n },\n close: {\n \"10.3.0\": \"data-testid Drawer close\",\n [MIN_GRAFANA_VERSION]: \"Drawer close\"\n },\n rcContentWrapper: { \"9.4.0\": () => \".rc-drawer-content-wrapper\" },\n subtitle: {\n \"10.4.0\": \"data-testid drawer subtitle\"\n }\n },\n DashboardSaveDrawer: {\n saveButton: {\n \"11.1.0\": \"data-testid Save dashboard drawer button\"\n },\n saveAsButton: {\n \"11.1.0\": \"data-testid Save as dashboard drawer button\"\n },\n saveAsTitleInput: {\n \"11.1.0\": \"Save dashboard title field\"\n }\n }\n },\n PanelEditor: {\n General: {\n content: {\n \"11.1.0\": \"data-testid Panel editor content\",\n \"8.0.0\": \"Panel editor content\"\n }\n },\n OptionsPane: {\n content: {\n \"11.1.0\": \"data-testid Panel editor option pane content\",\n [MIN_GRAFANA_VERSION]: \"Panel editor option pane content\"\n },\n select: {\n [MIN_GRAFANA_VERSION]: \"Panel editor option pane select\"\n },\n fieldLabel: {\n [MIN_GRAFANA_VERSION]: (type) => `${type} field property editor`\n },\n fieldInput: {\n \"11.0.0\": (title) => `data-testid Panel editor option pane field input ${title}`\n }\n },\n DataPane: {\n content: {\n \"11.1.0\": \"data-testid Panel editor data pane content\",\n [MIN_GRAFANA_VERSION]: \"Panel editor data pane content\"\n }\n },\n applyButton: {\n \"9.2.0\": \"data-testid Apply changes and go back to dashboard\",\n \"9.1.0\": \"Apply changes and go back to dashboard\",\n \"8.0.0\": \"panel editor apply\"\n },\n toggleVizPicker: {\n \"10.0.0\": \"data-testid toggle-viz-picker\",\n \"8.0.0\": \"toggle-viz-picker\"\n },\n toggleVizOptions: {\n \"10.1.0\": \"data-testid toggle-viz-options\",\n [MIN_GRAFANA_VERSION]: \"toggle-viz-options\"\n },\n toggleTableView: {\n \"11.1.0\": \"data-testid toggle-table-view\",\n [MIN_GRAFANA_VERSION]: \"toggle-table-view\"\n },\n // [Geomap] Map controls\n showZoomField: {\n \"10.2.0\": \"Map controls Show zoom control field property editor\"\n },\n showAttributionField: {\n \"10.2.0\": \"Map controls Show attribution field property editor\"\n },\n showScaleField: {\n \"10.2.0\": \"Map controls Show scale field property editor\"\n },\n showMeasureField: {\n \"10.2.0\": \"Map controls Show measure tools field property editor\"\n },\n showDebugField: {\n \"10.2.0\": \"Map controls Show debug field property editor\"\n },\n measureButton: {\n \"9.2.0\": \"show measure tools\"\n }\n },\n PanelInspector: {\n Data: {\n content: {\n [MIN_GRAFANA_VERSION]: \"Panel inspector Data content\"\n }\n },\n Stats: {\n content: {\n [MIN_GRAFANA_VERSION]: \"Panel inspector Stats content\"\n }\n },\n Json: {\n content: {\n \"11.1.0\": \"data-testid Panel inspector Json content\",\n [MIN_GRAFANA_VERSION]: \"Panel inspector Json content\"\n }\n },\n Query: {\n content: {\n [MIN_GRAFANA_VERSION]: \"Panel inspector Query content\"\n },\n refreshButton: {\n [MIN_GRAFANA_VERSION]: \"Panel inspector Query refresh button\"\n },\n jsonObjectKeys: {\n [MIN_GRAFANA_VERSION]: () => \".json-formatter-key\"\n }\n }\n },\n Tab: {\n title: {\n \"11.2.0\": (title) => `data-testid Tab ${title}`\n },\n active: { [MIN_GRAFANA_VERSION]: () => '[class*=\"-activeTabStyle\"]' }\n },\n RefreshPicker: {\n runButtonV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid RefreshPicker run button\"\n },\n intervalButtonV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid RefreshPicker interval button\"\n }\n },\n QueryTab: {\n content: {\n [MIN_GRAFANA_VERSION]: \"Query editor tab content\"\n },\n queryInspectorButton: {\n [MIN_GRAFANA_VERSION]: \"Query inspector button\"\n },\n queryHistoryButton: {\n \"10.2.0\": \"data-testid query-history-button\",\n [MIN_GRAFANA_VERSION]: \"query-history-button\"\n },\n addQuery: {\n \"10.2.0\": \"data-testid query-tab-add-query\",\n [MIN_GRAFANA_VERSION]: \"Query editor add query button\"\n },\n queryGroupTopSection: {\n \"11.2.0\": \"data-testid query group top section\"\n },\n addExpression: {\n \"11.2.0\": \"data-testid query-tab-add-expression\"\n }\n },\n QueryHistory: {\n queryText: {\n \"9.0.0\": \"Query text\"\n }\n },\n QueryEditorRows: {\n rows: {\n [MIN_GRAFANA_VERSION]: \"Query editor row\"\n }\n },\n QueryEditorRow: {\n actionButton: {\n \"10.4.0\": (title) => `data-testid ${title}`\n },\n title: {\n [MIN_GRAFANA_VERSION]: (refId) => `Query editor row title ${refId}`\n },\n container: {\n [MIN_GRAFANA_VERSION]: (refId) => `Query editor row ${refId}`\n }\n },\n AlertTab: {\n content: {\n \"10.2.3\": \"data-testid Alert editor tab content\",\n [MIN_GRAFANA_VERSION]: \"Alert editor tab content\"\n }\n },\n AlertRules: {\n groupToggle: {\n \"11.0.0\": \"data-testid group-collapse-toggle\"\n },\n toggle: {\n \"11.0.0\": \"data-testid collapse-toggle\"\n },\n expandedContent: {\n \"11.0.0\": \"data-testid expanded-content\"\n },\n previewButton: {\n \"11.1.0\": \"data-testid alert-rule preview-button\"\n },\n ruleNameField: {\n \"11.1.0\": \"data-testid alert-rule name-field\"\n },\n newFolderButton: {\n \"11.1.0\": \"data-testid alert-rule new-folder-button\"\n },\n newFolderNameField: {\n \"11.1.0\": \"data-testid alert-rule name-folder-name-field\"\n },\n newFolderNameCreateButton: {\n \"11.1.0\": \"data-testid alert-rule name-folder-name-create-button\"\n },\n newEvaluationGroupButton: {\n \"11.1.0\": \"data-testid alert-rule new-evaluation-group-button\"\n },\n newEvaluationGroupName: {\n \"11.1.0\": \"data-testid alert-rule new-evaluation-group-name\"\n },\n newEvaluationGroupInterval: {\n \"11.1.0\": \"data-testid alert-rule new-evaluation-group-interval\"\n },\n newEvaluationGroupCreate: {\n \"11.1.0\": \"data-testid alert-rule new-evaluation-group-create-button\"\n },\n step: {\n \"11.5.0\": (stepNo) => `data-testid alert-rule step-${stepNo}`\n },\n stepAdvancedModeSwitch: {\n \"11.5.0\": (stepNo) => `data-testid advanced-mode-switch step-${stepNo}`\n }\n },\n Alert: {\n alertV2: {\n [MIN_GRAFANA_VERSION]: (severity) => `data-testid Alert ${severity}`\n }\n },\n TransformTab: {\n content: {\n \"10.1.0\": \"data-testid Transform editor tab content\",\n [MIN_GRAFANA_VERSION]: \"Transform editor tab content\"\n },\n newTransform: {\n \"10.1.0\": (name) => `data-testid New transform ${name}`\n },\n transformationEditor: {\n \"10.1.0\": (name) => `data-testid Transformation editor ${name}`\n },\n transformationEditorDebugger: {\n \"10.1.0\": (name) => `data-testid Transformation editor debugger ${name}`\n }\n },\n Transforms: {\n card: {\n \"10.1.0\": (name) => `data-testid New transform ${name}`\n },\n disableTransformationButton: {\n \"10.4.0\": \"data-testid Disable transformation button\"\n },\n Reduce: {\n modeLabel: {\n \"10.2.3\": \"data-testid Transform mode label\",\n [MIN_GRAFANA_VERSION]: \"Transform mode label\"\n },\n calculationsLabel: {\n \"10.2.3\": \"data-testid Transform calculations label\",\n [MIN_GRAFANA_VERSION]: \"Transform calculations label\"\n }\n },\n SpatialOperations: {\n actionLabel: {\n \"9.1.2\": \"root Action field property editor\"\n },\n locationLabel: {\n \"10.2.0\": \"root Location Mode field property editor\"\n },\n location: {\n autoOption: {\n \"9.1.2\": \"Auto location option\"\n },\n coords: {\n option: {\n \"9.1.2\": \"Coords location option\"\n },\n latitudeFieldLabel: {\n \"9.1.2\": \"root Latitude field field property editor\"\n },\n longitudeFieldLabel: {\n \"9.1.2\": \"root Longitude field field property editor\"\n }\n },\n geohash: {\n option: {\n \"9.1.2\": \"Geohash location option\"\n },\n geohashFieldLabel: {\n \"9.1.2\": \"root Geohash field field property editor\"\n }\n },\n lookup: {\n option: {\n \"9.1.2\": \"Lookup location option\"\n },\n lookupFieldLabel: {\n \"9.1.2\": \"root Lookup field field property editor\"\n },\n gazetteerFieldLabel: {\n \"9.1.2\": \"root Gazetteer field property editor\"\n }\n }\n }\n },\n searchInput: {\n \"10.2.3\": \"data-testid search transformations\",\n [MIN_GRAFANA_VERSION]: \"search transformations\"\n },\n noTransformationsMessage: {\n \"10.2.3\": \"data-testid no transformations message\"\n },\n addTransformationButton: {\n \"10.1.0\": \"data-testid add transformation button\",\n [MIN_GRAFANA_VERSION]: \"add transformation button\"\n },\n removeAllTransformationsButton: {\n \"10.4.0\": \"data-testid remove all transformations button\"\n }\n },\n NavBar: {\n Configuration: {\n button: {\n \"9.5.0\": \"Configuration\"\n }\n },\n Toggle: {\n button: {\n \"10.2.3\": \"data-testid Toggle menu\",\n [MIN_GRAFANA_VERSION]: \"Toggle menu\"\n }\n },\n Reporting: {\n button: {\n \"9.5.0\": \"Reporting\"\n }\n }\n },\n NavMenu: {\n Menu: {\n \"10.2.3\": \"data-testid navigation mega-menu\"\n },\n item: {\n \"9.5.0\": \"data-testid Nav menu item\"\n }\n },\n NavToolbar: {\n container: {\n \"9.4.0\": \"data-testid Nav toolbar\"\n },\n commandPaletteTrigger: {\n \"11.5.0\": \"data-testid Command palette trigger\"\n },\n shareDashboard: {\n \"11.1.0\": \"data-testid Share dashboard\"\n },\n markAsFavorite: {\n \"11.1.0\": \"data-testid Mark as favorite\"\n },\n editDashboard: {\n editButton: {\n \"11.1.0\": \"data-testid Edit dashboard button\"\n },\n saveButton: {\n \"11.1.0\": \"data-testid Save dashboard button\"\n },\n exitButton: {\n \"11.1.0\": \"data-testid Exit edit mode button\"\n },\n settingsButton: {\n \"11.1.0\": \"data-testid Dashboard settings\"\n },\n addRowButton: {\n \"11.1.0\": \"data-testid Add row button\"\n },\n addLibraryPanelButton: {\n \"11.1.0\": \"data-testid Add a panel from the panel library button\"\n },\n addVisualizationButton: {\n \"11.1.0\": \"data-testid Add new visualization menu item\"\n },\n pastePanelButton: {\n \"11.1.0\": \"data-testid Paste panel button\"\n },\n discardChangesButton: {\n \"11.1.0\": \"data-testid Discard changes button\"\n },\n discardLibraryPanelButton: {\n \"11.1.0\": \"data-testid Discard library panel button\"\n },\n unlinkLibraryPanelButton: {\n \"11.1.0\": \"data-testid Unlink library panel button\"\n },\n saveLibraryPanelButton: {\n \"11.1.0\": \"data-testid Save library panel button\"\n },\n backToDashboardButton: {\n \"11.1.0\": \"data-testid Back to dashboard button\"\n }\n }\n },\n PageToolbar: {\n container: { [MIN_GRAFANA_VERSION]: () => \".page-toolbar\" },\n item: {\n [MIN_GRAFANA_VERSION]: (tooltip) => `${tooltip}`\n },\n itemButton: {\n \"9.5.0\": (title) => `data-testid ${title}`\n }\n },\n QueryEditorToolbarItem: {\n button: {\n [MIN_GRAFANA_VERSION]: (title) => `QueryEditor toolbar item button ${title}`\n }\n },\n BackButton: {\n backArrow: {\n \"10.3.0\": \"data-testid Go Back\",\n [MIN_GRAFANA_VERSION]: \"Go Back\"\n }\n },\n OptionsGroup: {\n group: {\n \"11.1.0\": (title) => title ? `data-testid Options group ${title}` : \"data-testid Options group\",\n [MIN_GRAFANA_VERSION]: (title) => title ? `Options group ${title}` : \"Options group\"\n },\n toggle: {\n \"11.1.0\": (title) => title ? `data-testid Options group ${title} toggle` : \"data-testid Options group toggle\",\n [MIN_GRAFANA_VERSION]: (title) => title ? `Options group ${title} toggle` : \"Options group toggle\"\n }\n },\n PluginVisualization: {\n item: {\n [MIN_GRAFANA_VERSION]: (title) => `Plugin visualization item ${title}`\n },\n current: {\n [MIN_GRAFANA_VERSION]: () => '[class*=\"-currentVisualizationItem\"]'\n }\n },\n Select: {\n menu: {\n \"11.5.0\": \"data-testid Select menu\",\n [MIN_GRAFANA_VERSION]: \"Select options menu\"\n },\n option: {\n \"11.1.0\": \"data-testid Select option\",\n [MIN_GRAFANA_VERSION]: \"Select option\"\n },\n toggleAllOptions: {\n \"11.3.0\": \"data-testid toggle all options\"\n },\n input: {\n [MIN_GRAFANA_VERSION]: () => 'input[id*=\"time-options-input\"]'\n },\n singleValue: {\n [MIN_GRAFANA_VERSION]: () => 'div[class*=\"-singleValue\"]'\n }\n },\n FieldConfigEditor: {\n content: {\n [MIN_GRAFANA_VERSION]: \"Field config editor content\"\n }\n },\n OverridesConfigEditor: {\n content: {\n [MIN_GRAFANA_VERSION]: \"Field overrides editor content\"\n }\n },\n FolderPicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Folder picker select container\"\n },\n input: {\n \"10.4.0\": \"data-testid folder-picker-input\"\n }\n },\n ReadonlyFolderPicker: {\n container: {\n [MIN_GRAFANA_VERSION]: \"data-testid Readonly folder picker select container\"\n }\n },\n DataSourcePicker: {\n container: {\n \"10.0.0\": \"data-testid Data source picker select container\",\n \"8.0.0\": \"Data source picker select container\"\n },\n inputV2: {\n \"10.1.0\": \"data-testid Select a data source\",\n [MIN_GRAFANA_VERSION]: \"Select a data source\"\n },\n dataSourceList: {\n \"10.4.0\": \"data-testid Data source list dropdown\"\n },\n advancedModal: {\n dataSourceList: {\n \"10.4.0\": \"data-testid Data source list\"\n },\n builtInDataSourceList: {\n \"10.4.0\": \"data-testid Built in data source list\"\n }\n }\n },\n TimeZonePicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Time zone picker select container\"\n },\n changeTimeSettingsButton: {\n \"11.0.0\": \"data-testid Time zone picker Change time settings button\"\n }\n },\n WeekStartPicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Choose starting day of the week\"\n },\n placeholder: {\n [MIN_GRAFANA_VERSION]: \"Choose starting day of the week\"\n }\n },\n TraceViewer: {\n spanBar: {\n \"9.0.0\": \"data-testid SpanBar--wrapper\"\n }\n },\n QueryField: {\n container: {\n \"10.3.0\": \"data-testid Query field\",\n [MIN_GRAFANA_VERSION]: \"Query field\"\n }\n },\n QueryBuilder: {\n queryPatterns: {\n \"10.3.0\": \"data-testid Query patterns\",\n [MIN_GRAFANA_VERSION]: \"Query patterns\"\n },\n labelSelect: {\n \"10.3.0\": \"data-testid Select label\",\n [MIN_GRAFANA_VERSION]: \"Select label\"\n },\n inputSelect: {\n \"11.1.0\": \"data-testid Select label-input\"\n },\n valueSelect: {\n \"10.3.0\": \"data-testid Select value\",\n [MIN_GRAFANA_VERSION]: \"Select value\"\n },\n matchOperatorSelect: {\n \"10.3.0\": \"data-testid Select match operator\",\n [MIN_GRAFANA_VERSION]: \"Select match operator\"\n }\n },\n ValuePicker: {\n button: {\n \"10.3.0\": (name) => `data-testid Value picker button ${name}`\n },\n select: {\n \"10.3.0\": (name) => `data-testid Value picker select ${name}`\n }\n },\n Search: {\n sectionV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Search section\"\n },\n itemsV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Search items\"\n },\n cards: {\n [MIN_GRAFANA_VERSION]: \"data-testid Search cards\"\n },\n collapseFolder: {\n [MIN_GRAFANA_VERSION]: (sectionId) => `data-testid Collapse folder ${sectionId}`\n },\n expandFolder: {\n [MIN_GRAFANA_VERSION]: (sectionId) => `data-testid Expand folder ${sectionId}`\n },\n dashboardItem: {\n [MIN_GRAFANA_VERSION]: (item) => `data-testid Dashboard search item ${item}`\n },\n dashboardCard: {\n [MIN_GRAFANA_VERSION]: (item) => `data-testid Search card ${item}`\n },\n folderHeader: {\n \"9.3.0\": (folderName) => `data-testid Folder header ${folderName}`\n },\n folderContent: {\n \"9.3.0\": (folderName) => `data-testid Folder content ${folderName}`\n },\n dashboardItems: {\n [MIN_GRAFANA_VERSION]: \"data-testid Dashboard search item\"\n }\n },\n DashboardLinks: {\n container: {\n [MIN_GRAFANA_VERSION]: \"data-testid Dashboard link container\"\n },\n dropDown: {\n [MIN_GRAFANA_VERSION]: \"data-testid Dashboard link dropdown\"\n },\n link: {\n [MIN_GRAFANA_VERSION]: \"data-testid Dashboard link\"\n }\n },\n LoadingIndicator: {\n icon: {\n \"10.4.0\": \"data-testid Loading indicator\",\n [MIN_GRAFANA_VERSION]: \"Loading indicator\"\n }\n },\n CallToActionCard: {\n buttonV2: {\n [MIN_GRAFANA_VERSION]: (name) => `data-testid Call to action button ${name}`\n }\n },\n DataLinksContextMenu: {\n singleLink: {\n \"10.3.0\": \"data-testid Data link\",\n [MIN_GRAFANA_VERSION]: \"Data link\"\n }\n },\n CodeEditor: {\n container: {\n \"10.2.3\": \"data-testid Code editor container\",\n [MIN_GRAFANA_VERSION]: \"Code editor container\"\n }\n },\n ReactMonacoEditor: {\n editorLazy: {\n \"11.1.0\": \"data-testid ReactMonacoEditor editorLazy\"\n }\n },\n DashboardImportPage: {\n textarea: {\n [MIN_GRAFANA_VERSION]: \"data-testid-import-dashboard-textarea\"\n },\n submit: {\n [MIN_GRAFANA_VERSION]: \"data-testid-load-dashboard\"\n }\n },\n ImportDashboardForm: {\n name: {\n [MIN_GRAFANA_VERSION]: \"data-testid-import-dashboard-title\"\n },\n submit: {\n [MIN_GRAFANA_VERSION]: \"data-testid-import-dashboard-submit\"\n }\n },\n PanelAlertTabContent: {\n content: {\n \"10.2.3\": \"data-testid Unified alert editor tab content\",\n [MIN_GRAFANA_VERSION]: \"Unified alert editor tab content\"\n }\n },\n VisualizationPreview: {\n card: {\n [MIN_GRAFANA_VERSION]: (name) => `data-testid suggestion-${name}`\n }\n },\n ColorSwatch: {\n name: {\n [MIN_GRAFANA_VERSION]: \"data-testid-colorswatch\"\n }\n },\n DashboardRow: {\n title: {\n [MIN_GRAFANA_VERSION]: (title) => `data-testid dashboard-row-title-${title}`\n }\n },\n UserProfile: {\n profileSaveButton: {\n [MIN_GRAFANA_VERSION]: \"data-testid-user-profile-save\"\n },\n preferencesSaveButton: {\n [MIN_GRAFANA_VERSION]: \"data-testid-shared-prefs-save\"\n },\n orgsTable: {\n [MIN_GRAFANA_VERSION]: \"data-testid-user-orgs-table\"\n },\n sessionsTable: {\n [MIN_GRAFANA_VERSION]: \"data-testid-user-sessions-table\"\n },\n extensionPointTabs: {\n \"10.2.3\": \"data-testid-extension-point-tabs\"\n },\n extensionPointTab: {\n \"10.2.3\": (tabId) => `data-testid-extension-point-tab-${tabId}`\n }\n },\n FileUpload: {\n inputField: {\n \"9.0.0\": \"data-testid-file-upload-input-field\"\n },\n fileNameSpan: {\n \"9.0.0\": \"data-testid-file-upload-file-name\"\n }\n },\n DebugOverlay: {\n wrapper: {\n \"9.2.0\": \"debug-overlay\"\n }\n },\n OrgRolePicker: {\n input: {\n \"9.5.0\": \"Role\"\n }\n },\n AnalyticsToolbarButton: {\n button: {\n \"9.5.0\": \"Dashboard insights\"\n }\n },\n Variables: {\n variableOption: {\n \"9.5.0\": \"data-testid variable-option\"\n },\n variableLinkWrapper: {\n \"11.1.1\": \"data-testid variable-link-wrapper\"\n }\n },\n Annotations: {\n annotationsTypeInput: {\n \"11.1.0\": \"data-testid annotations-type-input\",\n [MIN_GRAFANA_VERSION]: \"annotations-type-input\"\n },\n annotationsChoosePanelInput: {\n \"11.1.0\": \"data-testid choose-panels-input\",\n [MIN_GRAFANA_VERSION]: \"choose-panels-input\"\n },\n editor: {\n testButton: {\n \"11.0.0\": \"data-testid annotations-test-button\"\n },\n resultContainer: {\n \"11.0.0\": \"data-testid annotations-query-result-container\"\n }\n }\n },\n Tooltip: {\n container: {\n \"10.2.0\": \"data-testid tooltip\"\n }\n },\n ReturnToPrevious: {\n buttonGroup: {\n \"11.0.0\": \"data-testid dismissable button group\"\n },\n backButton: {\n \"11.0.0\": \"data-testid back\"\n },\n dismissButton: {\n \"11.0.0\": \"data-testid dismiss\"\n }\n },\n SQLQueryEditor: {\n selectColumn: {\n \"11.0.0\": \"data-testid select-column\"\n },\n selectColumnInput: { \"11.0.0\": \"data-testid select-column-input\" },\n selectFunctionParameter: { \"11.0.0\": (name) => `data-testid select-function-parameter-${name}` },\n selectAggregation: {\n \"11.0.0\": \"data-testid select-aggregation\"\n },\n selectAggregationInput: { \"11.0.0\": \"data-testid select-aggregation-input\" },\n selectAlias: {\n \"11.0.0\": \"data-testid select-alias\"\n },\n selectAliasInput: { \"11.0.0\": \"data-testid select-alias-input\" },\n selectInputParameter: { \"11.0.0\": \"data-testid select-input-parameter\" },\n filterConjunction: {\n \"11.0.0\": \"data-testid filter-conjunction\"\n },\n filterField: {\n \"11.0.0\": \"data-testid filter-field\"\n },\n filterOperator: {\n \"11.0.0\": \"data-testid filter-operator\"\n },\n headerTableSelector: {\n \"11.0.0\": \"data-testid header-table-selector\"\n },\n headerFilterSwitch: {\n \"11.0.0\": \"data-testid header-filter-switch\"\n },\n headerGroupSwitch: {\n \"11.0.0\": \"data-testid header-group-switch\"\n },\n headerOrderSwitch: {\n \"11.0.0\": \"data-testid header-order-switch\"\n },\n headerPreviewSwitch: {\n \"11.0.0\": \"data-testid header-preview-switch\"\n }\n },\n EntityNotFound: {\n container: {\n \"11.2.0\": \"data-testid entity-not-found\"\n }\n },\n Portal: {\n container: {\n \"11.5.0\": \"data-testid portal-container\"\n }\n }\n};\n\nexport { versionedComponents };\n//# sourceMappingURL=components.mjs.map\n","import { resolveSelectors } from '../resolver.mjs';\nimport { versionedComponents } from './components.mjs';\nimport { versionedPages } from './pages.mjs';\n\nconst Pages = resolveSelectors(versionedPages);\nconst Components = resolveSelectors(versionedComponents);\nconst selectors = { pages: Pages, components: Components };\n\nexport { Components, Pages, resolveSelectors, selectors, versionedComponents, versionedPages };\n//# sourceMappingURL=index.mjs.map\n","import { MIN_GRAFANA_VERSION } from './constants.mjs';\n\nconst versionedPages = {\n Alerting: {\n AddAlertRule: {\n url: {\n \"10.1.0\": \"/alerting/new/alerting\",\n [MIN_GRAFANA_VERSION]: \"/alerting/new\"\n }\n },\n EditAlertRule: {\n url: {\n [MIN_GRAFANA_VERSION]: (alertRuleUid) => `alerting/${alertRuleUid}/edit`\n }\n }\n },\n Login: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/login\"\n },\n username: {\n \"10.2.3\": \"data-testid Username input field\",\n [MIN_GRAFANA_VERSION]: \"Username input field\"\n },\n password: {\n \"10.2.3\": \"data-testid Password input field\",\n [MIN_GRAFANA_VERSION]: \"Password input field\"\n },\n submit: {\n \"10.2.3\": \"data-testid Login button\",\n [MIN_GRAFANA_VERSION]: \"Login button\"\n },\n skip: {\n \"10.2.3\": \"data-testid Skip change password button\"\n }\n },\n PasswordlessLogin: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/login/passwordless/authenticate\"\n },\n email: {\n \"10.2.3\": \"data-testid Email input field\",\n [MIN_GRAFANA_VERSION]: \"Email input field\"\n },\n submit: {\n \"10.2.3\": \"data-testid PasswordlessLogin button\",\n [MIN_GRAFANA_VERSION]: \"PasswordlessLogin button\"\n }\n },\n Home: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/\"\n }\n },\n DataSource: {\n name: {\n \"10.3.0\": \"data-testid Data source settings page name input field\",\n [MIN_GRAFANA_VERSION]: \"Data source settings page name input field\"\n },\n delete: {\n [MIN_GRAFANA_VERSION]: \"Data source settings page Delete button\"\n },\n readOnly: {\n \"10.3.0\": \"data-testid Data source settings page read only message\",\n [MIN_GRAFANA_VERSION]: \"Data source settings page read only message\"\n },\n saveAndTest: {\n \"10.0.0\": \"data-testid Data source settings page Save and Test button\",\n [MIN_GRAFANA_VERSION]: \"Data source settings page Save and Test button\"\n },\n alert: {\n \"10.3.0\": \"data-testid Data source settings page Alert\",\n [MIN_GRAFANA_VERSION]: \"Data source settings page Alert\"\n }\n },\n DataSources: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/datasources\"\n },\n dataSources: {\n [MIN_GRAFANA_VERSION]: (dataSourceName) => `Data source list item ${dataSourceName}`\n }\n },\n EditDataSource: {\n url: {\n \"9.5.0\": (dataSourceUid) => `/datasources/edit/${dataSourceUid}`\n },\n settings: {\n \"9.5.0\": \"Datasource settings page basic settings\"\n }\n },\n AddDataSource: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/datasources/new\"\n },\n dataSourcePluginsV2: {\n \"9.3.1\": (pluginName) => `Add new data source ${pluginName}`,\n [MIN_GRAFANA_VERSION]: (pluginName) => `Data source plugin item ${pluginName}`\n }\n },\n ConfirmModal: {\n delete: {\n \"10.0.0\": \"data-testid Confirm Modal Danger Button\",\n [MIN_GRAFANA_VERSION]: \"Confirm Modal Danger Button\"\n }\n },\n AddDashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/dashboard/new\"\n },\n itemButton: {\n \"9.5.0\": (title) => `data-testid ${title}`\n },\n addNewPanel: {\n \"11.1.0\": \"data-testid Add new panel\",\n \"8.0.0\": \"Add new panel\",\n [MIN_GRAFANA_VERSION]: \"Add new panel\"\n },\n itemButtonAddViz: {\n [MIN_GRAFANA_VERSION]: \"Add new visualization menu item\"\n },\n addNewRow: {\n \"11.1.0\": \"data-testid Add new row\",\n [MIN_GRAFANA_VERSION]: \"Add new row\"\n },\n addNewPanelLibrary: {\n \"11.1.0\": \"data-testid Add new panel from panel library\",\n [MIN_GRAFANA_VERSION]: \"Add new panel from panel library\"\n },\n Settings: {\n Annotations: {\n List: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/dashboard/new?orgId=1&editview=annotations\"\n }\n },\n Edit: {\n url: {\n [MIN_GRAFANA_VERSION]: (annotationIndex) => `/dashboard/new?editview=annotations&editIndex=${annotationIndex}`\n }\n }\n },\n Variables: {\n List: {\n url: {\n \"11.3.0\": \"/dashboard/new?orgId=1&editview=variables\",\n [MIN_GRAFANA_VERSION]: \"/dashboard/new?orgId=1&editview=templating\"\n }\n },\n Edit: {\n url: {\n \"11.3.0\": (editIndex) => `/dashboard/new?orgId=1&editview=variables&editIndex=${editIndex}`,\n [MIN_GRAFANA_VERSION]: (editIndex) => `/dashboard/new?orgId=1&editview=templating&editIndex=${editIndex}`\n }\n }\n }\n }\n },\n Dashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: (uid) => `/d/${uid}`\n },\n DashNav: {\n nav: {\n [MIN_GRAFANA_VERSION]: \"Dashboard navigation\"\n },\n navV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Dashboard navigation\"\n },\n publicDashboardTag: {\n \"9.1.0\": \"data-testid public dashboard tag\"\n },\n shareButton: {\n \"10.4.0\": \"data-testid share-button\"\n },\n scrollContainer: {\n \"11.1.0\": \"data-testid Dashboard canvas scroll container\"\n },\n newShareButton: {\n container: {\n \"11.1.0\": \"data-testid new share button\"\n },\n shareLink: {\n \"11.1.0\": \"data-testid new share link-button\"\n },\n arrowMenu: {\n \"11.1.0\": \"data-testid new share button arrow menu\"\n },\n menu: {\n container: {\n \"11.1.0\": \"data-testid new share button menu\"\n },\n shareInternally: {\n \"11.1.0\": \"data-testid new share button share internally\"\n },\n shareExternally: {\n \"11.1.1\": \"data-testid new share button share externally\"\n },\n shareSnapshot: {\n \"11.2.0\": \"data-testid new share button share snapshot\"\n }\n }\n },\n NewExportButton: {\n container: {\n \"11.2.0\": \"data-testid new export button\"\n },\n arrowMenu: {\n \"11.2.0\": \"data-testid new export button arrow menu\"\n },\n Menu: {\n container: {\n \"11.2.0\": \"data-testid new export button menu\"\n },\n exportAsJson: {\n \"11.2.0\": \"data-testid new export button export as json\"\n }\n }\n },\n playlistControls: {\n prev: {\n \"11.0.0\": \"data-testid playlist previous dashboard button\"\n },\n stop: {\n \"11.0.0\": \"data-testid playlist stop dashboard button\"\n },\n next: {\n \"11.0.0\": \"data-testid playlist next dashboard button\"\n }\n }\n },\n Controls: {\n \"11.1.0\": \"data-testid dashboard controls\"\n },\n SubMenu: {\n submenu: {\n [MIN_GRAFANA_VERSION]: \"Dashboard submenu\"\n },\n submenuItem: {\n [MIN_GRAFANA_VERSION]: \"data-testid template variable\"\n },\n submenuItemLabels: {\n [MIN_GRAFANA_VERSION]: (item) => `data-testid Dashboard template variables submenu Label ${item}`\n },\n submenuItemValueDropDownValueLinkTexts: {\n [MIN_GRAFANA_VERSION]: (item) => `data-testid Dashboard template variables Variable Value DropDown value link text ${item}`\n },\n submenuItemValueDropDownDropDown: {\n [MIN_GRAFANA_VERSION]: \"Variable options\"\n },\n submenuItemValueDropDownOptionTexts: {\n [MIN_GRAFANA_VERSION]: (item) => `data-testid Dashboard template variables Variable Value DropDown option text ${item}`\n },\n Annotations: {\n annotationsWrapper: {\n \"10.0.0\": \"data-testid annotation-wrapper\"\n },\n annotationLabel: {\n \"10.0.0\": (label) => `data-testid Dashboard annotations submenu Label ${label}`\n },\n annotationToggle: {\n \"10.0.0\": (label) => `data-testid Dashboard annotations submenu Toggle ${label}`\n }\n }\n },\n Settings: {\n Actions: {\n close: {\n \"9.5.0\": \"data-testid dashboard-settings-close\"\n }\n },\n General: {\n deleteDashBoard: {\n \"11.1.0\": \"data-testid Dashboard settings page delete dashboard button\"\n },\n sectionItems: {\n [MIN_GRAFANA_VERSION]: (item) => `Dashboard settings section item ${item}`\n },\n saveDashBoard: {\n [MIN_GRAFANA_VERSION]: \"Dashboard settings aside actions Save button\"\n },\n saveAsDashBoard: {\n [MIN_GRAFANA_VERSION]: \"Dashboard settings aside actions Save As button\"\n },\n title: {\n \"11.2.0\": \"General\"\n }\n },\n Annotations: {\n Edit: {\n urlParams: {\n [MIN_GRAFANA_VERSION]: (annotationIndex) => `editview=annotations&editIndex=${annotationIndex}`\n }\n },\n List: {\n url: {\n [MIN_GRAFANA_VERSION]: (dashboardUid) => `/d/${dashboardUid}?editview=annotations`\n },\n addAnnotationCTAV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Call to action button Add annotation query\"\n },\n annotations: {\n \"10.4.0\": \"data-testid list-annotations\"\n }\n },\n Settings: {\n name: {\n \"11.1.0\": \"data-testid Annotations settings name input\",\n [MIN_GRAFANA_VERSION]: \"Annotations settings name input\"\n }\n },\n NewAnnotation: {\n panelFilterSelect: {\n \"10.0.0\": \"data-testid annotations-panel-filter\"\n },\n showInLabel: {\n \"11.1.0\": \"data-testid show-in-label\"\n },\n previewInDashboard: {\n \"10.0.0\": \"data-testid annotations-preview\"\n },\n delete: {\n \"10.4.0\": \"data-testid annotations-delete\"\n },\n apply: {\n \"10.4.0\": \"data-testid annotations-apply\"\n },\n enable: {\n \"10.4.0\": \"data-testid annotation-enable\"\n },\n hide: {\n \"10.4.0\": \"data-testid annotation-hide\"\n }\n }\n },\n Variables: {\n List: {\n url: {\n \"11.3.0\": (dashboardUid) => `/d/${dashboardUid}?editview=variables`,\n [MIN_GRAFANA_VERSION]: (dashboardUid) => `/d/${dashboardUid}?editview=templating`\n },\n addVariableCTAV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Call to action button Add variable\"\n },\n newButton: {\n [MIN_GRAFANA_VERSION]: \"Variable editor New variable button\"\n },\n table: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Table\"\n },\n tableRowNameFields: {\n [MIN_GRAFANA_VERSION]: (variableName) => `Variable editor Table Name field ${variableName}`\n },\n tableRowDefinitionFields: {\n \"10.1.0\": (variableName) => `Variable editor Table Definition field ${variableName}`\n },\n tableRowArrowUpButtons: {\n [MIN_GRAFANA_VERSION]: (variableName) => `Variable editor Table ArrowUp button ${variableName}`\n },\n tableRowArrowDownButtons: {\n [MIN_GRAFANA_VERSION]: (variableName) => `Variable editor Table ArrowDown button ${variableName}`\n },\n tableRowDuplicateButtons: {\n [MIN_GRAFANA_VERSION]: (variableName) => `Variable editor Table Duplicate button ${variableName}`\n },\n tableRowRemoveButtons: {\n [MIN_GRAFANA_VERSION]: (variableName) => `Variable editor Table Remove button ${variableName}`\n }\n },\n Edit: {\n urlParams: {\n \"11.3.0\": (editIndex) => `editview=variables&editIndex=${editIndex}`,\n [MIN_GRAFANA_VERSION]: (editIndex) => `editview=templating&editIndex=${editIndex}`\n },\n General: {\n headerLink: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Header link\"\n },\n modeLabelNew: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Header mode New\"\n },\n /**\n * @deprecated\n */\n modeLabelEdit: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Header mode Edit\"\n },\n generalNameInput: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Name field\"\n },\n generalNameInputV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Name field\"\n },\n generalTypeSelect: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Type select\"\n },\n generalTypeSelectV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Type select\"\n },\n generalLabelInput: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Label field\"\n },\n generalLabelInputV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Label field\"\n },\n generalHideSelect: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Hide select\"\n },\n generalHideSelectV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Hide select\"\n },\n selectionOptionsAllowCustomValueSwitch: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Allow Custom Value switch\"\n },\n selectionOptionsMultiSwitch: {\n \"10.4.0\": \"data-testid Variable editor Form Multi switch\",\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Multi switch\"\n },\n selectionOptionsIncludeAllSwitch: {\n \"10.4.0\": \"data-testid Variable editor Form IncludeAll switch\",\n [MIN_GRAFANA_VERSION]: \"Variable editor Form IncludeAll switch\"\n },\n selectionOptionsCustomAllInput: {\n \"10.4.0\": \"data-testid Variable editor Form IncludeAll field\",\n [MIN_GRAFANA_VERSION]: \"Variable editor Form IncludeAll field\"\n },\n previewOfValuesOption: {\n \"10.4.0\": \"data-testid Variable editor Preview of Values option\",\n [MIN_GRAFANA_VERSION]: \"Variable editor Preview of Values option\"\n },\n submitButton: {\n \"10.4.0\": \"data-testid Variable editor Run Query button\",\n [MIN_GRAFANA_VERSION]: \"Variable editor Submit button\"\n },\n applyButton: {\n \"9.3.0\": \"data-testid Variable editor Apply button\"\n }\n },\n QueryVariable: {\n queryOptionsDataSourceSelect: {\n \"10.4.0\": \"data-testid Select a data source\",\n \"10.0.0\": \"data-testid Data source picker select container\",\n [MIN_GRAFANA_VERSION]: \"Data source picker select container\"\n },\n queryOptionsRefreshSelect: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Query Refresh select\"\n },\n queryOptionsRefreshSelectV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Query Refresh select\"\n },\n queryOptionsRegExInput: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Query RegEx field\"\n },\n queryOptionsRegExInputV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Query RegEx field\"\n },\n queryOptionsSortSelect: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Query Sort select\"\n },\n queryOptionsSortSelectV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Query Sort select\"\n },\n queryOptionsQueryInput: {\n \"10.4.0\": \"data-testid Variable editor Form Default Variable Query Editor textarea\"\n },\n valueGroupsTagsEnabledSwitch: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Query UseTags switch\"\n },\n valueGroupsTagsTagsQueryInput: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Query TagsQuery field\"\n },\n valueGroupsTagsTagsValuesQueryInput: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Query TagsValuesQuery field\"\n }\n },\n ConstantVariable: {\n constantOptionsQueryInput: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form Constant Query field\"\n },\n constantOptionsQueryInputV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form Constant Query field\"\n }\n },\n DatasourceVariable: {\n datasourceSelect: {\n [MIN_GRAFANA_VERSION]: \"data-testid datasource variable datasource type\"\n }\n },\n TextBoxVariable: {\n textBoxOptionsQueryInput: {\n [MIN_GRAFANA_VERSION]: \"Variable editor Form TextBox Query field\"\n },\n textBoxOptionsQueryInputV2: {\n [MIN_GRAFANA_VERSION]: \"data-testid Variable editor Form TextBox Query field\"\n }\n },\n CustomVariable: {\n customValueInput: {\n [MIN_GRAFANA_VERSION]: \"data-testid custom-variable-input\"\n }\n },\n IntervalVariable: {\n intervalsValueInput: {\n [MIN_GRAFANA_VERSION]: \"data-testid interval variable intervals input\"\n },\n autoEnabledCheckbox: {\n \"10.4.0\": \"data-testid interval variable auto value checkbox\"\n },\n stepCountIntervalSelect: {\n \"10.4.0\": \"data-testid interval variable step count input\"\n },\n minIntervalInput: {\n \"10.4.0\": \"data-testid interval variable mininum interval input\"\n }\n },\n GroupByVariable: {\n dataSourceSelect: {\n \"10.4.0\": \"data-testid Select a data source\"\n },\n infoText: {\n \"10.4.0\": \"data-testid group by variable info text\"\n },\n modeToggle: {\n \"10.4.0\": \"data-testid group by variable mode toggle\"\n }\n },\n AdHocFiltersVariable: {\n datasourceSelect: {\n \"10.4.0\": \"data-testid Select a data source\"\n },\n infoText: {\n \"10.4.0\": \"data-testid ad-hoc filters variable info text\"\n },\n modeToggle: {\n \"11.0.0\": \"data-testid ad-hoc filters variable mode toggle\"\n }\n }\n }\n }\n },\n Annotations: {\n marker: {\n \"10.0.0\": \"data-testid annotation-marker\"\n }\n },\n Rows: {\n Repeated: {\n ConfigSection: {\n warningMessage: {\n \"10.2.0\": \"data-testid Repeated rows warning message\"\n }\n }\n }\n }\n },\n Dashboards: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/dashboards\"\n },\n dashboards: {\n \"10.2.0\": (title) => `Dashboard search item ${title}`\n }\n },\n SaveDashboardAsModal: {\n newName: {\n \"10.2.0\": \"Save dashboard title field\"\n },\n save: {\n \"10.2.0\": \"Save dashboard button\"\n }\n },\n SaveDashboardModal: {\n save: {\n \"10.2.0\": \"Dashboard settings Save Dashboard Modal Save button\"\n },\n saveVariables: {\n \"10.2.0\": \"Dashboard settings Save Dashboard Modal Save variables checkbox\"\n },\n saveTimerange: {\n \"10.2.0\": \"Dashboard settings Save Dashboard Modal Save timerange checkbox\"\n },\n saveRefresh: {\n \"11.1.0\": \"Dashboard settings Save Dashboard Modal Save refresh checkbox\"\n }\n },\n SharePanelModal: {\n linkToRenderedImage: {\n [MIN_GRAFANA_VERSION]: \"Link to rendered image\"\n }\n },\n ShareDashboardModal: {\n PublicDashboard: {\n WillBePublicCheckbox: {\n \"9.1.0\": \"data-testid public dashboard will be public checkbox\"\n },\n LimitedDSCheckbox: {\n \"9.1.0\": \"data-testid public dashboard limited datasources checkbox\"\n },\n CostIncreaseCheckbox: {\n \"9.1.0\": \"data-testid public dashboard cost may increase checkbox\"\n },\n PauseSwitch: {\n \"9.5.0\": \"data-testid public dashboard pause switch\"\n },\n EnableAnnotationsSwitch: {\n \"9.3.0\": \"data-testid public dashboard on off switch for annotations\"\n },\n CreateButton: {\n \"9.5.0\": \"data-testid public dashboard create button\"\n },\n DeleteButton: {\n \"9.3.0\": \"data-testid public dashboard delete button\"\n },\n CopyUrlInput: {\n \"9.1.0\": \"data-testid public dashboard copy url input\"\n },\n CopyUrlButton: {\n \"9.1.0\": \"data-testid public dashboard copy url button\"\n },\n SettingsDropdown: {\n \"10.1.0\": \"data-testid public dashboard settings dropdown\"\n },\n TemplateVariablesWarningAlert: {\n \"9.1.0\": \"data-testid public dashboard disabled template variables alert\"\n },\n UnsupportedDataSourcesWarningAlert: {\n \"9.5.0\": \"data-testid public dashboard unsupported data sources alert\"\n },\n NoUpsertPermissionsWarningAlert: {\n \"9.5.0\": \"data-testid public dashboard no upsert permissions alert\"\n },\n EnableTimeRangeSwitch: {\n \"9.4.0\": \"data-testid public dashboard on off switch for time range\"\n },\n EmailSharingConfiguration: {\n Container: {\n \"9.5.0\": \"data-testid email sharing config container\"\n },\n ShareType: {\n \"9.5.0\": \"data-testid public dashboard share type\"\n },\n EmailSharingInput: {\n \"9.5.0\": \"data-testid public dashboard email sharing input\"\n },\n EmailSharingInviteButton: {\n \"9.5.0\": \"data-testid public dashboard email sharing invite button\"\n },\n EmailSharingList: {\n \"9.5.0\": \"data-testid public dashboard email sharing list\"\n },\n DeleteEmail: {\n \"9.5.0\": \"data-testid public dashboard delete email button\"\n },\n ReshareLink: {\n \"9.5.0\": \"data-testid public dashboard reshare link button\"\n }\n }\n },\n SnapshotScene: {\n url: {\n \"11.1.0\": (key) => `/dashboard/snapshot/${key}`\n },\n PublishSnapshot: {\n \"11.1.0\": \"data-testid publish snapshot button\"\n },\n CopyUrlButton: {\n \"11.1.0\": \"data-testid snapshot copy url button\"\n },\n CopyUrlInput: {\n \"11.1.0\": \"data-testid snapshot copy url input\"\n }\n }\n },\n ShareDashboardDrawer: {\n ShareInternally: {\n container: {\n \"11.3.0\": \"data-testid share internally drawer container\"\n },\n lockTimeRangeSwitch: {\n \"11.3.0\": \"data-testid share internally lock time range switch\"\n },\n shortenUrlSwitch: {\n \"11.3.0\": \"data-testid share internally shorten url switch\"\n },\n copyUrlButton: {\n \"11.3.0\": \"data-testid share internally copy url button\"\n },\n SharePanel: {\n preview: {\n \"11.5.0\": \"data-testid share panel internally image generation preview\"\n },\n widthInput: {\n \"11.5.0\": \"data-testid share panel internally width input\"\n },\n heightInput: {\n \"11.5.0\": \"data-testid share panel internally height input\"\n },\n scaleFactorInput: {\n \"11.5.0\": \"data-testid share panel internally scale factor input\"\n },\n generateImageButton: {\n \"11.5.0\": \"data-testid share panel internally generate image button\"\n },\n downloadImageButton: {\n \"11.5.0\": \"data-testid share panel internally download image button\"\n }\n }\n },\n ShareExternally: {\n container: {\n \"11.3.0\": \"data-testid share externally drawer container\"\n },\n publicAlert: {\n \"11.3.0\": \"data-testid public share alert\"\n },\n emailSharingAlert: {\n \"11.3.0\": \"data-testid email share alert\"\n },\n shareTypeSelect: {\n \"11.3.0\": \"data-testid share externally share type select\"\n },\n Creation: {\n PublicShare: {\n createButton: {\n \"11.3.0\": \"data-testid public share dashboard create button\"\n },\n cancelButton: {\n \"11.3.0\": \"data-testid public share dashboard cancel button\"\n }\n },\n EmailShare: {\n createButton: {\n \"11.3.0\": \"data-testid email share dashboard create button\"\n },\n cancelButton: {\n \"11.3.0\": \"data-testid email share dashboard cancel button\"\n }\n },\n willBePublicCheckbox: {\n \"11.3.0\": \"data-testid share dashboard will be public checkbox\"\n }\n },\n Configuration: {\n enableTimeRangeSwitch: {\n \"11.3.0\": \"data-testid share externally enable time range switch\"\n },\n enableAnnotationsSwitch: {\n \"11.3.0\": \"data-testid share externally enable annotations switch\"\n },\n copyUrlButton: {\n \"11.3.0\": \"data-testid share externally copy url button\"\n },\n revokeAccessButton: {\n \"11.3.0\": \"data-testid share externally revoke access button\"\n },\n toggleAccessButton: {\n \"11.3.0\": \"data-testid share externally pause or resume access button\"\n }\n }\n },\n ShareSnapshot: {\n url: {\n \"11.3.0\": (key) => `/dashboard/snapshot/${key}`\n },\n container: {\n \"11.3.0\": \"data-testid share snapshot drawer container\"\n },\n publishSnapshot: {\n \"11.3.0\": \"data-testid share snapshot publish button\"\n },\n copyUrlButton: {\n \"11.3.0\": \"data-testid share snapshot copy url button\"\n }\n }\n },\n ExportDashboardDrawer: {\n ExportAsJson: {\n container: {\n \"11.3.0\": \"data-testid export as json drawer container\"\n },\n codeEditor: {\n \"11.3.0\": \"data-testid export as json code editor\"\n },\n exportExternallyToggle: {\n \"11.3.0\": \"data-testid export as json externally switch\"\n },\n saveToFileButton: {\n \"11.3.0\": \"data-testid export as json save to file button\"\n },\n copyToClipboardButton: {\n \"11.3.0\": \"data-testid export as json copy to clipboard button\"\n },\n cancelButton: {\n \"11.3.0\": \"data-testid export as json cancel button\"\n }\n }\n },\n PublicDashboard: {\n page: {\n \"9.5.0\": \"public-dashboard-page\"\n },\n NotAvailable: {\n container: {\n \"9.5.0\": \"public-dashboard-not-available\"\n },\n title: {\n \"9.5.0\": \"public-dashboard-title\"\n },\n pausedDescription: {\n \"9.5.0\": \"public-dashboard-paused-description\"\n }\n },\n footer: {\n \"11.0.0\": \"public-dashboard-footer\"\n }\n },\n PublicDashboardScene: {\n loadingPage: {\n \"11.0.0\": \"public-dashboard-scene-loading-page\"\n },\n page: {\n \"11.0.0\": \"public-dashboard-scene-page\"\n },\n controls: {\n \"11.0.0\": \"public-dashboard-controls\"\n }\n },\n RequestViewAccess: {\n form: {\n \"9.5.0\": \"request-view-access-form\"\n },\n recipientInput: {\n \"9.5.0\": \"request-view-access-recipient-input\"\n },\n submitButton: {\n \"9.5.0\": \"request-view-access-submit-button\"\n }\n },\n PublicDashboardConfirmAccess: {\n submitButton: {\n \"10.2.0\": \"data-testid confirm-access-submit-button\"\n }\n },\n Explore: {\n url: {\n [MIN_GRAFANA_VERSION]: \"/explore\"\n },\n General: {\n container: {\n [MIN_GRAFANA_VERSION]: \"data-testid Explore\"\n },\n graph: {\n [MIN_GRAFANA_VERSION]: \"Explore Graph\"\n },\n table: {\n [MIN_GRAFANA_VERSION]: \"Explore Table\"\n },\n scrollView: {\n \"9.0.0\": \"data-testid explorer scroll view\"\n }\n },\n QueryHistory: {\n container: {\n \"11.1.0\": \"data-testid QueryHistory\"\n }\n }\n },\n SoloPanel: {\n url: {\n [MIN_GRAFANA_VERSION]: (page) => `/d-solo/${page}`\n }\n },\n PluginsList: {\n page: {\n [MIN_GRAFANA_VERSION]: \"Plugins list page\"\n },\n list: {\n [MIN_GRAFANA_VERSION]: \"Plugins list\"\n },\n listItem: {\n [MIN_GRAFANA_VERSION]: \"Plugins list item\"\n },\n signatureErrorNotice: {\n \"10.3.0\": \"data-testid Unsigned plugins notice\",\n [MIN_GRAFANA_VERSION]: \"Unsigned plugins notice\"\n }\n },\n PluginPage: {\n page: {\n [MIN_GRAFANA_VERSION]: \"Plugin page\"\n },\n signatureInfo: {\n \"10.3.0\": \"data-testid Plugin signature info\",\n [MIN_GRAFANA_VERSION]: \"Plugin signature info\"\n },\n disabledInfo: {\n \"10.3.0\": \"data-testid Plugin disabled info\",\n [MIN_GRAFANA_VERSION]: \"Plugin disabled info\"\n }\n },\n PlaylistForm: {\n name: {\n [MIN_GRAFANA_VERSION]: \"Playlist name\"\n },\n interval: {\n [MIN_GRAFANA_VERSION]: \"Playlist interval\"\n },\n itemDelete: {\n \"10.2.0\": \"data-testid playlist-form-delete-item\"\n }\n },\n BrowseDashboards: {\n table: {\n body: {\n \"10.2.0\": \"data-testid browse-dashboards-table\"\n },\n row: {\n \"10.2.0\": (name) => `data-testid browse dashboards row ${name}`\n },\n checkbox: {\n \"10.0.0\": (uid) => `data-testid ${uid} checkbox`\n }\n },\n NewFolderForm: {\n form: {\n \"10.2.0\": \"data-testid new folder form\"\n },\n nameInput: {\n \"10.2.0\": \"data-testid new-folder-name-input\"\n },\n createButton: {\n \"10.2.0\": \"data-testid new-folder-create-button\"\n }\n }\n },\n Search: {\n url: {\n \"9.3.0\": \"/?search=openn\"\n },\n FolderView: {\n url: {\n \"9.3.0\": \"/?search=open&layout=folders\"\n }\n }\n },\n PublicDashboards: {\n ListItem: {\n linkButton: {\n \"9.3.0\": \"public-dashboard-link-button\"\n },\n configButton: {\n \"9.3.0\": \"public-dashboard-configuration-button\"\n },\n trashcanButton: {\n \"9.3.0\": \"public-dashboard-remove-button\"\n },\n pauseSwitch: {\n \"10.1.0\": \"data-testid public dashboard pause switch\"\n }\n }\n },\n UserListPage: {\n tabs: {\n allUsers: {\n \"10.0.0\": \"data-testid all-users-tab\"\n },\n orgUsers: {\n \"10.0.0\": \"data-testid org-users-tab\"\n },\n anonUserDevices: {\n \"10.2.3\": \"data-testid anon-user-devices-tab\"\n },\n publicDashboardsUsers: {\n \"10.0.0\": \"data-testid public-dashboards-users-tab\"\n },\n users: {\n \"10.0.0\": \"data-testid users-tab\"\n }\n },\n org: {\n url: {\n \"10.2.0\": \"/admin/users\",\n \"9.5.0\": \"/org/users\"\n }\n },\n admin: {\n url: {\n \"9.5.0\": \"/admin/users\"\n }\n },\n publicDashboards: {\n container: {\n \"11.1.0\": \"data-testid public-dashboards-users-list\"\n }\n },\n UserListAdminPage: {\n container: {\n \"10.0.0\": \"data-testid user-list-admin-page\"\n }\n },\n UsersListPage: {\n container: {\n \"10.0.0\": \"data-testid users-list-page\"\n }\n },\n UserAnonListPage: {\n container: {\n \"10.4.0\": \"data-testid user-anon-list-page\"\n }\n },\n UsersListPublicDashboardsPage: {\n container: {\n \"10.0.0\": \"data-testid users-list-public-dashboards-page\"\n },\n DashboardsListModal: {\n listItem: {\n \"10.0.0\": (uid) => `data-testid dashboards-list-item-${uid}`\n }\n }\n }\n },\n ProfilePage: {\n url: {\n \"10.2.0\": \"/profile\"\n }\n },\n Plugin: {\n url: {\n [MIN_GRAFANA_VERSION]: (pluginId) => `/plugins/${pluginId}`\n }\n }\n};\n\nexport { versionedPages };\n//# sourceMappingURL=pages.mjs.map\n","import uFuzzy from '@leeoniya/ufuzzy';\n\nconst REGEXP_NON_ASCII = /[^ -~]/m;\nconst REGEXP_ONLY_SYMBOLS = /^[\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E]+$/m;\nconst outOfOrderLimit = 5;\nconst maxNeedleLength = 25;\nconst maxFuzzyTerms = 5;\nconst rankThreshold = 1e4;\nconst uf = new uFuzzy({ intraMode: 1 });\nfunction fuzzyFind(options, haystack, needle) {\n let matches = [];\n if (needle === \"\") {\n matches = options;\n } else if (\n // contains non-ascii\n REGEXP_NON_ASCII.test(needle) || // is only ascii symbols (operators)\n REGEXP_ONLY_SYMBOLS.test(needle) || // too long (often copy-paste from somewhere)\n needle.length > maxNeedleLength || uf.split(needle).length > maxFuzzyTerms\n ) {\n for (let i = 0; i < haystack.length; i++) {\n let item = haystack[i];\n if (item.includes(needle)) {\n matches.push(options[i]);\n }\n }\n } else {\n const [idxs, info, order] = uf.search(haystack, needle, outOfOrderLimit, rankThreshold);\n if (idxs == null ? void 0 : idxs.length) {\n if (info && order) {\n matches = order.map((idx) => options[info.idx[idx]]);\n } else {\n matches = idxs.map((idx) => options[idx]);\n }\n }\n }\n return matches;\n}\n\nexport { fuzzyFind };\n//# sourceMappingURL=filter.js.map\n","import { ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE } from '../constants.js';\nimport { fuzzyFind } from '../filter.js';\n\nfunction getOptionSearcher(options, includeAll = false) {\n let allOptions = options;\n if (includeAll) {\n allOptions = [{ value: ALL_VARIABLE_VALUE, label: ALL_VARIABLE_TEXT }, ...allOptions];\n }\n const haystack = allOptions.map((o) => o.label);\n return (search) => fuzzyFind(allOptions, haystack, search);\n}\n\nexport { getOptionSearcher };\n//# sourceMappingURL=getOptionSearcher.js.map\n","import { isArray } from 'lodash';\nimport React, { useMemo, useState, useEffect } from 'react';\nimport { useTheme2, getSelectStyles, useStyles2, Checkbox, MultiSelect, Select, ToggleAllState } from '@grafana/ui';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { css, cx } from '@emotion/css';\nimport { getOptionSearcher } from './getOptionSearcher.js';\nimport { sceneGraph } from '../../core/sceneGraph/index.js';\n\nconst filterNoOp = () => true;\nconst filterAll = (v) => v.value !== \"$__all\";\nconst determineToggleAllState = (selectedValues, options) => {\n if (selectedValues.length === options.filter(filterAll).length) {\n return ToggleAllState.allSelected;\n } else if (selectedValues.length === 0 || selectedValues.length === 1 && selectedValues[0] && selectedValues[0].value === \"$__all\") {\n return ToggleAllState.noneSelected;\n } else {\n return ToggleAllState.indeterminate;\n }\n};\nfunction toSelectableValue(value, label) {\n return {\n value,\n label: label != null ? label : String(value)\n };\n}\nfunction VariableValueSelect({ model, state }) {\n const { value, text, key, options, includeAll, isReadOnly, allowCustomValue = true } = state;\n const [inputValue, setInputValue] = useState(\"\");\n const [hasCustomValue, setHasCustomValue] = useState(false);\n const selectValue = toSelectableValue(value, String(text));\n const queryController = sceneGraph.getQueryController(model);\n const optionSearcher = useMemo(() => getOptionSearcher(options, includeAll), [options, includeAll]);\n const onInputChange = (value2, { action }) => {\n if (action === \"input-change\") {\n setInputValue(value2);\n if (model.onSearchChange) {\n model.onSearchChange(value2);\n }\n return value2;\n }\n return value2;\n };\n const filteredOptions = optionSearcher(inputValue);\n const onOpenMenu = () => {\n if (hasCustomValue) {\n setInputValue(String(text));\n }\n };\n const onCloseMenu = () => {\n setInputValue(\"\");\n };\n return /* @__PURE__ */ React.createElement(\n Select,\n {\n id: key,\n isValidNewOption: (inputValue2) => inputValue2.trim().length > 0,\n placeholder: \"Select value\",\n width: \"auto\",\n disabled: isReadOnly,\n value: selectValue,\n inputValue,\n allowCustomValue,\n virtualized: true,\n filterOption: filterNoOp,\n tabSelectsValue: false,\n onInputChange,\n onOpenMenu,\n onCloseMenu,\n options: filteredOptions,\n \"data-testid\": selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${value}`),\n onChange: (newValue) => {\n model.changeValueTo(newValue.value, newValue.label, true);\n queryController == null ? void 0 : queryController.startProfile(\"VariableValueSelect\");\n if (hasCustomValue !== newValue.__isNew__) {\n setHasCustomValue(newValue.__isNew__);\n }\n }\n }\n );\n}\nfunction VariableValueSelectMulti({\n model,\n state\n}) {\n const {\n value,\n options,\n key,\n maxVisibleValues,\n noValueOnClear,\n includeAll,\n isReadOnly,\n allowCustomValue = true\n } = state;\n const arrayValue = useMemo(() => isArray(value) ? value : [value], [value]);\n const [uncommittedValue, setUncommittedValue] = useState(arrayValue);\n const [inputValue, setInputValue] = useState(\"\");\n const queryController = sceneGraph.getQueryController(model);\n const optionSearcher = useMemo(() => getOptionSearcher(options, includeAll), [options, includeAll]);\n useEffect(() => {\n setUncommittedValue(arrayValue);\n }, [arrayValue]);\n const onInputChange = (value2, { action }) => {\n if (action === \"input-change\") {\n setInputValue(value2);\n if (model.onSearchChange) {\n model.onSearchChange(value2);\n }\n return value2;\n }\n if (action === \"input-blur\") {\n setInputValue(\"\");\n return \"\";\n }\n return inputValue;\n };\n const placeholder = options.length > 0 ? \"Select value\" : \"\";\n const filteredOptions = optionSearcher(inputValue);\n return /* @__PURE__ */ React.createElement(\n MultiSelect,\n {\n id: key,\n placeholder,\n width: \"auto\",\n inputValue,\n disabled: isReadOnly,\n value: uncommittedValue,\n noMultiValueWrap: true,\n maxVisibleValues: maxVisibleValues != null ? maxVisibleValues : 5,\n tabSelectsValue: false,\n virtualized: true,\n allowCustomValue,\n toggleAllOptions: {\n enabled: true,\n optionsFilter: filterAll,\n determineToggleAllState\n },\n options: filteredOptions,\n closeMenuOnSelect: false,\n components: { Option: OptionWithCheckbox },\n isClearable: true,\n hideSelectedOptions: false,\n onInputChange,\n onBlur: () => {\n model.changeValueTo(uncommittedValue, void 0, true);\n queryController == null ? void 0 : queryController.startProfile(\"VariableValueSelectMulti\");\n },\n filterOption: filterNoOp,\n \"data-testid\": selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${uncommittedValue}`),\n onChange: (newValue, action) => {\n if (action.action === \"clear\" && noValueOnClear) {\n model.changeValueTo([], void 0, true);\n }\n setUncommittedValue(newValue.map((x) => x.value));\n }\n }\n );\n}\nconst OptionWithCheckbox = ({\n children,\n data,\n innerProps,\n innerRef,\n isFocused,\n isSelected,\n indeterminate,\n renderOptionLabel\n}) => {\n var _a;\n const { onMouseMove, onMouseOver, ...rest } = innerProps;\n const theme = useTheme2();\n const selectStyles = getSelectStyles(theme);\n const optionStyles = useStyles2(getOptionStyles);\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n ref: innerRef,\n className: cx(selectStyles.option, isFocused && selectStyles.optionFocused),\n ...rest,\n \"data-testid\": \"data-testid Select option\",\n title: data.title\n },\n /* @__PURE__ */ React.createElement(\"div\", { className: optionStyles.checkbox }, /* @__PURE__ */ React.createElement(Checkbox, { indeterminate, value: isSelected })),\n /* @__PURE__ */ React.createElement(\n \"div\",\n {\n className: selectStyles.optionBody,\n \"data-testid\": selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts(\n (_a = data.label) != null ? _a : String(data.value)\n )\n },\n /* @__PURE__ */ React.createElement(\"span\", null, children)\n )\n );\n};\nOptionWithCheckbox.displayName = \"SelectMenuOptions\";\nconst getOptionStyles = (theme) => ({\n checkbox: css({\n marginRight: theme.spacing(2)\n })\n});\nfunction MultiOrSingleValueSelect({ model }) {\n const state = model.useState();\n if (state.isMulti) {\n return /* @__PURE__ */ React.createElement(VariableValueSelectMulti, { model, state });\n } else {\n return /* @__PURE__ */ React.createElement(VariableValueSelect, { model, state });\n }\n}\n\nexport { MultiOrSingleValueSelect, OptionWithCheckbox, VariableValueSelect, VariableValueSelectMulti, toSelectableValue };\n//# sourceMappingURL=VariableValueSelect.js.map\n","import { toUrlCommaDelimitedString, unescapeUrlDelimiters } from '../utils.js';\n\nclass GroupByVariableUrlSyncHandler {\n constructor(_sceneObject) {\n this._sceneObject = _sceneObject;\n this._nextChangeShouldAddHistoryStep = false;\n }\n getKey() {\n return `var-${this._sceneObject.state.name}`;\n }\n getKeys() {\n if (this._sceneObject.state.skipUrlSync) {\n return [];\n }\n return [this.getKey()];\n }\n getUrlState() {\n if (this._sceneObject.state.skipUrlSync) {\n return {};\n }\n return { [this.getKey()]: toUrlValues(this._sceneObject.state.value, this._sceneObject.state.text) };\n }\n updateFromUrl(values) {\n let urlValue = values[this.getKey()];\n if (urlValue != null) {\n if (!this._sceneObject.isActive) {\n this._sceneObject.skipNextValidation = true;\n }\n const { values: values2, texts } = fromUrlValues(urlValue);\n this._sceneObject.changeValueTo(values2, texts);\n }\n }\n performBrowserHistoryAction(callback) {\n this._nextChangeShouldAddHistoryStep = true;\n callback();\n this._nextChangeShouldAddHistoryStep = false;\n }\n shouldCreateHistoryStep(values) {\n return this._nextChangeShouldAddHistoryStep;\n }\n}\nfunction toUrlValues(values, texts) {\n values = Array.isArray(values) ? values : [values];\n texts = Array.isArray(texts) ? texts : [texts];\n return values.map((value, idx) => {\n if (value === void 0 || value === null) {\n return \"\";\n }\n value = String(value);\n let text = texts[idx];\n text = text === void 0 || text === null ? value : String(text);\n return toUrlCommaDelimitedString(value, text);\n });\n}\nfunction fromUrlValues(urlValues) {\n urlValues = Array.isArray(urlValues) ? urlValues : [urlValues];\n return urlValues.reduce(\n (acc, urlValue) => {\n const [value, label] = (urlValue != null ? urlValue : \"\").split(\",\");\n acc.values.push(unescapeUrlDelimiters(value));\n acc.texts.push(unescapeUrlDelimiters(label != null ? label : value));\n return acc;\n },\n {\n values: [],\n texts: []\n }\n );\n}\n\nexport { GroupByVariableUrlSyncHandler };\n//# sourceMappingURL=GroupByVariableUrlSyncHandler.js.map\n","import { isFiltersRequestEnricher } from '../core/types.js';\n\nfunction getEnrichedFiltersRequest(sourceRunner) {\n const root = sourceRunner.getRoot();\n if (isFiltersRequestEnricher(root)) {\n return root.enrichFiltersRequest(sourceRunner);\n }\n return null;\n}\n\nexport { getEnrichedFiltersRequest };\n//# sourceMappingURL=getEnrichedFiltersRequest.js.map\n","var __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), member.set(obj, value), value);\nvar _value;\nclass SafeSerializableSceneObject {\n constructor(value) {\n __privateAdd(this, _value);\n this.text = \"__sceneObject\";\n this.valueOf = () => {\n return __privateGet(this, _value);\n };\n __privateSet(this, _value, value);\n }\n toString() {\n return void 0;\n }\n get value() {\n return this;\n }\n}\n_value = new WeakMap();\n\nexport { SafeSerializableSceneObject };\n//# sourceMappingURL=SafeSerializableSceneObject.js.map\n","import { config } from '@grafana/runtime';\nimport { SafeSerializableSceneObject } from './SafeSerializableSceneObject.js';\n\nfunction shouldWrapInSafeSerializableSceneObject(grafanaVersion) {\n const pattern = /^(\\d+)\\.(\\d+)\\.(\\d+)/;\n const match = grafanaVersion.match(pattern);\n if (!match) {\n return false;\n }\n const major = parseInt(match[1], 10);\n const minor = parseInt(match[2], 10);\n const patch = parseInt(match[3], 10);\n if (major === 11) {\n return minor === 0 && patch >= 4 || minor === 1 && patch >= 2 || minor > 1;\n }\n if (major === 10) {\n return minor === 4 && patch >= 8 || minor >= 5;\n }\n return major > 11;\n}\nfunction wrapInSafeSerializableSceneObject(sceneObject) {\n const version = config.buildInfo.version;\n if (shouldWrapInSafeSerializableSceneObject(version)) {\n return new SafeSerializableSceneObject(sceneObject);\n }\n return { value: sceneObject, text: \"__sceneObject\" };\n}\n\nexport { shouldWrapInSafeSerializableSceneObject, wrapInSafeSerializableSceneObject };\n//# sourceMappingURL=wrapInSafeSerializableSceneObject.js.map\n","import React, { useMemo, useState, useEffect } from 'react';\nimport { allActiveGroupByVariables } from './findActiveGroupByVariablesByUid.js';\nimport { sceneGraph } from '../../core/sceneGraph/index.js';\nimport { MultiValueVariable } from '../variants/MultiValueVariable.js';\nimport { lastValueFrom, map, of, from, mergeMap, tap, take } from 'rxjs';\nimport { getDataSource } from '../../utils/getDataSource.js';\nimport { MultiSelect, Select } from '@grafana/ui';\nimport { isArray } from 'lodash';\nimport { handleOptionGroups, dataFromResponse, getQueriesForVariables, responseHasError } from '../utils.js';\nimport { OptionWithCheckbox } from '../components/VariableValueSelect.js';\nimport { GroupByVariableUrlSyncHandler } from './GroupByVariableUrlSyncHandler.js';\nimport { getOptionSearcher } from '../components/getOptionSearcher.js';\nimport { getEnrichedFiltersRequest } from '../getEnrichedFiltersRequest.js';\nimport { wrapInSafeSerializableSceneObject } from '../../utils/wrapInSafeSerializableSceneObject.js';\n\nclass GroupByVariable extends MultiValueVariable {\n constructor(initialState) {\n super({\n isMulti: true,\n name: \"\",\n value: [],\n text: [],\n options: [],\n datasource: null,\n baseFilters: [],\n applyMode: \"auto\",\n layout: \"horizontal\",\n type: \"groupby\",\n ...initialState,\n noValueOnClear: true\n });\n this.isLazy = true;\n this._urlSync = new GroupByVariableUrlSyncHandler(this);\n /**\n * Get possible keys given current filters. Do not call from plugins directly\n */\n this._getKeys = async (ds) => {\n var _a, _b, _c, _d;\n const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, null));\n if (override && override.replace) {\n return override.values;\n }\n if (this.state.defaultOptions) {\n return this.state.defaultOptions.concat(dataFromResponse((_c = override == null ? void 0 : override.values) != null ? _c : []));\n }\n if (!ds.getTagKeys) {\n return [];\n }\n const queries = getQueriesForVariables(this);\n const otherFilters = this.state.baseFilters || [];\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n const response = await ds.getTagKeys({\n filters: otherFilters,\n queries,\n timeRange,\n scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue(),\n ...getEnrichedFiltersRequest(this)\n });\n if (responseHasError(response)) {\n this.setState({ error: response.error.message });\n }\n let keys = dataFromResponse(response);\n if (override) {\n keys = keys.concat(dataFromResponse(override.values));\n }\n const tagKeyRegexFilter = this.state.tagKeyRegexFilter;\n if (tagKeyRegexFilter) {\n keys = keys.filter((f) => f.text.match(tagKeyRegexFilter));\n }\n return keys;\n };\n if (this.state.applyMode === \"auto\") {\n this.addActivationHandler(() => {\n allActiveGroupByVariables.add(this);\n return () => allActiveGroupByVariables.delete(this);\n });\n }\n }\n validateAndUpdate() {\n return this.getValueOptions({}).pipe(\n map((options) => {\n this._updateValueGivenNewOptions(options);\n return {};\n })\n );\n }\n _updateValueGivenNewOptions(options) {\n const { value: currentValue, text: currentText } = this.state;\n const stateUpdate = {\n options,\n loading: false,\n value: currentValue != null ? currentValue : [],\n text: currentText != null ? currentText : []\n };\n this.setState(stateUpdate);\n }\n getValueOptions(args) {\n if (this.state.defaultOptions) {\n return of(\n this.state.defaultOptions.map((o) => ({\n label: o.text,\n value: String(o.value),\n group: o.group\n }))\n );\n }\n this.setState({ loading: true, error: null });\n return from(\n getDataSource(this.state.datasource, {\n __sceneObject: wrapInSafeSerializableSceneObject(this)\n })\n ).pipe(\n mergeMap((ds) => {\n return from(this._getKeys(ds)).pipe(\n tap((response) => {\n if (responseHasError(response)) {\n this.setState({ error: response.error.message });\n }\n }),\n map((response) => dataFromResponse(response)),\n take(1),\n mergeMap((data) => {\n const a = data.map((i) => {\n return {\n label: i.text,\n value: i.value ? String(i.value) : i.text,\n group: i.group\n };\n });\n return of(a);\n })\n );\n })\n );\n }\n /**\n * Allows clearing the value of the variable to an empty value. Overrides default behavior of a MultiValueVariable\n */\n getDefaultMultiState(options) {\n return { value: [], text: [] };\n }\n}\nGroupByVariable.Component = GroupByVariableRenderer;\nfunction GroupByVariableRenderer({ model }) {\n const {\n value,\n text,\n key,\n isMulti = true,\n maxVisibleValues,\n noValueOnClear,\n options,\n includeAll,\n allowCustomValue = true\n } = model.useState();\n const values = useMemo(() => {\n const arrayValue = isArray(value) ? value : [value];\n const arrayText = isArray(text) ? text : [text];\n return arrayValue.map((value2, idx) => {\n var _a;\n return {\n value: value2,\n label: String((_a = arrayText[idx]) != null ? _a : value2)\n };\n });\n }, [value, text]);\n const [isFetchingOptions, setIsFetchingOptions] = useState(false);\n const [isOptionsOpen, setIsOptionsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [uncommittedValue, setUncommittedValue] = useState(values);\n const optionSearcher = useMemo(() => getOptionSearcher(options, includeAll), [options, includeAll]);\n useEffect(() => {\n setUncommittedValue(values);\n }, [values]);\n const onInputChange = (value2, { action }) => {\n if (action === \"input-change\") {\n setInputValue(value2);\n if (model.onSearchChange) {\n model.onSearchChange(value2);\n }\n return value2;\n }\n if (action === \"input-blur\") {\n setInputValue(\"\");\n return \"\";\n }\n return inputValue;\n };\n const filteredOptions = useMemo(\n () => handleOptionGroups(optionSearcher(inputValue).map(toSelectableValue)),\n [optionSearcher, inputValue]\n );\n return isMulti ? /* @__PURE__ */ React.createElement(\n MultiSelect,\n {\n \"aria-label\": \"Group by selector\",\n \"data-testid\": `GroupBySelect-${key}`,\n id: key,\n placeholder: \"Select value\",\n width: \"auto\",\n allowCustomValue,\n inputValue,\n value: uncommittedValue,\n noMultiValueWrap: true,\n maxVisibleValues: maxVisibleValues != null ? maxVisibleValues : 5,\n tabSelectsValue: false,\n virtualized: true,\n options: filteredOptions,\n filterOption: filterNoOp,\n closeMenuOnSelect: false,\n isOpen: isOptionsOpen,\n isClearable: true,\n hideSelectedOptions: false,\n isLoading: isFetchingOptions,\n components: { Option: OptionWithCheckbox },\n onInputChange,\n onBlur: () => {\n model.changeValueTo(\n uncommittedValue.map((x) => x.value),\n uncommittedValue.map((x) => x.label),\n true\n );\n },\n onChange: (newValue, action) => {\n if (action.action === \"clear\" && noValueOnClear) {\n model.changeValueTo([], void 0, true);\n }\n setUncommittedValue(newValue);\n },\n onOpenMenu: async () => {\n setIsFetchingOptions(true);\n await lastValueFrom(model.validateAndUpdate());\n setIsFetchingOptions(false);\n setIsOptionsOpen(true);\n },\n onCloseMenu: () => {\n setIsOptionsOpen(false);\n }\n }\n ) : /* @__PURE__ */ React.createElement(\n Select,\n {\n \"aria-label\": \"Group by selector\",\n \"data-testid\": `GroupBySelect-${key}`,\n id: key,\n placeholder: \"Select value\",\n width: \"auto\",\n inputValue,\n value: uncommittedValue,\n allowCustomValue,\n noMultiValueWrap: true,\n maxVisibleValues: maxVisibleValues != null ? maxVisibleValues : 5,\n tabSelectsValue: false,\n virtualized: true,\n options: filteredOptions,\n filterOption: filterNoOp,\n closeMenuOnSelect: true,\n isOpen: isOptionsOpen,\n isClearable: true,\n hideSelectedOptions: false,\n noValueOnClear: true,\n isLoading: isFetchingOptions,\n onInputChange,\n onChange: (newValue, action) => {\n if (action.action === \"clear\") {\n setUncommittedValue([]);\n if (noValueOnClear) {\n model.changeValueTo([]);\n }\n return;\n }\n if (newValue == null ? void 0 : newValue.value) {\n setUncommittedValue([newValue]);\n model.changeValueTo([newValue.value], newValue.label ? [newValue.label] : void 0);\n }\n },\n onOpenMenu: async () => {\n setIsFetchingOptions(true);\n await lastValueFrom(model.validateAndUpdate());\n setIsFetchingOptions(false);\n setIsOptionsOpen(true);\n },\n onCloseMenu: () => {\n setIsOptionsOpen(false);\n }\n }\n );\n}\nconst filterNoOp = () => true;\nfunction toSelectableValue(input) {\n const { label, value, group } = input;\n const result = {\n label,\n value\n };\n if (group) {\n result.group = group;\n }\n return result;\n}\n\nexport { GroupByVariable, GroupByVariableRenderer };\n//# sourceMappingURL=GroupByVariable.js.map\n","import { Tooltip, Icon } from '@grafana/ui';\nimport React from 'react';\n\nfunction LoadingIndicator(props) {\n return /* @__PURE__ */ React.createElement(Tooltip, { content: \"Cancel query\" }, /* @__PURE__ */ React.createElement(\n Icon,\n {\n className: \"spin-clockwise\",\n name: \"sync\",\n size: \"xs\",\n role: \"button\",\n onMouseDown: (e) => {\n props.onCancel(e);\n }\n }\n ));\n}\n\nexport { LoadingIndicator };\n//# sourceMappingURL=LoadingIndicator.js.map\n","import React from 'react';\nimport { useStyles2, useTheme2, Tooltip, Icon, IconButton } from '@grafana/ui';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { css, cx } from '@emotion/css';\nimport { LoadingIndicator } from './LoadingIndicator.js';\n\nfunction ControlsLabel(props) {\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n const isVertical = props.layout === \"vertical\";\n const loadingIndicator = Boolean(props.isLoading) ? /* @__PURE__ */ React.createElement(\n \"div\",\n {\n style: { marginLeft: theme.spacing(1), marginTop: \"-1px\" },\n \"aria-label\": selectors.components.LoadingIndicator.icon\n },\n /* @__PURE__ */ React.createElement(\n LoadingIndicator,\n {\n onCancel: (e) => {\n var _a;\n e.preventDefault();\n e.stopPropagation();\n (_a = props.onCancel) == null ? void 0 : _a.call(props);\n }\n }\n )\n ) : null;\n let errorIndicator = null;\n if (props.error) {\n errorIndicator = /* @__PURE__ */ React.createElement(Tooltip, { content: props.error, placement: \"bottom\" }, /* @__PURE__ */ React.createElement(Icon, { className: styles.errorIcon, name: \"exclamation-triangle\" }));\n }\n let descriptionIndicator = null;\n if (props.description) {\n descriptionIndicator = /* @__PURE__ */ React.createElement(Tooltip, { content: props.description, placement: isVertical ? \"top\" : \"bottom\" }, /* @__PURE__ */ React.createElement(Icon, { className: styles.normalIcon, name: \"info-circle\" }));\n }\n const testId = typeof props.label === \"string\" ? selectors.pages.Dashboard.SubMenu.submenuItemLabels(props.label) : \"\";\n let labelElement;\n if (isVertical) {\n labelElement = /* @__PURE__ */ React.createElement(\"label\", { className: cx(styles.verticalLabel, props.className), \"data-testid\": testId, htmlFor: props.htmlFor }, props.prefix, props.label, descriptionIndicator, errorIndicator, props.icon && /* @__PURE__ */ React.createElement(Icon, { name: props.icon, className: styles.normalIcon }), loadingIndicator, props.onRemove && /* @__PURE__ */ React.createElement(IconButton, { variant: \"secondary\", size: \"xs\", name: \"times\", onClick: props.onRemove, tooltip: \"Remove\" }), props.suffix);\n } else {\n labelElement = /* @__PURE__ */ React.createElement(\"label\", { className: cx(styles.horizontalLabel, props.className), \"data-testid\": testId, htmlFor: props.htmlFor }, props.prefix, errorIndicator, props.icon && /* @__PURE__ */ React.createElement(Icon, { name: props.icon, className: styles.normalIcon }), props.label, descriptionIndicator, loadingIndicator, props.suffix);\n }\n return labelElement;\n}\nconst getStyles = (theme) => ({\n horizontalLabel: css({\n background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,\n display: `flex`,\n alignItems: \"center\",\n padding: theme.spacing(0, 1),\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.bodySmall.fontSize,\n height: theme.spacing(theme.components.height.md),\n lineHeight: theme.spacing(theme.components.height.md),\n borderRadius: `${theme.shape.radius.default} 0 0 ${theme.shape.radius.default}`,\n border: `1px solid ${theme.components.input.borderColor}`,\n position: \"relative\",\n // To make the border line up with the input border\n right: -1,\n whiteSpace: \"nowrap\",\n gap: theme.spacing(0.5)\n }),\n verticalLabel: css({\n display: `flex`,\n alignItems: \"center\",\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.bodySmall.fontSize,\n lineHeight: theme.typography.bodySmall.lineHeight,\n whiteSpace: \"nowrap\",\n marginBottom: theme.spacing(0.5),\n gap: theme.spacing(1)\n }),\n errorIcon: css({\n color: theme.colors.error.text\n }),\n normalIcon: css({\n color: theme.colors.text.secondary\n })\n});\n\nexport { ControlsLabel };\n//# sourceMappingURL=ControlsLabel.js.map\n","import { fuzzyFind } from '../filter.js';\n\nfunction getAdhocOptionSearcher(options) {\n const haystack = options.map((o) => {\n var _a;\n return (_a = o.label) != null ? _a : String(o.value);\n });\n return (search) => fuzzyFind(options, haystack, search);\n}\n\nexport { getAdhocOptionSearcher };\n//# sourceMappingURL=getAdhocOptionSearcher.js.map\n","import React, { useState, useMemo } from 'react';\nimport { isMultiValueOperator } from './AdHocFiltersVariable.js';\nimport { useStyles2, Select, Field, Button } from '@grafana/ui';\nimport { css, cx } from '@emotion/css';\nimport { ControlsLabel } from '../../utils/ControlsLabel.js';\nimport { getAdhocOptionSearcher } from './getAdhocOptionSearcher.js';\nimport { handleOptionGroups } from '../utils.js';\nimport { OptionWithCheckbox } from '../components/VariableValueSelect.js';\n\nfunction keyLabelToOption(key, label) {\n return key !== \"\" ? {\n value: key,\n label: label || key\n } : null;\n}\nconst filterNoOp = () => true;\nfunction AdHocFilterRenderer({ filter, model }) {\n var _a, _b, _c, _d, _e;\n const styles = useStyles2(getStyles);\n const [keys, setKeys] = useState([]);\n const [values, setValues] = useState([]);\n const [isKeysLoading, setIsKeysLoading] = useState(false);\n const [isValuesLoading, setIsValuesLoading] = useState(false);\n const [isKeysOpen, setIsKeysOpen] = useState(false);\n const [isValuesOpen, setIsValuesOpen] = useState(false);\n const [isOperatorOpen, setIsOperatorOpen] = useState(false);\n const [valueInputValue, setValueInputValue] = useState(\"\");\n const [valueHasCustomValue, setValueHasCustomValue] = useState(false);\n const [uncommittedValue, setUncommittedValue] = useState(\n filter.values ? filter.values.map((value, index) => {\n var _a2;\n return keyLabelToOption(value, (_a2 = filter.valueLabels) == null ? void 0 : _a2[index]);\n }) : []\n );\n const isMultiValue = isMultiValueOperator(filter.operator);\n const keyValue = keyLabelToOption(filter.key, filter.keyLabel);\n const valueValue = keyLabelToOption(filter.value, (_a = filter.valueLabels) == null ? void 0 : _a[0]);\n const optionSearcher = useMemo(() => getAdhocOptionSearcher(values), [values]);\n const onAddCustomValue = model.state.onAddCustomValue;\n const onValueInputChange = (value, { action }) => {\n if (action === \"input-change\") {\n setValueInputValue(value);\n }\n return value;\n };\n const onOperatorChange = (v) => {\n var _a2, _b2;\n const existingOperator = filter.operator;\n const newOperator = v.value;\n const update = { operator: newOperator };\n if (isMultiValueOperator(existingOperator) && !isMultiValueOperator(newOperator)) {\n update.value = \"\";\n update.valueLabels = [\"\"];\n update.values = void 0;\n setUncommittedValue([]);\n } else if (!isMultiValueOperator(existingOperator) && isMultiValueOperator(newOperator) && filter.value) {\n update.values = [filter.value];\n setUncommittedValue([\n {\n value: filter.value,\n label: (_b2 = (_a2 = filter.valueLabels) == null ? void 0 : _a2[0]) != null ? _b2 : filter.value\n }\n ]);\n }\n model._updateFilter(filter, update);\n };\n const filteredValueOptions = useMemo(\n () => handleOptionGroups(optionSearcher(valueInputValue)),\n [optionSearcher, valueInputValue]\n );\n const multiValueProps = {\n isMulti: true,\n value: uncommittedValue,\n components: {\n Option: OptionWithCheckbox\n },\n hideSelectedOptions: false,\n closeMenuOnSelect: false,\n openMenuOnFocus: false,\n onChange: (v) => {\n setUncommittedValue(v);\n if (v.some((value) => value.__isNew__)) {\n setValueInputValue(\"\");\n }\n },\n onBlur: () => {\n var _a2, _b2;\n model._updateFilter(filter, {\n value: (_b2 = (_a2 = uncommittedValue[0]) == null ? void 0 : _a2.value) != null ? _b2 : \"\",\n // TODO remove expect-error when we're on the latest version of @grafana/data\n values: uncommittedValue.map((option) => option.value),\n valueLabels: uncommittedValue.map((option) => option.label)\n });\n }\n };\n const valueSelect = /* @__PURE__ */ React.createElement(\n Select,\n {\n virtualized: true,\n allowCustomValue: (_b = model.state.allowCustomValue) != null ? _b : true,\n isValidNewOption: (inputValue) => inputValue.trim().length > 0,\n allowCreateWhileLoading: true,\n formatCreateLabel: (inputValue) => `Use custom value: ${inputValue}`,\n disabled: model.state.readOnly,\n className: cx(styles.value, isValuesOpen ? styles.widthWhenOpen : void 0),\n width: \"auto\",\n value: valueValue,\n filterOption: filterNoOp,\n placeholder: \"Select value\",\n options: filteredValueOptions,\n inputValue: valueInputValue,\n onInputChange: onValueInputChange,\n onChange: (v) => {\n if (onAddCustomValue && v.__isNew__) {\n model._updateFilter(filter, onAddCustomValue(v, filter));\n } else {\n model._updateFilter(filter, {\n value: v.value,\n valueLabels: v.label ? [v.label] : [v.value]\n });\n }\n if (valueHasCustomValue !== v.__isNew__) {\n setValueHasCustomValue(v.__isNew__);\n }\n },\n isOpen: isValuesOpen && !isValuesLoading,\n isLoading: isValuesLoading,\n openMenuOnFocus: true,\n onOpenMenu: async () => {\n var _a2;\n setIsValuesLoading(true);\n setIsValuesOpen(true);\n const values2 = await model._getValuesFor(filter);\n setIsValuesLoading(false);\n setValues(values2);\n if (valueHasCustomValue) {\n setValueInputValue((_a2 = valueValue == null ? void 0 : valueValue.label) != null ? _a2 : \"\");\n }\n },\n onCloseMenu: () => {\n setIsValuesOpen(false);\n setValueInputValue(\"\");\n },\n ...isMultiValue && multiValueProps\n }\n );\n const keySelect = /* @__PURE__ */ React.createElement(\n Select,\n {\n key: `${isValuesLoading ? \"loading\" : \"loaded\"}`,\n disabled: model.state.readOnly,\n className: cx(styles.key, isKeysOpen ? styles.widthWhenOpen : void 0),\n width: \"auto\",\n allowCustomValue: (_c = model.state.allowCustomValue) != null ? _c : true,\n value: keyValue,\n placeholder: \"Select label\",\n options: handleOptionGroups(keys),\n onChange: (v) => {\n model._updateFilter(filter, {\n key: v.value,\n keyLabel: v.label,\n // clear value if key has changed\n value: \"\",\n valueLabels: [\"\"],\n values: void 0\n });\n setUncommittedValue([]);\n },\n autoFocus: filter.key === \"\",\n isOpen: isKeysOpen && !isKeysLoading,\n isLoading: isKeysLoading,\n onOpenMenu: async () => {\n setIsKeysOpen(true);\n setIsKeysLoading(true);\n const keys2 = await model._getKeys(filter.key);\n setIsKeysLoading(false);\n setKeys(keys2);\n },\n onCloseMenu: () => {\n setIsKeysOpen(false);\n },\n onBlur: () => {\n if (filter.key === \"\") {\n model._removeFilter(filter);\n }\n },\n openMenuOnFocus: true\n }\n );\n const operatorSelect = /* @__PURE__ */ React.createElement(\n Select,\n {\n className: cx(styles.operator, {\n [styles.widthWhenOpen]: isOperatorOpen\n }),\n value: filter.operator,\n disabled: model.state.readOnly,\n options: model._getOperators(),\n onChange: onOperatorChange,\n onOpenMenu: () => {\n setIsOperatorOpen(true);\n },\n onCloseMenu: () => {\n setIsOperatorOpen(false);\n }\n }\n );\n if (model.state.layout === \"vertical\") {\n if (filter.key) {\n const label = /* @__PURE__ */ React.createElement(ControlsLabel, { layout: \"vertical\", label: (_d = filter.key) != null ? _d : \"\", onRemove: () => model._removeFilter(filter) });\n return /* @__PURE__ */ React.createElement(Field, { label, \"data-testid\": `AdHocFilter-${filter.key}`, className: styles.field }, /* @__PURE__ */ React.createElement(\"div\", { className: styles.wrapper }, operatorSelect, valueSelect));\n } else {\n return /* @__PURE__ */ React.createElement(Field, { label: \"Select label\", \"data-testid\": `AdHocFilter-${filter.key}`, className: styles.field }, keySelect);\n }\n }\n return /* @__PURE__ */ React.createElement(\"div\", { className: styles.wrapper, \"data-testid\": `AdHocFilter-${filter.key}` }, keySelect, operatorSelect, valueSelect, /* @__PURE__ */ React.createElement(\n Button,\n {\n variant: \"secondary\",\n \"aria-label\": \"Remove filter\",\n title: \"Remove filter\",\n className: styles.removeButton,\n icon: \"times\",\n \"data-testid\": `AdHocFilter-remove-${(_e = filter.key) != null ? _e : \"\"}`,\n onClick: () => model._removeFilter(filter)\n }\n ));\n}\nconst getStyles = (theme) => ({\n field: css({\n marginBottom: 0\n }),\n wrapper: css({\n display: \"flex\",\n \"> *\": {\n \"&:not(:first-child)\": {\n // Negative margin hides the double-border on adjacent selects\n marginLeft: -1\n },\n \"&:first-child\": {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0\n },\n \"&:last-child\": {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0\n },\n \"&:not(:first-child):not(:last-child)\": {\n borderRadius: 0\n },\n // Fix focus state zIndex issues\n position: \"relative\",\n zIndex: 0,\n // Adjacent borders are overlapping, so raise children up when hovering etc\n // so all that child's borders are visible.\n \"&:hover\": {\n zIndex: 1\n },\n \"&:focus-within\": {\n zIndex: 2\n }\n }\n }),\n widthWhenOpen: css({\n minWidth: theme.spacing(16)\n }),\n value: css({\n flexBasis: \"content\",\n flexShrink: 1,\n minWidth: \"90px\"\n }),\n key: css({\n flexBasis: \"content\",\n minWidth: \"90px\",\n flexShrink: 1\n }),\n operator: css({\n flexShrink: 0,\n flexBasis: \"content\"\n }),\n removeButton: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2),\n borderLeft: \"none\",\n width: theme.spacing(3),\n marginRight: theme.spacing(1),\n boxSizing: \"border-box\",\n // To not have button background and last select border intersect\n position: \"relative\",\n left: \"1px\"\n })\n});\n\nexport { AdHocFilterRenderer };\n//# sourceMappingURL=AdHocFilterRenderer.js.map\n","import React from 'react';\nimport { AdHocFilterRenderer } from './AdHocFilterRenderer.js';\nimport { Button } from '@grafana/ui';\n\nfunction AdHocFilterBuilder({ model, addFilterButtonText }) {\n const { _wip } = model.useState();\n if (!_wip) {\n return /* @__PURE__ */ React.createElement(\n Button,\n {\n variant: \"secondary\",\n icon: \"plus\",\n title: \"Add filter\",\n \"aria-label\": \"Add filter\",\n \"data-testid\": `AdHocFilter-add`,\n onClick: () => model._addWip()\n },\n addFilterButtonText\n );\n }\n return /* @__PURE__ */ React.createElement(AdHocFilterRenderer, { filter: _wip, model });\n}\n\nexport { AdHocFilterBuilder };\n//# sourceMappingURL=AdHocFilterBuilder.js.map\n","import { isFilterComplete, isMultiValueOperator, FilterOrigin } from './AdHocFiltersVariable.js';\nimport { escapeUrlPipeDelimiters, escapeInjectedFilterUrlDelimiters, toUrlCommaDelimitedString, unescapeUrlDelimiters } from '../utils.js';\n\nclass AdHocFiltersVariableUrlSyncHandler {\n constructor(_variable) {\n this._variable = _variable;\n }\n getKey() {\n return `var-${this._variable.state.name}`;\n }\n getKeys() {\n return [this.getKey()];\n }\n getUrlState() {\n const filters = this._variable.state.filters;\n const baseFilters = this._variable.state.baseFilters;\n let value = [];\n if (filters.length === 0 && (baseFilters == null ? void 0 : baseFilters.length) === 0) {\n return { [this.getKey()]: [\"\"] };\n }\n if (filters.length) {\n value.push(\n ...filters.filter(isFilterComplete).filter((filter) => !filter.hidden).map((filter) => toArray(filter).map(escapeUrlPipeDelimiters).join(\"|\"))\n );\n }\n if (baseFilters == null ? void 0 : baseFilters.length) {\n value.push(\n ...baseFilters == null ? void 0 : baseFilters.filter(isFilterComplete).filter((filter) => !filter.hidden && filter.origin && filter.originalValue).map(\n (filter) => {\n var _a, _b;\n return toArray(filter).map(escapeInjectedFilterUrlDelimiters).join(\"|\").concat(\n `#${(_b = (_a = filter.originalValue) == null ? void 0 : _a.map(escapeInjectedFilterUrlDelimiters).join(\"|\")) != null ? _b : \"\"}#${filter.origin}`\n );\n }\n )\n );\n }\n return {\n [this.getKey()]: value.length ? value : [\"\"]\n };\n }\n updateFromUrl(values) {\n const urlValue = values[this.getKey()];\n if (urlValue == null) {\n return;\n }\n if (urlValue) {\n const filters = deserializeUrlToFilters(urlValue);\n this._variable.setState({\n filters: filters.filter((f) => !f.origin),\n baseFilters: filters.filter((f) => f.origin)\n });\n }\n }\n}\nfunction deserializeUrlToFilters(value) {\n if (Array.isArray(value)) {\n const values = value;\n return values.map(toFilter).filter(isFilter);\n }\n const filter = toFilter(value);\n return filter === null ? [] : [filter];\n}\nfunction toArray(filter) {\n var _a;\n const result = [toUrlCommaDelimitedString(filter.key, filter.keyLabel), filter.operator];\n if (isMultiValueOperator(filter.operator)) {\n filter.values.forEach((value, index) => {\n var _a2;\n result.push(toUrlCommaDelimitedString(value, (_a2 = filter.valueLabels) == null ? void 0 : _a2[index]));\n });\n } else {\n result.push(toUrlCommaDelimitedString(filter.value, (_a = filter.valueLabels) == null ? void 0 : _a[0]));\n }\n return result;\n}\nfunction toFilter(urlValue) {\n var _a;\n if (typeof urlValue !== \"string\" || urlValue.length === 0) {\n return null;\n }\n const [filter, originalValues, origin] = urlValue.split(\"#\");\n const [key, keyLabel, operator, _operatorLabel, ...values] = filter.split(\"|\").reduce((acc, v) => {\n const [key2, label] = v.split(\",\");\n acc.push(key2, label != null ? label : key2);\n return acc;\n }, []).map(unescapeUrlDelimiters);\n return {\n key,\n keyLabel,\n operator,\n value: values[0],\n values: isMultiValueOperator(operator) ? values.filter((_, index) => index % 2 === 0) : void 0,\n valueLabels: values.filter((_, index) => index % 2 === 1),\n condition: \"\",\n origin: isFilterOrigin(origin) ? origin : void 0,\n originalValue: originalValues && originalValues.length ? (_a = originalValues.split(\"|\")) != null ? _a : [originalValues] : void 0\n };\n}\nfunction isFilterOrigin(value) {\n return value === FilterOrigin.Scopes || value === FilterOrigin.Dashboards;\n}\nfunction isFilter(filter) {\n return filter !== null && typeof filter.key === \"string\" && typeof filter.value === \"string\";\n}\n\nexport { AdHocFiltersVariableUrlSyncHandler };\n//# sourceMappingURL=AdHocFiltersVariableUrlSyncHandler.js.map\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n return [':popover-open', ':modal'].some(selector => {\n try {\n return element.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { isShadowRoot, isHTMLElement } from '@floating-ui/utils/dom';\n\nfunction activeElement(doc) {\n let activeElement = doc.activeElement;\n while (((_activeElement = activeElement) == null || (_activeElement = _activeElement.shadowRoot) == null ? void 0 : _activeElement.activeElement) != null) {\n var _activeElement;\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n}\nfunction contains(parent, child) {\n if (!parent || !child) {\n return false;\n }\n const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n // First, attempt with faster native method\n if (parent.contains(child)) {\n return true;\n }\n\n // then fallback to custom implementation with Shadow DOM support\n if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n while (next) {\n if (parent === next) {\n return true;\n }\n // @ts-ignore\n next = next.parentNode || next.host;\n }\n }\n\n // Give up, the result is false\n return false;\n}\n// Avoid Chrome DevTools blue warning.\nfunction getPlatform() {\n const uaData = navigator.userAgentData;\n if (uaData != null && uaData.platform) {\n return uaData.platform;\n }\n return navigator.platform;\n}\nfunction getUserAgent() {\n const uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n return uaData.brands.map(_ref => {\n let {\n brand,\n version\n } = _ref;\n return brand + \"/\" + version;\n }).join(' ');\n }\n return navigator.userAgent;\n}\n\n// License: https://github.com/adobe/react-spectrum/blob/b35d5c02fe900badccd0cf1a8f23bb593419f238/packages/@react-aria/utils/src/isVirtualEvent.ts\nfunction isVirtualClick(event) {\n // FIXME: Firefox is now emitting a deprecation warning for `mozInputSource`.\n // Try to find a workaround for this. `react-aria` source still has the check.\n if (event.mozInputSource === 0 && event.isTrusted) {\n return true;\n }\n if (isAndroid() && event.pointerType) {\n return event.type === 'click' && event.buttons === 1;\n }\n return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n if (isJSDOM()) return false;\n return !isAndroid() && event.width === 0 && event.height === 0 || isAndroid() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse' ||\n // iOS VoiceOver returns 0.333• for width/height.\n event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'touch';\n}\nfunction isSafari() {\n // Chrome DevTools does not complain about navigator.vendor\n return /apple/i.test(navigator.vendor);\n}\nfunction isAndroid() {\n const re = /android/i;\n return re.test(getPlatform()) || re.test(getUserAgent());\n}\nfunction isMac() {\n return getPlatform().toLowerCase().startsWith('mac') && !navigator.maxTouchPoints;\n}\nfunction isJSDOM() {\n return getUserAgent().includes('jsdom/');\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n // On some Linux machines with Chromium, mouse inputs return a `pointerType`\n // of \"pen\": https://github.com/floating-ui/floating-ui/issues/2015\n const values = ['mouse', 'pen'];\n if (!strict) {\n values.push('', undefined);\n }\n return values.includes(pointerType);\n}\nfunction isReactEvent(event) {\n return 'nativeEvent' in event;\n}\nfunction isRootElement(element) {\n return element.matches('html,body');\n}\nfunction getDocument(node) {\n return (node == null ? void 0 : node.ownerDocument) || document;\n}\nfunction isEventTargetWithin(event, node) {\n if (node == null) {\n return false;\n }\n if ('composedPath' in event) {\n return event.composedPath().includes(node);\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support composedPath, but browsers without shadow dom don't\n const e = event;\n return e.target != null && node.contains(e.target);\n}\nfunction getTarget(event) {\n if ('composedPath' in event) {\n return event.composedPath()[0];\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support\n // `composedPath()`, but browsers without shadow DOM don't.\n return event.target;\n}\nconst TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),\" + \"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nfunction isTypeableElement(element) {\n return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nfunction stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nfunction isTypeableCombobox(element) {\n if (!element) return false;\n return element.getAttribute('role') === 'combobox' && isTypeableElement(element);\n}\n\nexport { TYPEABLE_SELECTOR, activeElement, contains, getDocument, getPlatform, getTarget, getUserAgent, isAndroid, isEventTargetWithin, isJSDOM, isMac, isMouseLikePointerType, isReactEvent, isRootElement, isSafari, isTypeableCombobox, isTypeableElement, isVirtualClick, isVirtualPointerEvent, stopEvent };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","/*!\n* tabbable 6.2.0\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\n// NOTE: separate `:not()` selectors has broader browser support than the newer\n// `:not([inert], [inert] *)` (Feb 2023)\n// CAREFUL: JSDom does not support `:not([inert] *)` as a selector; using it causes\n// the entire query to fail, resulting in no nodes found, which will break a lot\n// of things... so we have to rely on JS to identify nodes inside an inert container\nvar candidateSelectors = ['input:not([inert])', 'select:not([inert])', 'textarea:not([inert])', 'a[href]:not([inert])', 'button:not([inert])', '[tabindex]:not(slot):not([inert])', 'audio[controls]:not([inert])', 'video[controls]:not([inert])', '[contenteditable]:not([contenteditable=\"false\"]):not([inert])', 'details>summary:first-of-type:not([inert])', 'details:not([inert])'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n var _element$getRootNode;\n return element === null || element === void 0 ? void 0 : (_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element);\n} : function (element) {\n return element === null || element === void 0 ? void 0 : element.ownerDocument;\n};\n\n/**\n * Determines if a node is inert or in an inert ancestor.\n * @param {Element} [node]\n * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to\n * see if any of them are inert. If false, only `node` itself is considered.\n * @returns {boolean} True if inert itself or by way of being in an inert ancestor.\n * False if `node` is falsy.\n */\nvar isInert = function isInert(node, lookUp) {\n var _node$getAttribute;\n if (lookUp === void 0) {\n lookUp = true;\n }\n // CAREFUL: JSDom does not support inert at all, so we can't use the `HTMLElement.inert`\n // JS API property; we have to check the attribute, which can either be empty or 'true';\n // if it's `null` (not specified) or 'false', it's an active element\n var inertAtt = node === null || node === void 0 ? void 0 : (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'inert');\n var inert = inertAtt === '' || inertAtt === 'true';\n\n // NOTE: this could also be handled with `node.matches('[inert], :is([inert] *)')`\n // if it weren't for `matches()` not being a function on shadow roots; the following\n // code works for any kind of node\n // CAREFUL: JSDom does not appear to support certain selectors like `:not([inert] *)`\n // so it likely would not support `:is([inert] *)` either...\n var result = inert || lookUp && node && isInert(node.parentNode); // recursive\n\n return result;\n};\n\n/**\n * Determines if a node's content is editable.\n * @param {Element} [node]\n * @returns True if it's content-editable; false if it's not or `node` is falsy.\n */\nvar isContentEditable = function isContentEditable(node) {\n var _node$getAttribute2;\n // CAREFUL: JSDom does not support the `HTMLElement.isContentEditable` API so we have\n // to use the attribute directly to check for this, which can either be empty or 'true';\n // if it's `null` (not specified) or 'false', it's a non-editable element\n var attValue = node === null || node === void 0 ? void 0 : (_node$getAttribute2 = node.getAttribute) === null || _node$getAttribute2 === void 0 ? void 0 : _node$getAttribute2.call(node, 'contenteditable');\n return attValue === '' || attValue === 'true';\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n // even if `includeContainer=false`, we still have to check it for inertness because\n // if it's inert, all its children are inert\n if (isInert(el)) {\n return [];\n }\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.}\n */\nvar getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n var candidates = [];\n var elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n var element = elementsToCheck.shift();\n if (isInert(element, false)) {\n // no need to look up since we're drilling down\n // anything inside this container will also be inert\n continue;\n }\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n var assigned = element.assignedElements();\n var content = assigned.length ? assigned : element.children;\n var nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: nestedCandidates\n });\n }\n } else {\n // check candidate element\n var validCandidate = matches.call(element, candidateSelector);\n if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n var shadowRoot = element.shadowRoot ||\n // check for an undisclosed shadow\n typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n\n // no inert look up because we're already drilling down and checking for inertness\n // on the way down, so all containers to this root node should have already been\n // vetted as non-inert\n var validShadowRoot = !isInert(shadowRoot, false) && (!options.shadowRootFilter || options.shadowRootFilter(element));\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n var _nestedCandidates = getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, _nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: _nestedCandidates\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift.apply(elementsToCheck, element.children);\n }\n }\n }\n return candidates;\n};\n\n/**\n * @private\n * Determines if the node has an explicitly specified `tabindex` attribute.\n * @param {HTMLElement} node\n * @returns {boolean} True if so; false if not.\n */\nvar hasTabIndex = function hasTabIndex(node) {\n return !isNaN(parseInt(node.getAttribute('tabindex'), 10));\n};\n\n/**\n * Determine the tab index of a given node.\n * @param {HTMLElement} node\n * @returns {number} Tab order (negative, 0, or positive number).\n * @throws {Error} If `node` is falsy.\n */\nvar getTabIndex = function getTabIndex(node) {\n if (!node) {\n throw new Error('No node provided');\n }\n if (node.tabIndex < 0) {\n // in Chrome,

,
\n Check out our{' '}\n \n Get started doc\n \n , or see{' '}\n \n recent changes\n \n .
\n Help us shape the future of the app.{' '}\n \n Send us feedback\n {' '}\n or engage with us on{' '}\n \n GitHub\n \n .\n